]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: Raise error for __vector_{quad,pair} uses without MMA enabled [PR106736]
authorKewen Lin <linkw@linux.ibm.com>
Wed, 21 Dec 2022 03:02:08 +0000 (21:02 -0600)
committerKewen Lin <linkw@linux.ibm.com>
Wed, 21 Dec 2022 03:02:08 +0000 (21:02 -0600)
commit282462b39584ae49eaaa6f53bd44b6cfdc4ccbcb
tree21893f93acb887e477cd90a9e209a0f3dc069b6a
parentef0abcbc400e0ecb8ed1ddf61d96f8f3f88fe63b
rs6000: Raise error for __vector_{quad,pair} uses without MMA enabled [PR106736]

As PR106736 shows, it's unexpected to use __vector_quad and
__vector_pair types without MMA support, it would cause ICE
when expanding the corresponding assignment.  We can't guard
these built-in types registering under MMA support as Peter
pointed out in that PR, because the registering is global,
it doesn't work for target pragma/attribute support with MMA
enabled.  The existing verify_type_context mentioned in [2]
can help to make the diagnostics invalid built-in type uses
better, but as Richard pointed out in [4], it can't deal with
all cases.  As the discussions in [1][3], this patch is to
check the invalid use of built-in types __vector_quad and
__vector_pair in mov pattern of OOmode and XOmode, on the
currently being expanded gimple assignment statement.  It
still puts an assertion in else arm rather than just makes
it go through, it's to ensure we can catch any other possible
unexpected cases in time if there are.

[1] https://gcc.gnu.org/pipermail/gcc/2022-December/240218.html
[2] https://gcc.gnu.org/pipermail/gcc/2022-December/240220.html
[3] https://gcc.gnu.org/pipermail/gcc/2022-December/240223.html
[4] https://gcc.gnu.org/pipermail/gcc-patches/2022-December/608083.html

PR target/106736

gcc/ChangeLog:

* config/rs6000/mma.md (define_expand movoo): Call function
rs6000_opaque_type_invalid_use_p to check and emit error message for
the invalid use of opaque type.
(define_expand movxo): Likewise.
* config/rs6000/rs6000-protos.h
(rs6000_opaque_type_invalid_use_p): New function declaration.
(currently_expanding_gimple_stmt): New extern declaration.
* config/rs6000/rs6000.cc (rs6000_opaque_type_invalid_use_p): New
function.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pr106736-1.c: New test.
* gcc.target/powerpc/pr106736-2.c: Likewise.
* gcc.target/powerpc/pr106736-3.c: Likewise.
* gcc.target/powerpc/pr106736-4.c: Likewise.
* gcc.target/powerpc/pr106736-5.c: Likewise.
gcc/config/rs6000/mma.md
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.cc
gcc/testsuite/gcc.target/powerpc/pr106736-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr106736-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr106736-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr106736-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr106736-5.c [new file with mode: 0644]