re PR target/79041 (aarch64 backend emits R_AARCH64_ADR_PREL_PG_HI21 relocation despite -mpc-relative-literal-loads option being used)
Fix PR79041 As described in PR79041, -mcmodel=large -mpc-relative-literal-loads may be used to avoid generating ADRP/ADD or ADRP/LDR. However both trunk and GCC7 may still emit ADRP for some constant pool literals. Fix this by adding a aarch64_pcrelative_literal_loads check. gcc/ PR target/79041 * config/aarch64/aarch64.c (aarch64_classify_symbol): Avoid SYMBOL_SMALL_ABSOLUTE for literals with pc-relative literals. gcc/testsuite/ * gcc.target/aarch64/pr79041-2.c: New test. From-SVN: r250514
This commit is contained in:
parent
7db1c40d36
commit
ca73e1b3d3
|
@ -1,3 +1,9 @@
|
|||
2017-07-25 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
PR target/79041
|
||||
* config/aarch64/aarch64.c (aarch64_classify_symbol):
|
||||
Avoid SYMBOL_SMALL_ABSOLUTE for literals with pc-relative literals.
|
||||
|
||||
2017-07-25 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
Backport from trunk r247719.
|
||||
|
|
|
@ -9935,7 +9935,7 @@ aarch64_classify_symbol (rtx x, rtx offset)
|
|||
/* This is alright even in PIC code as the constant
|
||||
pool reference is always PC relative and within
|
||||
the same translation unit. */
|
||||
if (CONSTANT_POOL_ADDRESS_P (x))
|
||||
if (!aarch64_pcrelative_literal_loads && CONSTANT_POOL_ADDRESS_P (x))
|
||||
return SYMBOL_SMALL_ABSOLUTE;
|
||||
else
|
||||
return SYMBOL_FORCE_TO_MEM;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-07-25 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
PR target/79041
|
||||
* gcc.target/aarch64/pr79041-2.c: New test.
|
||||
|
||||
2017-07-25 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
Backport from trunk r247719.
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mcmodel=large -mpc-relative-literal-loads" } */
|
||||
|
||||
__int128
|
||||
t (void)
|
||||
{
|
||||
return (__int128)1 << 80;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "adr" } } */
|
||||
/* { dg-final { scan-assembler-not "adrp" } } */
|
Loading…
Reference in New Issue