diff mbox

[AArch64] Cleanup -mpc-relative-loads

Message ID DB3PR08MB0089DA4AD565732ABD1E37C883590@DB3PR08MB0089.eurprd08.prod.outlook.com
State New
Headers show

Commit Message

Wilco Dijkstra June 3, 2016, 12:56 p.m. UTC
This patch cleans up the -mpc-relative-loads option processing.  Rename to avoid the
"no*" name and confusing !no* expressions.  Fix the option processing code to implement
-mno-pc-relative-loads rather than ignore it.

OK for commit?

ChangeLog:
2016-06-03  Wilco Dijkstra  <wdijkstr@arm.com>

	* config/aarch64/aarch64.opt
	(mpc-relative-literal-loads): Rename internal option name.
	* config/aarch64/aarch64.c
	(aarch64_nopcrelative_literal_loads): Rename to 
	aarch64_pcrelative_literal_loads.
	(aarch64_expand_mov_immediate): Likewise.
	(aarch64_secondary_reload): Likewise.
	(aarch64_can_use_per_function_literal_pools_p): Likewise.
	(aarch64_override_options_after_change_1): Rename and simplify logic.
	(aarch64_classify_symbol): Merge large model checks into switch,
	remove pc-relative load check.
---

Comments

Evandro Menezes June 3, 2016, 8:34 p.m. UTC | #1
On 06/03/16 07:56, Wilco Dijkstra wrote:
> This patch cleans up the -mpc-relative-loads option processing.  Rename to avoid the
> "no*" name and confusing !no* expressions.  Fix the option processing code to implement
> -mno-pc-relative-loads rather than ignore it.
>
> OK for commit?

LGTM
James Greenhalgh June 14, 2016, 1:57 p.m. UTC | #2
On Fri, Jun 03, 2016 at 12:56:19PM +0000, Wilco Dijkstra wrote:
> This patch cleans up the -mpc-relative-loads option processing.  Rename to avoid the
> "no*" name and confusing !no* expressions.  Fix the option processing code to implement
> -mno-pc-relative-loads rather than ignore it.
> 
> OK for commit?

OK.

Thanks,
James

> 
> ChangeLog:
> 2016-06-03  Wilco Dijkstra  <wdijkstr@arm.com>
> 
> 	* config/aarch64/aarch64.opt
> 	(mpc-relative-literal-loads): Rename internal option name.
> 	* config/aarch64/aarch64.c
> 	(aarch64_nopcrelative_literal_loads): Rename to 
> 	aarch64_pcrelative_literal_loads.
> 	(aarch64_expand_mov_immediate): Likewise.
> 	(aarch64_secondary_reload): Likewise.
> 	(aarch64_can_use_per_function_literal_pools_p): Likewise.
> 	(aarch64_override_options_after_change_1): Rename and simplify logic.
> 	(aarch64_classify_symbol): Merge large model checks into switch,
> 	remove pc-relative load check.
diff mbox

Patch

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index be27243fcccc690a2dd83935c67d2956e51b24b7..2394f91de655c35f5ce8798c845391ae0b289e46 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -152,7 +152,7 @@  enum aarch64_processor aarch64_tune = cortexa53;
 unsigned long aarch64_tune_flags = 0;
 
 /* Global flag for PC relative loads.  */
-bool aarch64_nopcrelative_literal_loads;
+bool aarch64_pcrelative_literal_loads;
 
 /* Support for command line parsing of boolean flags in the tuning
    structures.  */
@@ -1703,7 +1703,7 @@  aarch64_expand_mov_immediate (rtx dest, rtx imm)
 	     we need to expand the literal pool access carefully.
 	     This is something that needs to be done in a number
 	     of places, so could well live as a separate function.  */
-	  if (aarch64_nopcrelative_literal_loads)
+	  if (!aarch64_pcrelative_literal_loads)
 	    {
 	      gcc_assert (can_create_pseudo_p ());
 	      base = gen_reg_rtx (ptr_mode);
@@ -4043,7 +4043,7 @@  aarch64_classify_address (struct aarch64_address_info *info,
 	  return ((GET_CODE (sym) == LABEL_REF
 		   || (GET_CODE (sym) == SYMBOL_REF
 		       && CONSTANT_POOL_ADDRESS_P (sym)
-		       && !aarch64_nopcrelative_literal_loads)));
+		       && aarch64_pcrelative_literal_loads)));
 	}
       return false;
 
@@ -5092,7 +5092,7 @@  aarch64_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x,
   if (MEM_P (x) && GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x)
       && (SCALAR_FLOAT_MODE_P (GET_MODE (x))
 	  || targetm.vector_mode_supported_p (GET_MODE (x)))
