diff options
author | Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> | 2015-11-06 19:00:59 +0000 |
---|---|---|
committer | Ramana Radhakrishnan <ramana@gcc.gnu.org> | 2015-11-06 19:00:59 +0000 |
commit | e78d485eb842bfe4209cec9da3725f5ef6a74abb (patch) | |
tree | a1bca72a867e35b39aabd8f1da81a85430ceed8c /gcc | |
parent | 9a4bbd5dd2f73e60a5b7942599478ab5b71783b3 (diff) | |
download | gcc-e78d485eb842bfe4209cec9da3725f5ef6a74abb.zip gcc-e78d485eb842bfe4209cec9da3725f5ef6a74abb.tar.gz gcc-e78d485eb842bfe4209cec9da3725f5ef6a74abb.tar.bz2 |
[Patch AArch64] Switch constant pools to separate rodata sections.
Properly apply ..
2015-11-06 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
Properly apply.
2015-11-05 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
* config/aarch64/aarch64.c
(aarch64_can_use_per_function_literal_pools_p): New.
(aarch64_use_blocks_for_constant_p): Adjust declaration
and use aarch64_can_use_function_literal_pools_p.
(aarch64_select_rtx_section): Update.
From-SVN: r229878
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 32 |
2 files changed, 33 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff2b73d..eee5b6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2015-11-06 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + Properly apply. + 2015-11-05 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + * config/aarch64/aarch64.c + (aarch64_can_use_per_function_literal_pools_p): New. + (aarch64_use_blocks_for_constant_p): Adjust declaration + and use aarch64_can_use_function_literal_pools_p. + (aarch64_select_rtx_section): Update. + +2015-11-06 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + * config/arm/arm-ldmstm.ml: Rewrite to generate unified asm templates. * config/arm/arm.c (arm_asm_trampoline_template): Make unified asm safe. (arm_output_multireg_pop): Likewise. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 6738a4a..1b7be83 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5237,24 +5237,38 @@ aarch64_uxt_size (int shift, HOST_WIDE_INT mask) return 0; } +/* Constant pools are per function only when PC relative + literal loads are true or we are in the large memory + model. */ + +static inline bool +aarch64_can_use_per_function_literal_pools_p (void) +{ + return (!aarch64_nopcrelative_literal_loads + || aarch64_cmodel == AARCH64_CMODEL_LARGE); +} + static bool -aarch64_use_blocks_for_constant_p (machine_mode mode ATTRIBUTE_UNUSED, - const_rtx x ATTRIBUTE_UNUSED) +aarch64_use_blocks_for_constant_p (machine_mode, const_rtx) { /* We can't use blocks for constants when we're using a per-function constant pool. */ - return false; + return !aarch64_can_use_per_function_literal_pools_p (); } +/* Select appropriate section for constants depending + on where we place literal pools. */ + static section * -aarch64_select_rtx_section (machine_mode mode ATTRIBUTE_UNUSED, - rtx x ATTRIBUTE_UNUSED, - unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED) +aarch64_select_rtx_section (machine_mode mode, + rtx x, + unsigned HOST_WIDE_INT align) { - /* Force all constant pool entries into the current function section. */ - return function_section (current_function_decl); -} + if (aarch64_can_use_per_function_literal_pools_p ()) + return function_section (current_function_decl); + return default_elf_select_rtx_section (mode, x, align); +} /* Costs. */ |