Mark constant-sized objects as addressable if they have poly-int accesses
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 3 Dec 2019 18:06:24 +0000 (18:06 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 3 Dec 2019 18:06:24 +0000 (18:06 +0000)
commit2c98350fcb269a653b11f73ca0175679aa29977a
tree534ac9a3aa65dae82b9fb9147b106d537ec913b9
parente93b5262fdec906660ce7b7763d0e76e705f0803
Mark constant-sized objects as addressable if they have poly-int accesses

If SVE code is written for a specific vector length, it might load from
or store to fixed-sized objects.  This needs to work even without
-msve-vector-bits=N (which should never be needed for correctness).

There's no way of handling a direct poly-int sized reference to a
fixed-size register; it would have to go via memory.  And in that
case it's more efficient to mark the fixed-size object as
addressable from the outset, like we do for array references
with non-constant indices.

2019-12-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* cfgexpand.c (discover_nonconstant_array_refs_r): If an access
with POLY_INT_CST size is made to a fixed-size object, force the
object to live in memory.

gcc/testsuite/
* gcc.target/aarch64/sve/acle/general/deref_1.c: New test.

From-SVN: r278941
gcc/ChangeLog
gcc/cfgexpand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/sve/acle/general/deref_1.c [new file with mode: 0644]