diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2017-06-21 10:40:21 +0000 |
---|---|---|
committer | Wilco Dijkstra <wilco@gcc.gnu.org> | 2017-06-21 10:40:21 +0000 |
commit | f28e54bd06f3733ff147128107a8da6d3e6d428e (patch) | |
tree | 75e5d4aa2430008c006906269cdaa5febd0dc848 /gcc | |
parent | 9a85b75fc414653f4a691ea57b83722489cd3d61 (diff) | |
download | gcc-f28e54bd06f3733ff147128107a8da6d3e6d428e.zip gcc-f28e54bd06f3733ff147128107a8da6d3e6d428e.tar.gz gcc-f28e54bd06f3733ff147128107a8da6d3e6d428e.tar.bz2 |
Mark symbols as constant
Aarch64_legitimate_constant_p currently returns false for symbols,
eventhough they are always valid constants. This means LOSYM isn't
CSEd correctly. If we return true CSE works better, resulting in
smaller/faster code (0.3% smaller code on SPEC2006). Avoid this
for TLS symbols since their sequence is complex.
gcc/
* config/aarch64/aarch64.c (aarch64_legitimate_constant_p):
Return true for non-tls symbols.
From-SVN: r249442
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e08150c..1aaaf61 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-06-21 Wilco Dijkstra <wdijkstr@arm.com> + + * config/aarch64/aarch64.c (aarch64_legitimate_constant_p): + Return true for non-tls symbols. + 2017-06-21 James Greenhalgh <james.greenhalgh@arm.com> * config/aarch64/aarch64-cores.def (cortex-a55): New. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 04417dc..ba6b45f 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -10129,6 +10129,11 @@ aarch64_legitimate_constant_p (machine_mode mode, rtx x) && aarch64_valid_symref (XEXP (x, 0), GET_MODE (XEXP (x, 0)))) return true; + /* Treat symbols as constants. Avoid TLS symbols as they are complex, + so spilling them is better than rematerialization. */ + if (SYMBOL_REF_P (x) && !SYMBOL_REF_TLS_MODEL (x)) + return true; + return aarch64_constant_address_p (x); } |