This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/63304] Aarch64 pc-relative load offset out of range


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]