If-conversion currently lacks the ability to merge two
basic blocks that are identical except for an input register
that can be set up using a conditional move, and possibly some
different local registers.

Cross-jumping lacks the ability to recognize that two blocks are
equivalent when there are different local registers, and (for -Os)
to find opportunities where setting up input registers will allow
to do cross jumping.

The problem has been discussed here:
http://gcc.gnu.org/ml/gcc-patches/2004-01/msg03281.html
http://gcc.gnu.org/ml/gcc-patches/2005-01/msg00672.html

A patch against 4.0 20050218 has been posted here:
http://gcc.gnu.org/ml/gcc-patches/2005-02/msg01066.html

-- 
           Summary: If-conversion can't match equivalent code, and cross-
                    jumping only works for literal matches
           Product: gcc
           Version: 3.3
            Status: UNCONFIRMED
          Keywords: missed-optimization, patch
          Severity: enhancement
          Priority: P2
         Component: rtl-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: amylaar at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org
OtherBugsDependingO 17652
             nThis:


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

Reply via email to