diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-01-19 13:38:25 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-01-19 13:38:25 +0100 |
commit | 2178b0f93ae3ae2b2951e026e3f7857780cf2649 (patch) | |
tree | 4b37170db29f51db95ef0a2f63c886948f11e631 /gcc/fwprop.c | |
parent | 70202e48b64d0a5227673083af61efbdf67e75fe (diff) | |
download | gcc-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.c | 6 |
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; } |