aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>2015-11-06 19:00:59 +0000
committerRamana Radhakrishnan <ramana@gcc.gnu.org>2015-11-06 19:00:59 +0000
commite78d485eb842bfe4209cec9da3725f5ef6a74abb (patch)
treea1bca72a867e35b39aabd8f1da81a85430ceed8c /gcc
parent9a4bbd5dd2f73e60a5b7942599478ab5b71783b3 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/config/aarch64/aarch64.c32
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. */