aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2010-10-19 00:24:36 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2010-10-19 00:24:36 +0000
commit21016e43e2ead79d6dec8827a8c66339f467813b (patch)
tree6999acbad04fe1f45049c9e3c40d68981df29d9f
parent91d2ae685621582eb429f0b2d5a2277151d55121 (diff)
downloadgcc-21016e43e2ead79d6dec8827a8c66339f467813b.zip
gcc-21016e43e2ead79d6dec8827a8c66339f467813b.tar.gz
gcc-21016e43e2ead79d6dec8827a8c66339f467813b.tar.bz2
re PR rtl-optimization/45966 (Incorrect combiner transformation.)
PR rtl-optimization/45966 * combine.c (try_combine): If added_sets_2, deal with the case where i0 feeds i1 and i1 feeds i2. From-SVN: r165674
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/combine.c2
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9ee8309..f9eea06 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-10-18 Bernd Schmidt <bernds@codesourcery.com>
+
+ PR rtl-optimization/45966
+ * combine.c (try_combine): If added_sets_2, deal with the case
+ where i0 feeds i1 and i1 feeds i2.
+
2010-10-18 Jan Hubicka <jh@suse.cz>
* ipa.c (cgraph_externally_visible_p): Handle externally visible and
diff --git a/gcc/combine.c b/gcc/combine.c
index a5088b0f..556228f7 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -3192,6 +3192,8 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
t = subst (t, i0dest, i0src, 0, 0);
if (i1_feeds_i2_n)
t = subst (t, i1dest, i1src, 0, 0);
+ if (i0_feeds_i1_n && i1_feeds_i2_n)
+ t = subst (t, i0dest, i0src, 0, 0);
XVECEXP (newpat, 0, --total_sets) = t;
}