summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/i386/predicates.md3
-rw-r--r--gcc/config/i386/sse.md18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr122598.c14
3 files changed, 14 insertions, 21 deletions
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 57950d31878..c468f5ad26e 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -1319,9 +1319,6 @@
(ior (match_operand 0 "nonimmediate_operand")
(match_test "const_vec_duplicate_p (op)")))
-(define_predicate "const_vec_dup_operand"
- (match_test "const_vec_duplicate_p (op)"))
-
;; Return true when OP is either register operand, or any
;; CONST_VECTOR.
(define_predicate "reg_or_const_vector_operand"
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 8b90845260a..9a8d1767ec9 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -27293,24 +27293,6 @@
DONE;
})
-(define_expand "cond_<insn><mode>"
- [(set (match_operand:VI1_AVX512VL 0 "register_operand")
- (vec_merge:VI1_AVX512VL
- (any_shift:VI1_AVX512VL
- (match_operand:VI1_AVX512VL 2 "register_operand")
- (match_operand:VI1_AVX512VL 3 "const_vec_dup_operand"))
- (match_operand:VI1_AVX512VL 4 "nonimm_or_0_operand")
- (match_operand:<avx512fmaskmode> 1 "register_operand")))]
- "TARGET_GFNI && TARGET_AVX512F"
-{
- rtx count = XVECEXP (operands[3], 0, 0);
- rtx matrix = ix86_vgf2p8affine_shift_matrix (operands[0], count, <CODE>);
- emit_insn (gen_vgf2p8affineqb_<mode>_mask (operands[0], operands[2], matrix,
- const0_rtx, operands[4],
- operands[1]));
- DONE;
-})
-
(define_expand "<insn><mode>3"
[(set (match_operand:VI1_AVX512_3264 0 "register_operand")
(any_rotate:VI1_AVX512_3264
diff --git a/gcc/testsuite/gcc.target/i386/pr122598.c b/gcc/testsuite/gcc.target/i386/pr122598.c
new file mode 100644
index 00000000000..0b943b12a58
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr122598.c
@@ -0,0 +1,14 @@
+/* PR target/122598 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx512f -mgfni" } */
+
+typedef char V __attribute__ ((vector_size (64)));
+
+V
+foo (V v)
+{
+ v >>= (V) {5};
+ v -= ~0;
+ v += (V) {} < v;
+ return v;
+}