]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: Fix invalid splits when using Altivec style addresses [PR98959]
authorPeter Bergner <bergner@linux.ibm.com>
Mon, 8 Mar 2021 18:20:41 +0000 (12:20 -0600)
committerPeter Bergner <bergner@linux.ibm.com>
Wed, 10 Mar 2021 18:20:00 +0000 (12:20 -0600)
commit410ddbbc6612ca25f4a00120987921372937623e
tree81435e43a69f2c9beb07903988c32dc3ccd5b5d1
parent0a35ff4ecdd22745bda9afd8fe095fb469acd624
rs6000: Fix invalid splits when using Altivec style addresses [PR98959]

The rs6000_emit_le_vsx_* functions assume they are not passed an Altivec
style "& ~16" address.  However, some of our expanders and splitters do
not verify we do not have an Altivec style address before calling those
functions, leading to an ICE.  The solution here is to guard the expanders
and splitters to ensure we do not call them if we're given an Altivec style
address.

2021-03-08  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR target/98959
* config/rs6000/rs6000.c (rs6000_emit_le_vsx_permute): Add an assert
to ensure we do not have an Altivec style address.
* config/rs6000/vsx.md (*vsx_le_perm_load_<mode>): Disable if passed
an Altivec style address.
(*vsx_le_perm_store_<mode>): Likewise.
(splitters after *vsx_le_perm_store_<mode>): Likewise.
(vsx_load_<mode>): Disable special expander if passed an Altivec
style address.
(vsx_store_<mode>): Likewise.

gcc/testsuite/
PR target/98959
* gcc.target/powerpc/pr98959.c: New test.

(cherry picked from commit cb25dea3ef2c7768007bffc56f0e31e1c42b44e2)
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/vsx.md
gcc/testsuite/gcc.target/powerpc/pr98959.c [new file with mode: 0644]