------- Comment #11 from jingyu at google dot com 2010-01-14 00:13 -------
Subject: Re: problematic REG_EQUAL note added to
SUBREG
> Yes, jumping to validate_replacement means that the other combinations are not
> tried. If the new pattern is not valid, the code will try to massage it and
> not try other combinations. And I think that, in practice, it won't actually
> do anything since the various subsequent tricks are incompatible with case2.
>
Good to know.
Thanks very much for the explanation.
Hunk#3 is removed.
I will send the following patch to gcc-patches and CC you.
Index: combine.c
===================================================================
--- combine.c (revision 155801)
+++ combine.c (working copy)
@@ -2663,10 +2663,16 @@ try_combine (rtx i3, rtx i2, rtx i1, int
i2dest = SET_DEST (temp);
i2dest_killed = dead_or_set_p (i2, i2dest);
+ /* Replace the source in I2 with the new constant and make the
+ resulting insn the new pattern for I3. Then skip to where we
+ validate the pattern. Everything was set up above. */
SUBST (SET_SRC (temp),
immed_double_const (olo, ohi, GET_MODE (SET_DEST (temp))));
newpat = PATTERN (i2);
+
+ /* The dest of I3 has been replaced with the dest of I2. */
+ changed_i3_dest = 1;
goto validate_replacement;
}
}
@@ -3038,8 +3044,6 @@ try_combine (rtx i3, rtx i2, rtx i1, int
}
}
- /* We come here when we are replacing a destination in I2 with the
- destination of I3. */
validate_replacement:
/* Note which hard regs this insn has as inputs. */
Thanks,
Jing
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42691