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."

Reply via email to