unsigned char v; int baz (unsigned char u, unsigned char w) { if ((u - w) & 0x80) v = 1; } Combine does not like as much as for m68k the RTL produced by the optimizers, because of the lack of byte operations: (insn 10 9 11 f.c:5 (set (reg:QI 35) - (and:QI (subreg:QI (reg:SI 34) 3) -(insn 11 10 12 f.c:5 (set (cc0) - (compare (reg:QI 35) (const_int 0 [0x0]))) -1 (nil)) vs. (insn 10 9 11 f.c:5 (set (reg:QI 35) + (subreg:QI (reg:SI 34) 3)) -1 (nil)) + +(insn 11 10 12 f.c:5 (set (reg:SI 36) + (and:SI (subreg:SI (reg:QI 35) 0) (const_int -128 [0xffffff80]))) -1 (nil)) +(insn 12 11 13 f.c:5 (set (reg:QI 37) + (subreg:QI (reg:SI 36) 3)) -1 (nil)) + +(insn 13 12 14 f.c:5 (set (cc0) + (compare (reg:QI 37) (const_int 0 [0x0]))) -1 (nil)) The extra insn 12 is present because of this in dojump.c: 564 /* The RTL optimizers prefer comparisons against pseudos. */ 565 if (GET_CODE (temp) == SUBREG) 566 { 567 /* Compare promoted variables in their promoted mode. */ 568 if (SUBREG_PROMOTED_VAR_P (temp) 569 && REG_P (XEXP (temp, 0))) 570 temp = XEXP (temp, 0); 571 else 572 temp = copy_to_reg (temp); 573 }
I have a patch.
Hmm, the patch changes a canonicalization in a way that may break some patterns on some targets. :-( Not sure how to proceed.
GCC 4.5.0 is being released. Deferring to 4.5.1.
GCC 4.5.1 is being released, adjusting target milestone.
GCC 4.5.2 is being released, adjusting target milestone.
GCC 4.5.3 is being released, adjusting target milestone.
GCC 4.6.4 has been released and the branch has been closed.
The 4.7 branch is being closed, moving target milestone to 4.8.4.
GCC 4.8.4 has been released.
Author: law Date: Wed May 27 21:13:25 2015 New Revision: 223781 URL: https://gcc.gnu.org/viewcvs?rev=223781&root=gcc&view=rev Log: PR target/39726 * gcc.dg/target/m68k/pr39726-1.c: New test. Added: trunk/gcc/testsuite/gcc.target/m68k/pr39726.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog
Recently fixed on trunk by a patch to match.pd. Not planning to backport to the release branches.
The gcc-4_8-branch is being closed, re-targeting regressions to 4.9.3.
GCC 4.9.3 has been released.
GCC 4.9 branch is being closed
(In reply to Richard Biener from comment #14) > GCC 4.9 branch is being closed So is GCC 5 branch. (In reply to Jeffrey A. Law from comment #11) > Recently fixed on trunk by a patch to match.pd. Not planning to backport to > the release branches. So FIXED then.