aboutsummaryrefslogtreecommitdiff
path: root/libjava/javax
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2024-08-27 09:48:28 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2024-08-27 09:48:28 +0100
commit708ee71808ea61758e73d0e36274b4194b28576a (patch)
tree4264f4519f950fba8e3af54697d495bb0f232245 /libjava/javax
parent9db997e5ac4a206b9428eb2447fcdc90e37725f4 (diff)
downloadgcc-master.zip
gcc-master.tar.gz
gcc-master.tar.bz2
Handle arithmetic on eliminated address indices [PR116413]HEADtrunkmaster
This patch fixes gcc.c-torture/compile/opout.c for m68k with LRA enabled. The test has: ... z (a, b) { return (int) &a + (int) &b + (int) x + (int) z; } so it adds the address of two incoming arguments. This ends up being treated as an LEA in which the "index" is the incoming argument pointer, which the LEA multiplies by 2. The incoming argument pointer is then eliminated, leading to: (plus:SI (plus:SI (ashift:SI (plus:SI (reg/f:SI 24 %argptr) (const_int -4 [0xfffffffffffffffc])) (const_int 1 [0x1])) (reg/f:SI 41 [ _6 ])) (const_int 20 [0x14])) In the address_info scheme, the innermost plus has to be treated as the index "term", since that's the thing that's subject to index_reg_class. gcc/ PR middle-end/116413 * rtl.h (address_info): Update commentary. * rtlanal.cc (valid_base_or_index_term_p): New function, split out from... (get_base_term, get_index_term): ...here. Handle elimination PLUSes.
Diffstat (limited to 'libjava/javax')
0 files changed, 0 insertions, 0 deletions