https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93430
--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:322db86f4b4df1261308e8a02e69018d9cea98e9 commit r10-6229-g322db86f4b4df1261308e8a02e69018d9cea98e9 Author: Jakub Jelinek <ja...@redhat.com> Date: Sun Jan 26 12:10:48 2020 +0100 i386: Fix up *avx_vperm_broadcast_v4df [PR93430] Apparently my recent patch which moved the *avx_vperm_broadcast* and *vpermil* patterns before vpermpd broke the following testcase, the define_insn_and_split matched always but the splitter condition only split it if not -mavx2 for V4DFmode, basically relying on the vpermpd pattern to come first. The following patch fixes it by moving that part of SPLIT-CONDITION into CONDITION, so that when it is not met, we just don't match the pattern and thus match the later vpermpd pattern in that case. Except, for { 0, 0, 0, 0 } permutation, there is actually no reason to do that, vbroadcastsd from memory seems to be slightly cheaper than vpermpd $0. 2020-01-26 Jakub Jelinek <ja...@redhat.com> PR target/93430 * config/i386/sse.md (*avx_vperm_broadcast_<mode>): Disallow for TARGET_AVX2 and V4DFmode not in the split condition, but in the pattern condition, though allow { 0, 0, 0, 0 } broadcast always. * gcc.dg/pr93430.c: New test. * gcc.target/i386/avx2-pr93430.c: New test.