-      && aarch64_nopcrelative_literal_loads)
+      && !aarch64_pcrelative_literal_loads)
     {
       sri->icode = aarch64_constant_pool_reload_icode (mode);
       return NO_REGS;
@@ -5426,7 +5426,7 @@  aarch64_uxt_size (int shift, HOST_WIDE_INT mask)
 static inline bool
 aarch64_can_use_per_function_literal_pools_p (void)
 {
-  return (!aarch64_nopcrelative_literal_loads
+  return (aarch64_pcrelative_literal_loads
 	  || aarch64_cmodel == AARCH64_CMODEL_LARGE);
 }
 
@@ -7952,32 +7952,31 @@  aarch64_override_options_after_change_1 (struct gcc_options *opts)
 	opts->x_align_functions = aarch64_tune_params.function_align;
     }
 
-  /* If nopcrelative_literal_loads is set on the command line, this
+  /* We default to no pc-relative literal loads.  */
+
+  aarch64_pcrelative_literal_loads = false;
+
+  /* If -mpc-relative-literal-loads is set on the command line, this
      implies that the user asked for PC relative literal loads.  */
-  if (opts->x_nopcrelative_literal_loads == 1)
-    aarch64_nopcrelative_literal_loads = false;
+  if (opts->x_pcrelative_literal_loads == 1)
+    aarch64_pcrelative_literal_loads = true;
 
-  /* If it is not set on the command line, we default to no pc
-     relative literal loads, unless the workaround for Cortex-A53
-     erratum 843419 is in effect.  */
   /* This is PR70113. When building the Linux kernel with
      CONFIG_ARM64_ERRATUM_843419, support for relocations
      R_AARCH64_ADR_PREL_PG_HI21 and R_AARCH64_ADR_PREL_PG_HI21_NC is
      removed from the kernel to avoid loading objects with possibly
-     offending sequences. With nopcrelative_literal_loads, we would
+     offending sequences.  Without -mpc-relative-literal-loads we would
      generate such relocations, preventing the kernel build from
      succeeding.  */
-  if (opts->x_nopcrelative_literal_loads == 2
-      && !TARGET_FIX_ERR_A53_843419)
-    aarch64_nopcrelative_literal_loads = true;
+  if (opts->x_pcrelative_literal_loads == 2
+      && TARGET_FIX_ERR_A53_843419)
+    aarch64_pcrelative_literal_loads = true;
 
-  /* In the tiny memory model it makes no sense
-     to disallow non PC relative literal pool loads
-     as many other things will break anyway.  */
-  if (opts->x_nopcrelative_literal_loads
-      && (aarch64_cmodel == AARCH64_CMODEL_TINY
-	  || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC))
-    aarch64_nopcrelative_literal_loads = false;
+  /* In the tiny memory model it makes no sense to disallow PC relative
+     literal pool loads.  */
+  if (aarch64_cmodel == AARCH64_CMODEL_TINY
+      || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
+    aarch64_pcrelative_literal_loads = true;
 }
 
 /* 'Unpack' up the internal tuning structs and update the options
@@ -9179,18 +9178,6 @@  aarch64_classify_symbol (rtx x, rtx offset)
 
   if (GET_CODE (x) == SYMBOL_REF)
     {
-      if (aarch64_cmodel == AARCH64_CMODEL_LARGE)
-	{
-	  /* This is alright even in PIC code as the constant
-	     pool reference is always PC relative and within
-	     the same translation unit.  */
-	  if (nopcrelative_literal_loads
-	      && CONSTANT_POOL_ADDRESS_P (x))
-	    return SYMBOL_SMALL_ABSOLUTE;
-	  else
-	    return SYMBOL_FORCE_TO_MEM;
-	}
-
       if (aarch64_tls_symbol_p (x))
 	return aarch64_classify_tls_symbol (x);
 
@@ -9231,6 +9218,15 @@  aarch64_classify_symbol (rtx x, rtx offset)
 		    ?  SYMBOL_SMALL_GOT_28K : SYMBOL_SMALL_GOT_4G);
 	  return SYMBOL_SMALL_ABSOLUTE;
 
+	case AARCH64_CMODEL_LARGE:
+	  /* This is alright even in PIC code as the constant
+	     pool reference is always PC relative and within
+	     the same translation unit.  */
+	  if (CONSTANT_POOL_ADDRESS_P (x))
+	    return SYMBOL_SMALL_ABSOLUTE;
+	  else
+	    return SYMBOL_FORCE_TO_MEM;
+
 	default:
 	  gcc_unreachable ();
 	}
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index c637ff43a504933c701735c9d5afddbc9a1e41f8..bc50ec9d7e9c83403d09ab248fe3cb1d09b5ad39 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -146,7 +146,7 @@  EnumValue
 Enum(aarch64_abi) String(lp64) Value(AARCH64_ABI_LP64)
 
 mpc-relative-literal-loads
-Target Report Save Var(nopcrelative_literal_loads) Init(2) Save
+Target Report Save Var(pcrelative_literal_loads) Init(2) Save
 PC relative literal loads.
 
 mlow-precision-recip-sqrt