[Patch AArch64] Switch constant pools to separate rodata sections.
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>
Fri, 6 Nov 2015 19:00:59 +0000 (19:00 +0000)
committerRamana Radhakrishnan <ramana@gcc.gnu.org>
Fri, 6 Nov 2015 19:00:59 +0000 (19:00 +0000)
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

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index ff2b73dd655dac19b31ca70d32bad6d305370630..eee5b6c92d9c10aa1bcfc7d87f854b5b2b42f68e 100644 (file)
@@ -1,3 +1,13 @@
+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.
index 6738a4a71a8cfe932ab3cf792958a30e67a041ff..1b7be838c73121bbe9a0a3843bd73342ec691cae 100644 (file)
@@ -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.  */