]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: MMA test case emits wrong code when building a vector pair [PR102976]
authorPeter Bergner <bergner@linux.ibm.com>
Tue, 16 Nov 2021 18:14:22 +0000 (12:14 -0600)
committerPeter Bergner <bergner@linux.ibm.com>
Sat, 15 Jan 2022 04:54:39 +0000 (22:54 -0600)
commit7729d2c96d5eac9537c78d368bbc037bea13f988
tree23781712623b3baf3203336c69985e5a9757b4b4
parent1221c37e515e69c6426994a4a77cb2651747c172
rs6000: MMA test case emits wrong code when building a vector pair [PR102976]

PR102976 shows a test case where we generate wrong code when building
a vector pair from 2 vector registers.  The bug here is that with unlucky
register assignments, we can clobber one of the input operands before
we write both registers of the output operand.  The solution is to use
early-clobbers in the assemble pair and accumulator patterns.

2021-11-16  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR target/102976
* config/rs6000/mma.md (*vsx_assemble_pair): Add early-clobber for
output operand.
(*mma_assemble_acc): Likewise.

gcc/testsuite/
PR target/102976
* gcc.target/powerpc/pr102976.c: New test.

(cherry picked from commit 4cdf7db9a39d18bd536d816a5751d4d3cf23808b)
gcc/config/rs6000/mma.md
gcc/testsuite/gcc.target/powerpc/pr102976.c [new file with mode: 0644]