Commit 0423421f by Alan Modra Committed by Alan Modra

re PR target/16480 (using -msdata causes internal compiler error)

	PR target/16480
	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Don't abort
	on "(mem (symbol_ref ..))" rtl.  Look at LO_SUM base regs as well
	as PLUS base regs.

From-SVN: r86598
parent 37d5a9a5
2004-08-26 Alan Modra <amodra@bigpond.net.au>
PR target/16480
* config/rs6000/rs6000.c (rs6000_split_multireg_move): Don't abort
on "(mem (symbol_ref ..))" rtl. Look at LO_SUM base regs as well
as PLUS base regs.
2005-08-28 Paul Brook <paul@codesourcery.com> 2005-08-28 Paul Brook <paul@codesourcery.com>
* config/arm/symbian.h (SUBTARGET_ASM_FLOAT_SPEC): Default to * config/arm/symbian.h (SUBTARGET_ASM_FLOAT_SPEC): Default to
......
...@@ -11352,18 +11352,14 @@ rs6000_split_multireg_move (rtx dst, rtx src) ...@@ -11352,18 +11352,14 @@ rs6000_split_multireg_move (rtx dst, rtx src)
src = newsrc; src = newsrc;
} }
/* We have now address involving an base register only. breg = XEXP (src, 0);
If we use one of the registers to address memory, if (GET_CODE (breg) == PLUS || GET_CODE (breg) == LO_SUM)
we have change that register last. */ breg = XEXP (breg, 0);
breg = (GET_CODE (XEXP (src, 0)) == PLUS /* If the base register we are using to address memory is
? XEXP (XEXP (src, 0), 0) also a destination reg, then change that register last. */
: XEXP (src, 0)); if (REG_P (breg)
&& REGNO (breg) >= REGNO (dst)
if (!REG_P (breg))
abort();
if (REGNO (breg) >= REGNO (dst)
&& REGNO (breg) < REGNO (dst) + nregs) && REGNO (breg) < REGNO (dst) + nregs)
j = REGNO (breg) - REGNO (dst); j = REGNO (breg) - REGNO (dst);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment