From: Jakub Jelinek Date: Tue, 19 Jan 2010 12:38:25 +0000 (+0100) Subject: re PR debug/42728 ("-fcompare-debug failure (length)" at -O1) X-Git-Tag: releases/gcc-4.5.0~1148 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2178b0f93ae3ae2b2951e026e3f7857780cf2649;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c9bea665fc59..b6ea293c4e8b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-01-19 Jakub Jelinek + + PR debug/42728 + * fwprop.c (all_uses_available_at): Return false if def_set dest + is a REG that is used in def_insn. + 2010-01-19 Joern Rennecke * doc/tm.texi (TARGET_FIXED_CONDITION_CODE_REGS): Add argument names. diff --git a/gcc/fwprop.c b/gcc/fwprop.c index 0c5c7280ad5c..708ab3f8edc1 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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fb6d09334531..f2a4f8a19848 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-19 Jakub Jelinek + + PR debug/42728 + * gcc.dg/pr42728.c: New test. + 2010-01-19 Anthony Green * gcc.dg/tree-ssa/20040204-1.c: Expect this test to pass. diff --git a/gcc/testsuite/gcc.dg/pr42728.c b/gcc/testsuite/gcc.dg/pr42728.c new file mode 100644 index 000000000000..7b2fbb690fbe --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42728.c @@ -0,0 +1,11 @@ +/* PR debug/42728 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fcompare-debug" } */ + +void +foo (char *a) +{ + char *b; + for (; *a; a++) + a = b++; +}