S/390: Make shift_count_or_setmem_operand predicate to check for mode.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Tue, 19 May 2015 17:21:56 +0000 (17:21 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Tue, 19 May 2015 17:21:56 +0000 (17:21 +0000)
gcc/
* config/s390/predicates.md (shift_count_or_setmem_operand):
        Add mode check to make sure that only scalar integer values
        are accepted.

From-SVN: r223392

gcc/ChangeLog
gcc/config/s390/predicates.md

index 8c8a52680186ae4f4427d943bcb24ea770dccf70..dea95c19f8873241388e98423d2ac814f72db310 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/predicates.md (shift_count_or_setmem_operand): Add
+       mode check to make sure that only scalar integer values are
+       accepted.
+
 2015-05-19  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree.c (verify_type_variant): Fix #undef.
index 4d3fd97a1e241df6ef407fe89eb4fca11e34732d..90758b14896dc17aec7ebd72637c65c6ab405224 100644 (file)
@@ -75,7 +75,7 @@
        (and (match_test "mode == Pmode")
            (match_test "!legitimate_la_operand_p (op)"))))
 
-;; Return true if OP is a valid operand as shift count or setmem.
+;; Return true if OP is a valid operand as scalar shift count or setmem.
 
 (define_predicate "shift_count_or_setmem_operand"
   (match_code "reg, subreg, plus, const_int")
   HOST_WIDE_INT offset;
   rtx base;
 
+  if (GET_MODE (op) != VOIDmode
+      && GET_MODE_CLASS (GET_MODE (op)) != MODE_INT)
+    return false;
+
   /* Extract base register and offset.  */
   if (!s390_decompose_shift_count (op, &base, &offset))
     return false;