[Bug target/70799] STV pass does not convert DImode shifts
uros at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Apr 23 07:28:00 GMT 2017
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
More information about the Gcc-bugs
mailing list