With -fpu=neon DI mode shifts are expanded after reload.
authorWilco Dijkstra <wdijkstr@arm.com>
Tue, 25 Oct 2016 10:25:28 +0000 (10:25 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Tue, 25 Oct 2016 10:25:28 +0000 (10:25 +0000)
commitad6922b03b0aba8010936394b535acce99f2f66d
tree05acfd94ea6d1113b72ad3ad54100f21c975fa09
parent84c20253961be6a343a8fbe3ec14cd46752b4427
With -fpu=neon DI mode shifts are expanded after reload.

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.

From-SVN: r241508
gcc/ChangeLog
gcc/config/arm/neon.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr78041.c [new file with mode: 0644]