Bootstrapped and regtested on x86_64-linux-gnu{-m32,}. Pushed to trunk.
gcc/ChangeLog: PR target/102016 * config/i386/sse.md (*avx512f_pshufb_truncv8hiv8qi_1): Add TARGET_AVX512BW to condition. gcc/testsuite/ChangeLog: PR target/102016 * gcc.target/i386/pr102016.c: New test. --- gcc/config/i386/sse.md | 2 +- gcc/testsuite/gcc.target/i386/pr102016.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr102016.c diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 13889687793..95f95823ea3 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -11256,7 +11256,7 @@ (define_insn_and_split "*avx512f_pshufb_truncv8hiv8qi_1" (match_operand:V16QI 2 "pshufb_truncv8hiv8qi_operand")] UNSPEC_PSHUFB) 0) (parallel [(const_int 0)])))] - "TARGET_AVX512VL && ix86_pre_reload_split ()" + "TARGET_AVX512VL && TARGET_AVX512BW && ix86_pre_reload_split ()" "#" "&& 1" [(const_int 0)] diff --git a/gcc/testsuite/gcc.target/i386/pr102016.c b/gcc/testsuite/gcc.target/i386/pr102016.c new file mode 100644 index 00000000000..2ff75cb898a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr102016.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512vl -O2" } */ +typedef char v8qi __attribute__((vector_size (8))); +typedef char v16qi __attribute__((vector_size (16))); +v8qi +foo_wb_128 (v16qi x) +{ + return __builtin_shufflevector (x, x, + 0, 2, 4, 6, 8, 10, 12, 14); +} -- 2.27.0