Commit e9baa644 by Richard Kenner

(protect_from_queue): If (MEM (QUEUED ...)), modify a new MEM instead

of the one we were passed.

From-SVN: r6375
parent 4a86a6d2
...@@ -416,24 +416,29 @@ protect_from_queue (x, modify) ...@@ -416,24 +416,29 @@ protect_from_queue (x, modify)
if (code != QUEUED) if (code != QUEUED)
{ {
/* A special hack for read access to (MEM (QUEUED ...)) /* A special hack for read access to (MEM (QUEUED ...)) to facilitate
to facilitate use of autoincrement. use of autoincrement. Make a copy of the contents of the memory
Make a copy of the contents of the memory location location rather than a copy of the address, but not if the value is
rather than a copy of the address, but not of mode BLKmode. Don't modify X in place since it might be
if the value is of mode BLKmode. */ shared. */
if (code == MEM && GET_MODE (x) != BLKmode if (code == MEM && GET_MODE (x) != BLKmode
&& GET_CODE (XEXP (x, 0)) == QUEUED && !modify) && GET_CODE (XEXP (x, 0)) == QUEUED && !modify)
{ {
register rtx y = XEXP (x, 0); register rtx y = XEXP (x, 0);
XEXP (x, 0) = QUEUED_VAR (y); register rtx new = gen_rtx (MEM, GET_MODE (x), QUEUED_VAR (y));
MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (x);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_VOLATILE_P (new) = MEM_VOLATILE_P (x);
if (QUEUED_INSN (y)) if (QUEUED_INSN (y))
{ {
register rtx temp = gen_reg_rtx (GET_MODE (x)); register rtx temp = gen_reg_rtx (GET_MODE (new));
emit_insn_before (gen_move_insn (temp, x), emit_insn_before (gen_move_insn (temp, new),
QUEUED_INSN (y)); QUEUED_INSN (y));
return temp; return temp;
} }
return x; return new;
} }
/* Otherwise, recursively protect the subexpressions of all /* Otherwise, recursively protect the subexpressions of all
the kinds of rtx's that can contain a QUEUED. */ the kinds of rtx's that can contain a QUEUED. */
......
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