Fix DSE big-endian subreg crash on AArch64.
authorTamar Christina <tamar.christina@arm.com>
Tue, 21 Aug 2018 09:55:07 +0000 (09:55 +0000)
committerTamar Christina <tnfchris@gcc.gnu.org>
Tue, 21 Aug 2018 09:55:07 +0000 (09:55 +0000)
commitdaa9715842345da5b9c440a9fef1ed3bc916bc18
tree12d634187fcdcecf0de83dafe2f8355dc44386b8
parent25d4036370f11d5c32fed965c2d47e0958cbe64a
Fix DSE big-endian subreg crash on AArch64.

This patch fixes an ICE that would happen when extract_low_bits
is called with modes for which you can't extract a valid subreg.
e.g. taking a 32 bytes subreg from a 48 byte mode.

The ICE happens because convert_modes which eventually calls
simplify_gen_subreg does not expect the convertion to fail.

The assert in gen_lowpart_general would then be hit.  The patch
changes it to validate the subreg before trying to convert the
modes.  If the subreg is not possible we return NULL_RTX and bail
out early.

gcc/ChangeLog:

2018-08-21  Tamar Christina  <tamar.christina@arm.com>

* expmed.c (extract_low_bits): Reject invalid subregs early.

gcc/testsuite/ChangeLog:

2018-08-21  Tamar Christina  <tamar.christina@arm.com>

* gcc.target/aarch64/large_struct_copy.c: New test.

From-SVN: r263696
gcc/ChangeLog
gcc/expmed.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/large_struct_copy.c [new file with mode: 0644]