This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/30905] [4.3/4.4/4.5 Regression] Fails to cross-jump
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Jan 2010 22:17:10 -0000
- Subject: [Bug middle-end/30905] [4.3/4.4/4.5 Regression] Fails to cross-jump
- References: <bug-30905-10053@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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