diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c8a52680186..dea95c19f887 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md
index 4d3fd97a1e24..90758b14896d 100644
--- a/gcc/config/s390/predicates.md
+++ b/gcc/config/s390/predicates.md
@@ -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")
@@ -83,6 +83,10 @@
   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;