* [SH] Add -mlra option.
authorKaz Kojima <kkojima@gcc.gnu.org>
Fri, 19 Dec 2014 04:47:18 +0000 (04:47 +0000)
committerKaz Kojima <kkojima@gcc.gnu.org>
Fri, 19 Dec 2014 04:47:18 +0000 (04:47 +0000)
From-SVN: r218888

gcc/ChangeLog
gcc/config/sh/sh.c
gcc/config/sh/sh.opt

index b22e5aa36079b4652e8d0977dd8d1e19f22475df..fd92d5220579184597b046b834f3e78dc87a9277 100644 (file)
@@ -1,3 +1,10 @@
+2014-12-19  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * config/sh/sh.c (sh_lra_p): New function.
+       (TARGET_LRA_P): Define.
+       (sh_legitimize_reload_address): Return false if sh_lra_p is true.
+       * config/sh/sh.opt (mlra): New option.
+
 2014-12-19  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        * lra-constraints.c (process_address_1): Try if target can split
index 815f4d90a9f4b33cc81a2044149854c9865bd752..e586f48c5ea4c529e279f23df6792b09097230cd 100644 (file)
@@ -222,6 +222,7 @@ static int sh_mode_after (int, int, rtx_insn *);
 static int sh_mode_entry (int);
 static int sh_mode_exit (int);
 static int sh_mode_priority (int entity, int n);
+static bool sh_lra_p (void);
 
 static rtx mark_constant_pool_use (rtx);
 static tree sh_handle_interrupt_handler_attribute (tree *, tree, tree,
@@ -620,6 +621,9 @@ static const struct attribute_spec sh_attribute_table[] =
 #undef  TARGET_ENCODE_SECTION_INFO
 #define TARGET_ENCODE_SECTION_INFO     sh_encode_section_info
 
+#undef TARGET_LRA_P
+#define TARGET_LRA_P sh_lra_p
+
 #undef TARGET_SECONDARY_RELOAD
 #define TARGET_SECONDARY_RELOAD sh_secondary_reload
 
@@ -10484,6 +10488,9 @@ sh_legitimize_reload_address (rtx *p, machine_mode mode, int opnum,
   enum reload_type type = (enum reload_type) itype;
   const int mode_sz = GET_MODE_SIZE (mode);
 
+  if (sh_lra_p ())
+    return false;
+
   if (! ALLOW_INDEXED_ADDRESS
       && GET_CODE (*p) == PLUS
       && REG_P (XEXP (*p, 0)) && REG_P (XEXP (*p, 1)))
@@ -13774,6 +13781,13 @@ sh_mode_priority (int entity ATTRIBUTE_UNUSED, int n)
   return ((TARGET_FPU_SINGLE != 0) ^ (n) ? FP_MODE_SINGLE : FP_MODE_DOUBLE);
 }
 
+/* Return true if we use LRA instead of reload pass.  */
+static bool
+sh_lra_p (void)
+{
+  return sh_lra_flag;
+}
+
 /* Implement TARGET_USE_BY_PIECES_INFRASTRUCTURE_P.  */
 
 static bool
index bb6d39581355ef553b577a19c47a85853109003f..375bb88d741e2396d3643e4a7bb2d7819de4ea64 100644 (file)
@@ -360,3 +360,6 @@ mfsrra
 Target Var(TARGET_FSRRA)
 Enable the use of the fsrra instruction
 
+mlra
+Target Report Var(sh_lra_flag) Init(0) Save
+Use LRA instead of reload (transitional)