expr.c (emit_queue): If emitting a SEQUENCE, set QUEUED_INSN to the first insn of the sequence.

* expr.c (emit_queue): If emitting a SEQUENCE, set QUEUED_INSN
	to the first insn of the sequence.

From-SVN: r20997
This commit is contained in:
J"orn Rennecke 1998-07-07 13:26:49 +00:00 committed by Joern Rennecke
parent 759bd8b73b
commit 41b083c42e
3 changed files with 16 additions and 2 deletions

View File

@ -1,3 +1,8 @@
Tue Jul 7 21:23:36 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* expr.c (emit_queue): If emitting a SEQUENCE, set QUEUED_INSN
to the first insn of the sequence.
Tue Jul 7 21:05:25 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* cse (cse_insn): Don't make change without validation.

View File

@ -522,7 +522,15 @@ emit_queue ()
register rtx p;
while ((p = pending_chain))
{
QUEUED_INSN (p) = emit_insn (QUEUED_BODY (p));
rtx body = QUEUED_BODY (p);
if (GET_CODE (body) == SEQUENCE)
{
QUEUED_INSN (p) = XVECEXP (QUEUED_BODY (p), 0, 0);
emit_insn (QUEUED_BODY (p));
}
else
QUEUED_INSN (p) = emit_insn (QUEUED_BODY (p));
pending_chain = QUEUED_NEXT (p);
}
}

View File

@ -30,7 +30,8 @@ Boston, MA 02111-1307, USA. */
/* The variable for which an increment is queued. */
#define QUEUED_VAR(P) XEXP (P, 0)
/* If the increment has been emitted, this is the insn
that does the increment. It is zero before the increment is emitted. */
that does the increment. It is zero before the increment is emitted.
If more than one insn is emitted, this is the first insn. */
#define QUEUED_INSN(P) XEXP (P, 1)
/* If a pre-increment copy has been generated, this is the copy
(it is a temporary reg). Zero if no copy made yet. */