extension dependant givs

Toon Moene toon@moene.indiv.nluug.nl
Fri Sep 8 09:38:00 GMT 2000


Richard Henderson wrote:

> This is a variant of a patch I did once upon a time for the new ia32
> backend.  The object is to recognize cases in which a sign or zero-extend
> of a BIV does not affect the outcome, and thus could be folded in to
> the initialization of a GIV.

> At the time it was put aside, since the conditions that give rise to the
> problem didn't happen often enough to be worth the effort.  However, it
> does happen often on IA-64.

[ Score:1 Interesting ]

Why is this different on the IA-64 vs. Alpha - they're both 32-bit int,
64 bit pointer machines, no ?

> This optimization unfortunately does not trigger on Alpha at all,
> because there we are more apt to see
> 
>   (zero_extend:DI (subreg:SI (reg:DI) 0))
> 
> and this code does not handle nested extensions.  Another thing
> to fix, perhaps.

Sure, you added special code to the Fortran Frontend in '97 to get it to
generate reasonable code vis a vis this problem - would be nice if we
could remove it (and not have to add it to g95) ...

> The next thing to do is to recognize that in

>   int i, start, end;
>   for (i = start; i < end; ++i)
>     ...

> "i" cannot overflow if "end" is loop invariant since we're protected
> by the initial comparison, and the +1 ensures we will not pass "end".
> This appears to be very common, particularly when start == 0.

Is this also a problem with:

  int i, start, end;
  for (i = end - start; i >=0 ; --i)
    ...

where start and end are untouched by the loop ?  (This is how Fortran
loops are encoded).

Ceterum censeo "dependent" scribendum esse.

-- 
Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html
GNU Fortran 95: http://g95.sourceforge.net/ (under construction)


More information about the Gcc-patches mailing list