]> gcc.gnu.org Git - gcc.git/commitdiff
(subst_prev_insn): New variable.
authorJim Wilson <wilson@gcc.gnu.org>
Mon, 17 Apr 1995 20:49:59 +0000 (13:49 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Mon, 17 Apr 1995 20:49:59 +0000 (13:49 -0700)
(try_combine): Set it.
(get_last_value): Use it.

From-SVN: r9396

gcc/combine.c

index 2bb00d41bfd3010f4954371a87b526bf3d346b72..a95284a1b198b956b80623511d2ecb5ef4602751 100644 (file)
@@ -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;
 
This page took 0.070858 seconds and 5 git commands to generate.