new unroller vs ppc

Zdenek Dvorak rakdver@atrey.karlin.mff.cuni.cz
Mon Apr 7 02:56:00 GMT 2003


Hello,

> Zdenek> Does this patch:
> Zdenek> http://gcc.gnu.org/ml/gcc-patches/2003-03/msg01564.html
> Zdenek> help?
> 
> 	No, not really:
[snip]

looking at the assembler that comes out of crosscompiler, I see two
problems:

1) we do not do induction variable splitting; the webizer pass
   http://gcc.gnu.org/ml/gcc-patches/2003-02/msg00501.html
   should take care of this
2) this code in cse.c

/* Don't associate these operations if they are a PLUS with the
   same constant and it is a power of two.  These might be doable
   with a pre- or post-increment.  Similarly for two subtracts of
   identical powers of two with post decrement.  */

  if (code == PLUS && INTVAL (const_arg1) == INTVAL (inner_const)
      && ((HAVE_PRE_INCREMENT
           && exact_log2 (INTVAL (const_arg1)) >= 0)
          || (HAVE_POST_INCREMENT
              && exact_log2 (INTVAL (const_arg1)) >= 0)
          || (HAVE_PRE_DECREMENT
              && exact_log2 (- INTVAL (const_arg1)) >= 0)
          || (HAVE_POST_DECREMENT
              && exact_log2 (- INTVAL (const_arg1)) >= 0)))
    break;

prevents us from combining the increments of induction variables even
with webizer.  I think the correct solution is to split
pre/post modify transformation out of flow.c (relatively easy,
I have the patch somewhere), to run it before cse and to cancel this
code.

Zdenek



More information about the Gcc mailing list