aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-01-17 18:27:37 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-01-17 13:27:37 -0500
commitc7be4f66b05aeb98962fda3dcf84cb895262a639 (patch)
tree83f1f2aacb0598a9018d6c2fffeb97c179c93bf0 /gcc/combine.c
parentd70401eb2fc86f75d6a8ad6eda48386292b4a856 (diff)
downloadgcc-c7be4f66b05aeb98962fda3dcf84cb895262a639.zip
gcc-c7be4f66b05aeb98962fda3dcf84cb895262a639.tar.gz
gcc-c7be4f66b05aeb98962fda3dcf84cb895262a639.tar.bz2
combine.c (try_combine): Don't set i3_subst_into_i2 for case of making new double-word constant.
* combine.c (try_combine): Don't set i3_subst_into_i2 for case of making new double-word constant. Revert last change: instead just test i3_subst_into_i2. From-SVN: r39094
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index e684ba1..6028f6a 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1558,13 +1558,16 @@ try_combine (i3, i2, i1, new_direct_jump_p)
added_links_insn = 0;
/* First check for one important special-case that the code below will
- not handle. Namely, the case where I1 is zero, I2 has multiple sets,
+ not handle. Namely, the case where I1 is zero, I2 is a PARALLEL
and I3 is a SET whose SET_SRC is a SET_DEST in I2. In that case,
we may be able to replace that destination with the destination of I3.
This occurs in the common code where we compute both a quotient and
remainder into a structure, in which case we want to do the computation
directly into the structure to avoid register-register copies.
+ Note that this case handles both multiple sets in I2 and also
+ cases where I2 has a number of CLOBBER or PARALLELs.
+
We make very conservative checks below and only try to handle the
most common cases of this. For example, we only handle the case
where I2 and I3 are adjacent to avoid making difficult register
@@ -1673,7 +1676,6 @@ try_combine (i3, i2, i1, new_direct_jump_p)
immed_double_const (lo, hi, GET_MODE (SET_DEST (temp))));
newpat = PATTERN (i2);
- i3_subst_into_i2 = 1;
goto validate_replacement;
}
@@ -2524,7 +2526,7 @@ try_combine (i3, i2, i1, new_direct_jump_p)
actually came from I3, so that REG_UNUSED notes from I2 will be
properly handled. */
- if (i3_subst_into_i2 && single_set (i2) == 0)
+ if (i3_subst_into_i2)
{
for (i = 0; i < XVECLEN (PATTERN (i2), 0); i++)
if (GET_CODE (XVECEXP (PATTERN (i2), 0, i)) != USE