https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98434
--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by hongtao Liu <liuho...@gcc.gnu.org>: https://gcc.gnu.org/g:3bd86940c428de9dde53e41265fb1435ed236f5e commit r12-1764-g3bd86940c428de9dde53e41265fb1435ed236f5e Author: liuhongt <hongtao....@intel.com> Date: Tue Jan 26 16:29:32 2021 +0800 i386: Add vashlm3/vashrm3/vlshrm3 to enable vectorization of vector shift vector. [PR98434] Add expanders for vashl<VI12_AVX512BW>, vlshr<VI12_AVX512BW>, vashr<VI1_AVX512BW> and vashr<v32hi,v16hi,v4di,v8di>. Besides there's some assumption in expand_mult_const that mul and add must be available at the same time, but for i386, addv8qi is restricted under TARGET_64BIT, but mulv8qi not, that could cause ICE. So restrict mulv8qi and shiftv8qi under TARGET_64BIT. gcc/ChangeLog: PR target/98434 * config/i386/i386-expand.c (ix86_expand_vec_interleave): Adjust comments for ix86_expand_vecop_qihi2. (ix86_expand_vecmul_qihi): Renamed to .. (ix86_expand_vecop_qihi2): Adjust function prototype to support shift operation, add static to definition. (ix86_expand_vec_shift_qihi_constant): Add static to definition. (ix86_expand_vecop_qihi): Call ix86_expand_vecop_qihi2 and ix86_expand_vec_shift_qihi_constant. * config/i386/i386-protos.h (ix86_expand_vecmul_qihi): Deleted. (ix86_expand_vec_shift_qihi_constant): Deleted. * config/i386/sse.md (VI12_256_512_AVX512VL): New mode iterator. (mulv8qi3): Call ix86_expand_vecop_qihi directly, add condition TARGET_64BIT. (mul<mode>3): Ditto. (<insn><mode>3): Ditto. (vlshr<mode>3): Extend to support avx512 vlshr. (v<insn><mode>3): New expander for vashr/vlshr/vashl. (v<insn>v8qi3): Ditto. (vashrv8hi3<mask_name>): Renamed to .. (vashr<mode>3): And extend to support V16QImode for avx512. (vashrv16qi3): Deleted. (vashrv2di3<mask_name>): Extend expander to support avx512 instruction. gcc/testsuite/ChangeLog: PR target/98434 * gcc.target/i386/pr98434-1.c: New test. * gcc.target/i386/pr98434-2.c: New test. * gcc.target/i386/avx512vl-pr95488-1.c: Adjust testcase.