------- Comment #17 from steven at gcc dot gnu dot org  2010-01-09 22:17 -------
In GCC 4.4 only one crossjump happens. The second crossjump does not happen
because the basic blocks are not identical. The register allocator has not
allocated the registers in the same way:
                                        .L2:
        movl    a, %edx                         movl    a, %eax
        movl    %edx, %ecx                      movl    %eax, %edx
        andl    $3, %ecx                        andl    $3, %edx
        leal    (%ecx,%edx), %edx               leal    (%edx,%eax), %eax
        movl    %edx, a                         movl    %eax, a
        movl    b, %edx                         movl    b, %eax
        movl    %edx, %ecx                      movl    %eax, %edx
        orl     $3, %ecx                        orl     $3, %edx
        leal    (%ecx,%edx), %edx               leal    (%edx,%eax), %eax
        movl    %edx, b                         movl    %eax, b
                                                jmp     .L7

The problem in this case is thus, that there is no pre-RA crossjumping pass
anymore.

Works for me with my patch for PR20070.


-- 

steven at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  BugsThisDependsOn|                            |20070
      Known to fail|                            |4.4.0 4.4.1 4.4.2 4.5.0
            Summary|[4.3 Regression] Fails to   |[4.3/4.4/4.5 Regression]
                   |cross-jump                  |Fails to cross-jump


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

Reply via email to