diff options
author | Pengfei Li <Pengfei.Li2@arm.com> | 2025-08-07 14:52:45 +0000 |
---|---|---|
committer | Pengfei Li <Pengfei.Li2@arm.com> | 2025-08-08 13:42:25 +0000 |
commit | aa1e7dd6a354da428e23bd5e528a8a0f744e7351 (patch) | |
tree | efca31e41276141ae1cea1df5099f205b11e808f /libjava/java/net/URLClassLoader$2.h | |
parent | c9d0953ec88a4a4d2d949042ecb44deaeb65961f (diff) | |
download | gcc-aa1e7dd6a354da428e23bd5e528a8a0f744e7351.zip gcc-aa1e7dd6a354da428e23bd5e528a8a0f744e7351.tar.gz gcc-aa1e7dd6a354da428e23bd5e528a8a0f744e7351.tar.bz2 |
AArch64: Fix invalid immediate offsets in SVE gather/scatter [PR121449]
This patch fixes incorrect constraints in RTL patterns for AArch64 SVE
gather/scatter with type widening/narrowing and vector-plus-immediate
addressing. The bug leads to below "immediate offset out of range"
errors during assembly, eventually causing compilation failures.
/tmp/ccsVqBp1.s: Assembler messages:
/tmp/ccsVqBp1.s:54: Error: immediate offset out of range 0 to 31 at operand 3 -- `ld1b z1.d,p0/z,[z1.d,#64]'
Current RTL patterns for such instructions incorrectly use vgw or vgd
constraints for the immediate operand, base on the vector element type
in Z registers (zN.s or zN.d). However, for gather/scatter with type
conversions, the immediate range for vector-plus-immediate addressing is
determined by the element type in memory, which differs from that in
vector registers. Using the wrong constraint can produce out-of-range
offset values that cannot be encoded in the instruction.
This patch corrects the constraints used in these patterns. A test case
that reproduces the issue is also included.
Bootstrapped and regression-tested on aarch64-linux-gnu.
gcc/ChangeLog:
PR target/121449
* config/aarch64/aarch64-sve.md
(mask_gather_load<mode><v_int_container>): Use vg<Vesize>
constraints for alternatives with immediate offset.
(mask_scatter_store<mode><v_int_container>): Likewise.
gcc/testsuite/ChangeLog:
PR target/121449
* g++.target/aarch64/sve/pr121449.C: New test.
Diffstat (limited to 'libjava/java/net/URLClassLoader$2.h')
0 files changed, 0 insertions, 0 deletions