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:
Wilco Dijkstra 2017-07-25 12:08:59 +00:00 committed by Wilco Dijkstra
parent 7db1c40d36
commit ca73e1b3d3
4 changed files with 23 additions and 1 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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.

View File

@ -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" } } */