With -fpu=neon DI mode shifts are expanded after reload. DI mode registers can
commit78e31c4cd1efb656908d73c255e04c69895b63ac
authorwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Oct 2016 10:25:28 +0000 (25 10:25 +0000)
committerwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Oct 2016 10:25:28 +0000 (25 10:25 +0000)
tree05acfd94ea6d1113b72ad3ad54100f21c975fa09
parent95d79e0c81cc370b81ad7c2c65b3e15084e394df
With -fpu=neon DI mode shifts are expanded after reload.  DI mode registers can
either fully or partially overlap on both ARM and Thumb-2.  However the shift
expansion code can only deal with the full overlap case, and generates incorrect
code for partial overlaps.  The fix is to add new variants that support either
full overlap or no overlap.

    gcc/
PR target/78041
* config/arm/neon.md (ashldi3_neon): Add "r 0 i" and "&r r i" variants.
Remove partial overlap check for shift by 1.
(ashldi3_neon): Likewise.
    testsuite/
* gcc.target/arm/pr78041.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241508 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/arm/neon.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr78041.c [new file with mode: 0644]