S/390: Fix a problem with the bswap vector pattern
[gcc.git] / gcc / config / s390 / vx-builtins.md
index 22189ff24147e2467afe22572e561f7a6620f521..3020bc94d3e4447c0196b1ff746bd15df32cfa8b 100644 (file)
 ; vec_revb (vec_insert_and_zero(x))             bswap-and-replicate-1.c
 ; vllebrzh, vllebrzf, vllebrzg
 (define_insn "*vec_insert_and_zero_bswap<mode>"
-  [(set (match_operand:V_HW_HSD                    0 "register_operand" "=v")
+  [(set (match_operand:V_HW_HSD                    0 "register_operand"       "=v")
        (bswap:V_HW_HSD (unspec:V_HW_HSD
-                        [(match_operand:<non_vec> 1 "memory_operand"    "R")]
-                        UNSPEC_VEC_INSERT_AND_ZERO)))]
+                        [(match_operand:<non_vec> 1 "memory_operand"          "R")]
+                        UNSPEC_VEC_INSERT_AND_ZERO)))
+   (use (match_operand:V16QI                       2 "permute_pattern_operand" "X"))]
   "TARGET_VXE2"
   "vllebrz<bhfgq>\t%v0,%1"
   [(set_attr "op_type" "VRX")])
 ; vec_revb (vec_insert (*a, vec_revb (b), 1))      set-element-bswap-1.c
 ; vlebrh, vlebrf, vlebrg
 (define_insn "*vec_set_bswap_vec<mode>"
-  [(set (match_operand:V_HW_HSD                                     0 "register_operand" "=v")
+  [(set (match_operand:V_HW_HSD                                     0 "register_operand"       "=v")
        (bswap:V_HW_HSD
-        (unspec:V_HW_HSD [(match_operand:<non_vec>                 1 "memory_operand"    "R")
-                          (match_operand:SI                        2 "const_int_operand" "C")
-                          (bswap:V_HW_HSD (match_operand:V_HW_HSD  3 "register_operand"  "0"))]
-                         UNSPEC_VEC_SET)))]
+        (unspec:V_HW_HSD [(match_operand:<non_vec>                 1 "memory_operand"          "R")
+                          (match_operand:SI                        2 "const_int_operand"       "C")
+                          (bswap:V_HW_HSD (match_operand:V_HW_HSD  3 "register_operand"        "0"))]
+                         UNSPEC_VEC_SET)))
+   (use (match_operand:V16QI                                        4 "permute_pattern_operand" "X"))]
   "TARGET_VXE2 && UINTVAL (operands[2]) < GET_MODE_NUNITS (<V_HW_HSD:MODE>mode)"
   "vlebr<bhfgq>\t%v0,%1,%2"
   [(set_attr "op_type" "VRX")])