public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Corey Minyard <minyard@acm.org>
To: Richard Henderson <rth@redhat.com>
Cc: gcc@gcc.gnu.org
Subject: Re: Loop optimization bug with Ada front end on PPC (and probably Alpha)
Date: Sun, 25 Nov 2001 15:06:00 -0000	[thread overview]
Message-ID: <3C0179C5.2090002@acm.org> (raw)
Message-ID: <20011125150600.LROSFwlcpAXFXPVSXLPqKa2E-BQrJ8Yb-tvea37N_gs@z> (raw)
In-Reply-To: <20011124124100.A2485@redhat.com>

Richard Henderson wrote:

>On Thu, Nov 22, 2001 at 01:21:20AM -0600, Corey Minyard wrote:
>
>>     for I in 1 .. Len loop
>>         a[i] := b[i];
>>     end loop;
>>
>
>Give me a complete compilable testcase and I'll look at it.
>
>
>r~
>
The following shows the problem:

    procedure Ada.Tster (S   : in out String;
                         Len : in out Integer) is
    begin
       Len := 0;
       for I in 1 .. S'Length loop
          if S (I) /= ' ' then
             Len := Len + 1;
             S (Len) := S (I);
          end if;
       end loop;
    end Ada.Tster;

Unfortunately, it's not simple to reproduce this, since you have to 
build an Ada cross compiler, and you have to compile this code as part 
of the compiler (since you can't compile anything else easily without 
having gnatlib compiled and installed)  And it's not the same as the one 
reported by Andreas Schwab; I don't think you can reproduce this 
particular bug with the C compiler.  You have to jump past the increment 
to enter the loop, but the jump has to be after the loop begin note.

I have attached a patch that is less of a cheap hack than the previous 
one, it scans the insns of the loop to detect the situation.  With this 
patch I can do a full bootstrap on the PowerPC.  Another way to solve 
this problem would be to move the jump past the increment to before the 
loop begin note; the doloop code will detect this and not apply the 
doloop optimization, but then no for loops from the Ada front-end will 
have doloop optimization.

The attached patch might be done in a simpler manner, but I don't know 
the code well enought right now to know, and I couldn't find a better 
way in a quick search.  It was more complicated than I like because in 
some loop the increment variable is not the same one that is 
incremented, another variable is incremented then assigned to the 
increment variable.  This code only handles one level of assignment, it 
might be necessary to have more.

-Corey

  parent reply	other threads:[~2001-11-25 15:06 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-13  5:20 Corey Minyard
2001-11-13  6:05 ` David Edelsohn
2001-11-14  8:05   ` Corey Minyard
2001-11-13  8:02 ` guerby
2001-11-13  9:48   ` Corey Minyard
2001-11-16 22:19     ` David Edelsohn
2001-11-26  7:39       ` David Edelsohn
2001-11-15  0:48 ` Richard Henderson
2001-11-15 14:19   ` Andreas Schwab
2001-11-15 16:20     ` Richard Henderson
2001-11-25 12:23       ` Richard Henderson
2001-11-18  9:18     ` Richard Henderson
2001-11-27  0:02       ` Richard Henderson
2001-11-25  8:57     ` Andreas Schwab
2001-11-15 18:02   ` Corey Minyard [this message]
2001-11-15 19:37     ` Richard Henderson
2001-11-25 15:52       ` Richard Henderson
2001-11-16  3:13     ` Richard Henderson
2001-11-16  3:42       ` Corey Minyard
2001-11-16  8:54         ` Bryce McKinlay
2001-11-26  0:47           ` Bryce McKinlay
2001-11-25 20:27         ` Corey Minyard
2001-11-17  1:33       ` Corey Minyard
2001-11-17  6:09         ` Corey Minyard
2001-11-26 10:22           ` Corey Minyard
2001-11-17 11:51         ` Richard Henderson
2001-11-17 15:20           ` Corey Minyard
2001-11-26 14:45             ` Corey Minyard
2001-11-18  5:15           ` Corey Minyard
2001-11-18  8:59             ` Richard Henderson
2001-11-19  2:58               ` Corey Minyard
2001-11-19  3:11                 ` Richard Henderson
2001-11-19  5:36                   ` Corey Minyard
2001-11-19  7:48                     ` Richard Henderson
2001-11-19  7:58                       ` Corey Minyard
2001-11-19  9:43                         ` Richard Henderson
2001-11-19 12:44                           ` Corey Minyard
2001-11-19 13:53                             ` Richard Henderson
2001-11-20 11:20                               ` Corey Minyard
2001-11-27 19:57                                 ` Corey Minyard
2001-11-27 15:31                               ` Richard Henderson
2001-11-27 15:04                             ` Corey Minyard
2001-11-27 14:27                           ` Richard Henderson
2001-11-27 13:25                         ` Corey Minyard
2001-11-27 12:58                       ` Richard Henderson
2001-11-27 11:51                     ` Corey Minyard
2001-11-27 10:29                   ` Richard Henderson
2001-11-27 10:08                 ` Corey Minyard
2001-11-26 23:18               ` Richard Henderson
2001-11-26 17:15             ` Corey Minyard
2001-11-26 13:49           ` Richard Henderson
2001-11-26  8:58         ` Corey Minyard
2001-11-25 17:58       ` Richard Henderson
2001-11-25 15:06     ` Corey Minyard
2001-11-15 18:47 Richard Kenner
2001-11-25 15:13 ` Richard Kenner
2001-11-15 19:05 dewar
2001-11-25 15:20 ` dewar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3C0179C5.2090002@acm.org \
    --to=minyard@acm.org \
    --cc=gcc@gcc.gnu.org \
    --cc=rth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).