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
next prev 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).