operand[0] has a subreg taken (as operand[3]), which is modified before operand[1] is used.
Built succesfully but I'm not set up to run the testsuite, sorry. It fixes the testcase of course. gcc/ChangeLog: 2014-04-16 Segher Boessenkool <seg...@kernel.crashing.org> * config/m68k/m68k.md (extendplussidi): Add earlyclobber. --- gcc/config/m68k/m68k.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index e61048b..9e7f3e2 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -1869,7 +1869,7 @@ (define_insn "extendsidi2" ;; result of the SI tree to be in the lower register of the DI target (define_insn "extendplussidi" - [(set (match_operand:DI 0 "register_operand" "=d") + [(set (match_operand:DI 0 "register_operand" "=&d") (sign_extend:DI (plus:SI (match_operand:SI 1 "general_operand" "%rmn") (match_operand:SI 2 "general_operand" "rmn"))))] "" -- 1.8.1.4