[AArch64] Remove un-necessary secondary reload for addition to SP.
authorIan Bolton <ian.bolton@arm.com>
Thu, 3 Oct 2013 09:50:21 +0000 (09:50 +0000)
committerMarcus Shawcroft <mshawcroft@gcc.gnu.org>
Thu, 3 Oct 2013 09:50:21 +0000 (09:50 +0000)
From-SVN: r203156

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

index 1a3aff53ed51ed42319f146d6ee846a9c1092f0b..002b761a8b3904a31ffead9bc0246ad3bb6702ba 100644 (file)
@@ -1,3 +1,9 @@
+2013-10-03  Ian Bolton  <ian.bolton@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_secondary_reload): Remove legacy
+       code.
+       * config/aarch64/aarch64.md (reload_sp_immediate): Likewise.
+
 2013-10-02  Teresa Johnson  <tejohnson@google.com>
 
        * predict.c (probably_never_executed): New function.
index ff61cd4ab4ba2fc214fce56b70737bc445b71359..f6f587a9122e28cb12693d24856e4b8a854aa73e 100644 (file)
@@ -4028,20 +4028,6 @@ aarch64_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x,
                          enum machine_mode mode,
                          secondary_reload_info *sri)
 {
-  /* Address expressions of the form PLUS (SP, large_offset) need two
-     scratch registers, one for the constant, and one for holding a
-     copy of SP, since SP cannot be used on the RHS of an add-reg
-     instruction.  */
-  if (mode == DImode
-      && GET_CODE (x) == PLUS
-      && XEXP (x, 0) == stack_pointer_rtx
-      && CONST_INT_P (XEXP (x, 1))
-      && !aarch64_uimm12_shift (INTVAL (XEXP (x, 1))))
-    {
-      sri->icode = CODE_FOR_reload_sp_immediate;
-      return NO_REGS;
-    }
-
   /* Without the TARGET_SIMD instructions we cannot move a Q register
      to a Q register directly.  We need a scratch.  */
   if (REG_P (x) && (mode == TFmode || mode == TImode) && mode == GET_MODE (x)
index 797c9f422c43cb17e79aec56f1a1feebeddef94b..830bbeec08efd0ed14d4c47feb7322a4d2c86c02 100644 (file)
 ;; Reload support
 ;; -------------------------------------------------------------------
 
-;; Reload SP+imm where imm cannot be handled by a single ADD instruction.  
-;; Must load imm into a scratch register and copy SP to the dest reg before
-;; adding, since SP cannot be used as a source register in an ADD
-;; instruction.
-(define_expand "reload_sp_immediate"
-  [(parallel [(set (match_operand:DI 0 "register_operand" "=r")
-                  (match_operand:DI 1 "" ""))
-            (clobber (match_operand:TI 2 "register_operand" "=&r"))])]
-  ""
-  {
-    rtx sp = XEXP (operands[1], 0);
-    rtx val = XEXP (operands[1], 1);
-    unsigned regno = REGNO (operands[2]);
-    rtx scratch = operands[1];
-    gcc_assert (GET_CODE (operands[1]) == PLUS);
-    gcc_assert (sp == stack_pointer_rtx);
-    gcc_assert (CONST_INT_P (val));
-
-    /* It is possible that one of the registers we got for operands[2]
-       might coincide with that of operands[0] (which is why we made
-       it TImode).  Pick the other one to use as our scratch.  */
-    if (regno == REGNO (operands[0]))
-      regno++;
-    scratch = gen_rtx_REG (DImode, regno);
-
-    emit_move_insn (scratch, val);
-    emit_move_insn (operands[0], sp);
-    emit_insn (gen_adddi3 (operands[0], operands[0], scratch));
-    DONE;
-  }
-)
-
 (define_expand "aarch64_reload_mov<mode>"
   [(set (match_operand:TX 0 "register_operand" "=w")
         (match_operand:TX 1 "register_operand" "w"))