]> git.ipfire.org Git - thirdparty/gcc.git/commit
[AArch64] Handle literal pools for functions > 1 MiB in size.
authorramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Oct 2015 10:58:06 +0000 (10:58 +0000)
committerramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Oct 2015 10:58:06 +0000 (10:58 +0000)
commit6b7a6f44f5064190fe3f02d4cd0a45c97a159dcc
tree28e427e367439d44f5e2009524bd7c9f75a8d3b0
parent115857efd5662a6b156131d651308c29c8466366
[AArch64] Handle literal pools for functions > 1 MiB in size.

This patch fixes the issue in PR63304 where we have
functions that are > 1MiB. The idea is to use adrp / ldr or adrp / add
instructions to address the literal pools under the use of a command line
option. I would like to turn this on by default on trunk but keep this
disabled by default for the release branches in order to get some
serious testing for this feature while it bakes on trunk.

As a follow-up I would like to try and see if estimate_num_insns or
something else can give us a heuristic to turn this on for "large" functions.
After all the number of incidences of this are quite low in real life,
so may be we should look to restrict this use as much as possible on the
grounds that this code generation implies an extra integer register for
addressing for every floating point and vector constant and I don't think
that's great in code that already may have high register pressure.

Tested on aarch64-none-elf with no regressions. A previous
version was bootstrapped and regression tested.

Applied to trunk.

regards
Ramana

2015-09-14  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

     PR target/63304
     * config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Handle
     nopcrelative_literal_loads.
     (aarch64_classify_address): Likewise.
     (aarch64_constant_pool_reload_icode): Define.
     (aarch64_secondary_reload): Handle secondary reloads for
     literal pools.
     (aarch64_override_options): Handle nopcrelative_literal_loads.
     (aarch64_classify_symbol): Handle nopcrelative_literal_loads.
     * config/aarch64/aarch64.md (aarch64_reload_movcp<GPF_TF:mode><P:mode>):
     Define.
     (aarch64_reload_movcp<VALL:mode><P:mode>): Likewise.
     * config/aarch64/aarch64.opt (mpc-relative-literal-loads): New option.
     * config/aarch64/predicates.md (aarch64_constant_pool_symref): New
     predicate.
     * doc/invoke.texi (mpc-relative-literal-loads): Document.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@228644 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/gimple-fold.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr67366.c [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp