rs6000: Don't ICE when spilling an MMA accumulator
authorPeter Bergner <bergner@linux.ibm.com>
Thu, 6 Aug 2020 15:03:03 +0000 (10:03 -0500)
committerPeter Bergner <bergner@linux.ibm.com>
Thu, 6 Aug 2020 15:10:15 +0000 (10:10 -0500)
commit9c376d1c166e7c8b10bba6f1675d2471ffe8447f
treedc05478324d86a8a2c7669ee83b0f1f6e3109002
parent165843ac435166ac4ad200f185e15ee2d46dc2bb
rs6000: Don't ICE when spilling an MMA accumulator

When we spill an accumulator that has a known zero value, LRA will emit
a new (set (reg:PXI ...) 0) insn, but it does not use the mma_xxsetaccz
pattern to do it, leading to an unrecognized insn ICE.  The solution here
is to move the xxsetaccz instruction into the movpxi pattern and have the
xxsetaccz pattern call the move pattern.

2020-08-06  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR target/96446
* config/rs6000/mma.md (*movpxi): Add xxsetaccz generation.
Disable split for zero constant source operand.
(mma_xxsetaccz): Change to define_expand.  Call gen_movpxi.

gcc/testsuite/
PR target/96446
* gcc.target/powerpc/pr96446.c: New test.
gcc/config/rs6000/mma.md
gcc/testsuite/gcc.target/powerpc/pr96446.c [new file with mode: 0644]