http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48090
Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ramana at gcc dot gnu.org --- Comment #11 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> 2011-04-11 10:24:09 UTC --- (In reply to comment #10) > (In reply to comment #9) > > I confirm that backporting r159644 and r159683 make things work. From > > comment > > 8, I guess that the bug is still there and that one can still hit it sooner > > or > > later, right ? (btw, amazing job) > > It probably papers over it as you guessed. > > This bug lacks proper analysis. The problem is latent in all versions of the compiler and is to do with the pattern *arm_negdi2 and has nothing to do with the afore mentioned revisions. Will submit this after a round of testing. Index: gcc/config/arm/arm.md =================================================================== --- gcc/config/arm/arm.md (revision 172252) +++ gcc/config/arm/arm.md (working copy) @@ -3554,7 +3554,7 @@ ;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1). ;; The first alternative allows the common case of a *full* overlap. (define_insn "*arm_negdi2" - [(set (match_operand:DI 0 "s_register_operand" "=&r,r") + [(set (match_operand:DI 0 "s_register_operand" "=r,&r") (neg:DI (match_operand:DI 1 "s_register_operand" "0,r"))) (clobber (reg:CC CC_REGNUM))] "TARGET_ARM"