lra: Don't remove the scratch in (mem:BLK (scratch))
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 29 Oct 2015 19:24:48 +0000 (20:24 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Thu, 29 Oct 2015 19:24:48 +0000 (20:24 +0100)
LRA wants to replace SCRATCH registers with real registers.  It should
not do that with (mem:BLK (scratch)), which is special, not really a
scratch register.

2015-10-29  Segher Boessenkool  <segher@kernel.crashing.org>

* lra-constraints.c (process_address_1): Handle (mem:BLK (scratch))
by ignoring it.

From-SVN: r229551

gcc/ChangeLog
gcc/lra-constraints.c

index fa3e95651deb6dc174861febb55d8d3be8e09af9..75ba2e83d4494c8ddde29450cbd2537ba6ef6f63 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-29  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * lra-constraints.c (process_address_1): Handle (mem:BLK (scratch))
+       by ignoring it.
+
 2015-10-29  Richard Henderson  <rth@redhat.com>
 
        PR target/68124
index 0f54b6c24ce07e253a61290c976e3f235e37bd24..c2777e982a7f44dfdf6be51452c576496aca4123 100644 (file)
@@ -2874,6 +2874,11 @@ process_address_1 (int nop, bool check_only_p,
   enum constraint_num cn = lookup_constraint (constraint);
   bool change_p = false;
 
+  if (MEM_P (op)
+      && GET_MODE (op) == BLKmode
+      && GET_CODE (XEXP (op, 0)) == SCRATCH)
+    return false;
+
   if (insn_extra_address_constraint (cn))
     decompose_lea_address (&ad, curr_id->operand_loc[nop]);
   else if (MEM_P (op))