This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/63304] Aarch64 pc-relative load offset out of range
- From: "ramana at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 09 Oct 2015 11:02:17 +0000
- Subject: [Bug target/63304] Aarch64 pc-relative load offset out of range
- Auto-submitted: auto-generated
- References: <bug-63304-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63304
--- Comment #27 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> ---
(In reply to Ramana Radhakrishnan from comment #26)
> Author: ramana
> Date: Fri Oct 9 10:58:06 2015
> New Revision: 228644
>
> URL: https://gcc.gnu.org/viewcvs?rev=228644&root=gcc&view=rev
> Log:
> [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.
>
>
> Added:
> trunk/gcc/testsuite/gcc.target/arm/pr67366.c
> Modified:
> trunk/gcc/ChangeLog
> trunk/gcc/gimple-fold.c
> trunk/gcc/testsuite/ChangeLog
> trunk/gcc/testsuite/lib/target-supports.exp
This commit really was for PR67366.. Copied wrong text into the commit message.