Commit 73b7f58c by Bernd Schmidt Committed by Bernd Schmidt

Fix queueing related bugs

From-SVN: r42206
parent 7332066b
2001-05-17 Bernd Schmidt <bernds@redhat.com>
* expr.c (protect_from_queue): Protect against subsequent calls to
emit_queue.
(expand_expr, case ADDR_EXPR): Prevent protect_from_queue from being
too clever.
Thu May 17 18:17:34 CEST 2001 Jan Hubicka <jh@suse.cz>
* simplify_rtx.c (simplify_subreg): Fix simplification of nested subregs.
......
......@@ -396,6 +396,9 @@ protect_from_queue (x, modify)
QUEUED_INSN (y));
return temp;
}
/* Copy the address into a pseudo, so that the returned value
remains correct across calls to emit_queue. */
XEXP (new, 0) = copy_to_reg (XEXP (new, 0));
return new;
}
/* Otherwise, recursively protect the subexpressions of all
......@@ -422,9 +425,11 @@ protect_from_queue (x, modify)
}
return x;
}
/* If the increment has not happened, use the variable itself. */
/* If the increment has not happened, use the variable itself. Copy it
into a new pseudo so that the value remains correct across calls to
emit_queue. */
if (QUEUED_INSN (x) == 0)
return QUEUED_VAR (x);
return copy_to_reg (QUEUED_VAR (x));
/* If the increment has happened and a pre-increment copy exists,
use that copy. */
if (QUEUED_COPY (x) != 0)
......@@ -8588,7 +8593,9 @@ expand_expr (exp, target, tmode, modifier)
if (ignore)
return op0;
op0 = protect_from_queue (op0, 0);
/* Pass 1 for MODIFY, so that protect_from_queue doesn't get
clever and returns a REG when given a MEM. */
op0 = protect_from_queue (op0, 1);
/* We would like the object in memory. If it is a constant, we can
have it be statically allocated into memory. For a non-constant,
......
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