aboutsummaryrefslogtreecommitdiff
path: root/gcc/fwprop.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-01-19 13:38:25 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2010-01-19 13:38:25 +0100
commit2178b0f93ae3ae2b2951e026e3f7857780cf2649 (patch)
tree4b37170db29f51db95ef0a2f63c886948f11e631 /gcc/fwprop.c
parent70202e48b64d0a5227673083af61efbdf67e75fe (diff)
downloadgcc-2178b0f93ae3ae2b2951e026e3f7857780cf2649.zip
gcc-2178b0f93ae3ae2b2951e026e3f7857780cf2649.tar.gz
gcc-2178b0f93ae3ae2b2951e026e3f7857780cf2649.tar.bz2
re PR debug/42728 ("-fcompare-debug failure (length)" at -O1)
PR debug/42728 * fwprop.c (all_uses_available_at): Return false if def_set dest is a REG that is used in def_insn. * gcc.dg/pr42728.c: New test. From-SVN: r156037
Diffstat (limited to 'gcc/fwprop.c')
-rw-r--r--gcc/fwprop.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index 0c5c728..708ab3f 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -818,17 +818,23 @@ all_uses_available_at (rtx def_insn, rtx target_insn)
}
else
{
+ rtx def_reg = REG_P (SET_DEST (def_set)) ? SET_DEST (def_set) : NULL_RTX;
+
/* Look at all the uses of DEF_INSN, and see if they are not
killed between DEF_INSN and TARGET_INSN. */
for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++)
{
df_ref use = *use_rec;
+ if (def_reg && rtx_equal_p (DF_REF_REG (use), def_reg))
+ return false;
if (use_killed_between (use, def_insn, target_insn))
return false;
}
for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++)
{
df_ref use = *use_rec;
+ if (def_reg && rtx_equal_p (DF_REF_REG (use), def_reg))
+ return false;
if (use_killed_between (use, def_insn, target_insn))
return false;
}