[Bug tree-optimization/31873] New: missed optimization: we don't move "invariant casts" out of loops

dorit at il dot ibm dot com gcc-bugzilla@gcc.gnu.org
Wed May 9 06:13:00 GMT 2007


This PR was originally opened against PRE (PR25809), but turns out PRE can't
solve this problem, so here's a new PR instead:

In testcases that have reduction, like gcc.dg/vect/vect-reduc-2char.c and
gcc.dg/vect-reduc-2short.c, the following casts appear:

        signed char sdiff;
        unsigned char ux, udiff; 
        sdiff_0 = ...
        loop:
           # sdiff_41 = PHI <sdiff_39, sdiff_0>;
           .....
           ux_36 = ....
           udiff_37 = (unsigned char) sdiff_41;  
           udiff_38 = x_36 + udiff_37;
           sdiff_39 = (signed char) udiff_38;
        end_loop

although these casts could be taken out of loop all together. i.e., transform
the code into something like the following:

        signed char sdiff;
        unsigned char ux, udiff;
        sdiff_0 = ...
        udiff_1 = (unsigned char) sdiff_0;
        loop:
           # udiff_3 = PHI <udiff_2, udiff_1>;
           .....
           ux_36 = ....
           udiff_2 = ux_36 + udiff_3;
        end_loop
        sdiff_39 = (signed char) udiff_2;

see this discussion thread:
http://gcc.gnu.org/ml/gcc-patches/2005-12/msg01827.html


-- 
           Summary: missed optimization: we don't move "invariant casts" out
                    of loops
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dorit at il dot ibm dot com
  GCC host triplet: powerpc64-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31873



More information about the Gcc-bugs mailing list