Mark constant-sized objects as addressable if they have poly-int accesses

Programming / Compilers / GCC - rsandifo [138bc75d-0d04-0410-961f-82ee72b054a4] - 3 December 2019 18:06 EST

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

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.

55cbfaf1051 Mark constant-sized objects as addressable if they have poly-int accesses
gcc/ChangeLog | 6 ++++++
gcc/cfgexpand.c | 15 +++++++++++++
gcc/testsuite/ChangeLog | 4 ++++
.../gcc.target/aarch64/sve/acle/general/deref_1.c | 25 ++++++++++++++++++++++
4 files changed, 50 insertions(+)

Upstream: gcc.gnu.org


  • Share