The following patch fixes all testsuite regressions on ia64 in comparison with reload.

The patch was successfully bootstrapped on ia64 and x86/x86-64.

Committed as rev. 189235.

2012-07-03  Vladimir Makarov <vmaka...@redhat.com>

        * lra-eliminations.c (lra_eliminate_regs_1): Use Pmode for
        plus_constant calls.
        (eliminate_regs_in_insn): Ditto.


Index: lra-eliminations.c
===================================================================
--- lra-eliminations.c	(revision 189016)
+++ lra-eliminations.c	(working copy)
@@ -304,12 +304,12 @@ lra_eliminate_regs_1 (rtx x, enum machin
 	  if ((ep = get_elimination (regno)) != NULL)
 	    {
 	      rtx to = subst_p ? ep->to_rtx : ep->from_rtx;
-	      
+
 	      if (update_p)
-		return plus_constant (GET_MODE (x), to,
+		return plus_constant (Pmode, to,
 				      ep->offset - ep->previous_offset);
 	      else if (full_p)
-		return plus_constant (GET_MODE (x), to, ep->offset);
+		return plus_constant (Pmode, to, ep->offset);
 	      else
 		return to;
 	    }
@@ -843,8 +843,7 @@ eliminate_regs_in_insn (rtx insn, bool r
 		      rtx src;
 		      
 		      offset -= (ep->offset - ep->previous_offset);
-		      src = plus_constant (GET_MODE (SET_SRC (old_set)),
-					   ep->to_rtx, offset);
+		      src = plus_constant (Pmode, ep->to_rtx, offset);
 		      
 		      /* First see if this insn remains valid when we
 			 make the change.  If not, keep the INSN_CODE
@@ -930,8 +929,7 @@ eliminate_regs_in_insn (rtx insn, bool r
 	     before.  */
 	  if (offset == 0 || plus_src)
 	    {
-	      rtx new_src = plus_constant (GET_MODE (XEXP (plus_cst_src, 0)),
-					   to_rtx, offset);
+	      rtx new_src = plus_constant (GET_MODE (to_rtx), to_rtx, offset);
 	      
 	      old_set = single_set (insn);
 

Reply via email to