------- 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