https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118333
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |liuhongt at gcc dot gnu.org Ever confirmed|0 |1 Last reconfirmed| |2025-01-07 Status|UNCONFIRMED |NEW --- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to David Binderman from comment #0) > Static analyser cppcheck says: > > gcc/config/i386/i386-expand.cc:24871:35: warning: Identical condition > '!TARGET_AVX512BW', second condition is always false > [identicalConditionAfterEarlyExit] > > Source code is > > if (!TARGET_AVX512BW) > return false; > > if ((qimode == V16QImode && !TARGET_AVX2) > || (qimode == V32QImode && (!TARGET_AVX512BW || !TARGET_EVEX512)) > /* There are no V64HImode instructions. */ > || qimode == V64QImode) > return false; > > Suggest remove second condition. The comment before the first condition says: /* Without VPMOVWB (provided by AVX512BW ISA), the expansion uses the generic permutation to merge the data back into the right place. This permutation results in VPERMQ, which is slow, so better fall back to ix86_expand_vecop_qihi. */ so the whole function should be rewritten with this in mind. Even with the above condition in place, V16QImode without AVX512VL will fallback to VPERMQ: case E_V16QImode: himode = V16HImode; if (TARGET_AVX512VL && TARGET_AVX512BW) gen_truncate = gen_truncv16hiv16qi2;