Hi! My patch from yesterday apparently broke some V32HImode permutations as the testcase shows. The first function assumed it would never be called in d->testing_p mode and so went right away into emitting the code. And the second one assumed V32HImode would never reach it, which now can for the !TARGET_AVX512BW case. We don't have a instruction in that case though.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2021-08-12 Jakub Jelinek <ja...@redhat.com> PR target/101860 * config/i386/i386-expand.c (ix86_expand_vec_one_operand_perm_avx512): If d->testing_p, return true after performing checks instead of actually expanding the insn. (expand_vec_perm_broadcast_1): Handle V32HImode - assert !TARGET_AVX512BW and return false. * gcc.target/i386/avx512f-pr101860.c: New test. --- gcc/config/i386/i386-expand.c.jj 2021-08-10 12:37:53.867159317 +0200 +++ gcc/config/i386/i386-expand.c 2021-08-11 11:02:03.994908828 +0200 @@ -18116,6 +18116,9 @@ ix86_expand_vec_one_operand_perm_avx512 return false; } + if (d->testing_p) + return true; + target = d->target; op0 = d->op0; for (int i = 0; i < d->nelt; ++i) @@ -20481,6 +20484,10 @@ expand_vec_perm_broadcast_1 (struct expa gcc_assert (!TARGET_AVX2 || d->perm[0]); return false; + case E_V32HImode: + gcc_assert (!TARGET_AVX512BW); + return false; + default: gcc_unreachable (); } --- gcc/testsuite/gcc.target/i386/avx512f-pr101860.c.jj 2021-08-11 11:05:28.090072461 +0200 +++ gcc/testsuite/gcc.target/i386/avx512f-pr101860.c 2021-08-11 11:05:17.157224399 +0200 @@ -0,0 +1,5 @@ +/* PR target/101860 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512f -mno-avx512bw" } */ + +#include "../../gcc.dg/torture/vshuf-v32hi.c" Jakub