https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70799
--- Comment #9 from uros at gcc dot gnu.org --- Author: uros Date: Sun Apr 23 07:25:30 2017 New Revision: 247082 URL: https://gcc.gnu.org/viewcvs?rev=247082&root=gcc&view=rev Log: PR target/70799 * config/i386/i386.c (dimode_scalar_to_vector_candidate_p) <case ASHIFT, case LSHIFTRT>: Also consider variable shifts. Check "XEXP (src, 1)" operand here. <case PLUS, case MINUS, case IOR, case XOR, case AND>: Check "XEXP (src, 1)" operand here. (dimode_scalar_chain::make_vector_copies): Detect count register of a shift instruction. Zero extend count register from QImode to DImode to satisfy vector shift pattern count operand predicate. Substitute vector shift count operand with a DImode copy. (dimode_scalar_chain::convert_reg): Ditto, zero-extend from vector register. testsuite/ChangeLog: PR target/70799 * gcc.target/i186/pr70799-4.c: New test. Added: trunk/gcc/testsuite/gcc.target/i386/pr70799-4.c Modified: trunk/gcc/ChangeLog trunk/gcc/config/i386/i386.c trunk/gcc/testsuite/ChangeLog