From 0d9641d106bb9d99a32f98ed5be56f2aef3ff8b1 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 17 Apr 1995 13:49:59 -0700 Subject: [PATCH] (subst_prev_insn): New variable. (try_combine): Set it. (get_last_value): Use it. From-SVN: r9396 --- gcc/combine.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gcc/combine.c b/gcc/combine.c index 2bb00d41bfd..a95284a1b19 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -173,6 +173,11 @@ static int last_call_cuid; static rtx subst_insn; +/* This is an insn that belongs before subst_insn, but is not currently + on the insn chain. */ + +static rtx subst_prev_insn; + /* This is the lowest CUID that `subst' is currently dealing with. get_last_value will not return a value if the register was set at or after this CUID. If not for this mechanism, we could get confused if @@ -1358,8 +1363,9 @@ try_combine (i3, i2, i1) never appear in the insn stream so giving it the same INSN_UID as I2 will not cause a problem. */ - i1 = gen_rtx (INSN, VOIDmode, INSN_UID (i2), 0, i2, - XVECEXP (PATTERN (i2), 0, 1), -1, 0, 0); + subst_prev_insn = i1 + = gen_rtx (INSN, VOIDmode, INSN_UID (i2), 0, i2, + XVECEXP (PATTERN (i2), 0, 1), -1, 0, 0); SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0)); SUBST (XEXP (SET_SRC (PATTERN (i2)), 0), @@ -9943,9 +9949,12 @@ get_last_value (x) /* If the value was set in a later insn than the ones we are processing, we can't use it even if the register was only set once, but make a quick check to see if the previous insn set it to something. This is commonly - the case when the same pseudo is used by repeated insns. */ + the case when the same pseudo is used by repeated insns. + + This does not work if there exists an instruction which is temporarily + not on the insn chain. */ - if (INSN_CUID (reg_last_set[regno]) >= subst_low_cuid) + if (INSN_CUID (reg_last_set[regno]) >= subst_low_cuid && ! subst_prev_insn) { rtx insn, set; -- 2.30.2