r198864 uncovered a very old bug in the m68k backend, introduced in 1997: probably due to a copy-paste bug the rot[hq]i3+1 patterns reference a non-existing operand. Apparently these patterns have never matched before. Tested on m68k-linux and checked in.
Andreas. * config/m68k/m68k.md (*rotlhi3_lowpart, *rotlqi3_lowpart): Name for rotlhi3+1 and rotlqi3+1, resp. Fix reference to non-existing third operand. diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index abf4b61..719b86b 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -5211,19 +5211,19 @@ return "rol%.w %2,%0"; }) -(define_insn "" +(define_insn "*rotlhi3_lowpart" [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d")) (rotate:HI (match_dup 0) (match_operand:HI 1 "general_operand" "dIP")))] "!TARGET_COLDFIRE" { - if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 8) + if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) >= 8) { - operands[2] = GEN_INT (16 - INTVAL (operands[2])); - return "ror%.w %2,%0"; + operands[1] = GEN_INT (16 - INTVAL (operands[1])); + return "ror%.w %1,%0"; } else - return "rol%.w %2,%0"; + return "rol%.w %1,%0"; }) (define_insn "rotlqi3" @@ -5241,19 +5241,19 @@ return "rol%.b %2,%0"; }) -(define_insn "" +(define_insn "*rotlqi3_lowpart" [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d")) (rotate:QI (match_dup 0) (match_operand:QI 1 "general_operand" "dI")))] "!TARGET_COLDFIRE" { - if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 4) + if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) >= 4) { - operands[2] = GEN_INT (8 - INTVAL (operands[2])); - return "ror%.b %2,%0"; + operands[1] = GEN_INT (8 - INTVAL (operands[1])); + return "ror%.b %1,%0"; } else - return "rol%.b %2,%0"; + return "rol%.b %1,%0"; }) (define_insn "rotrsi3" -- 1.8.2.3 -- Andreas Schwab, SUSE Labs, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."