Hi!

Supposedly my recent invalid shift count expansion changes broke
m68k bootstrap, we now really require that the shift expanders
have some non-VOIDmode, so that we can convert_mode it to that
mode.  But m68k didn't specify mode.  For valid shift counts
the patch makes no difference beyond fixing the ICE, those are
all CONST_INTs which when converted to CONST_INTs valid for
SImode give the same values.

Fixed thusly, Matthias has kindly tested it on m68k-linux, ok for trunk?

2016-02-22  Jakub Jelinek  <ja...@redhat.com>

        PR target/69885
        * config/m68k/m68k.md (ashldi3, ashrdi3, lshrdi3): Use
        SImode for last match_operand.

        * gcc.dg/pr69885.c: New test.

--- gcc/config/m68k/m68k.md.jj  2016-01-20 10:55:16.000000000 +0100
+++ gcc/config/m68k/m68k.md     2016-02-22 11:14:01.789697673 +0100
@@ -4544,7 +4544,7 @@ (define_insn "*ashldi3"
 (define_expand "ashldi3"
   [(set (match_operand:DI 0 "register_operand" "")
        (ashift:DI (match_operand:DI 1 "register_operand" "")
-                  (match_operand 2 "const_int_operand" "")))]
+                  (match_operand:SI 2 "const_int_operand" "")))]
   "!TARGET_COLDFIRE"
 {
   /* ???  This is a named pattern like this is not allowed to FAIL based
@@ -4813,7 +4813,7 @@ (define_insn "ashrdi_const"
 (define_expand "ashrdi3"
   [(set (match_operand:DI 0 "register_operand" "")
        (ashiftrt:DI (match_operand:DI 1 "register_operand" "")
-                    (match_operand 2 "const_int_operand" "")))]
+                    (match_operand:SI 2 "const_int_operand" "")))]
   "!TARGET_COLDFIRE"
 {
   /* ???  This is a named pattern like this is not allowed to FAIL based
@@ -5082,7 +5082,7 @@ (define_insn "*lshrdi3_const"
 (define_expand "lshrdi3"
   [(set (match_operand:DI 0 "register_operand" "")
        (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
-                    (match_operand 2 "const_int_operand" "")))]
+                    (match_operand:SI 2 "const_int_operand" "")))]
   "!TARGET_COLDFIRE"
 {
   /* ???  This is a named pattern like this is not allowed to FAIL based
--- gcc/testsuite/gcc.dg/pr69885.c.jj   2016-02-22 11:14:50.981023120 +0100
+++ gcc/testsuite/gcc.dg/pr69885.c      2016-02-22 11:13:45.000000000 +0100
@@ -0,0 +1,13 @@
+/* PR target/69885 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-m68000" { target m68k*-*-* } } */
+
+void bar (void);
+
+void
+foo (long long x)
+{
+  if (x >> 1)
+    bar ();
+}

        Jakub

Reply via email to