summaryrefslogtreecommitdiff
path: root/gcc/fwprop.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-08-20 18:56:49 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-08-20 18:56:49 +0000
commit29b2949ccfc068c78899358ca40218f3518b00dd (patch)
tree013abe1ce3cdfba67f32519713150bc97ed65657 /gcc/fwprop.c
parent4a65e4050b007411afbc13cfb9c29762c683696c (diff)
downloadgcc-29b2949ccfc068c78899358ca40218f3518b00dd.tar.gz
PR rtl-optimization/54294
* fwprop.c (all_uses_available_at): Ignore debug insns in between def_insn and target_insn when checking whether the shortcut is possible. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190541 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fwprop.c')
-rw-r--r--gcc/fwprop.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index d1cba8810ef..e64e76da221 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -1,5 +1,5 @@
/* RTL-based forward propagation pass for GNU compiler.
- Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
+ Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Contributed by Paolo Bonzini and Steven Bosscher.
@@ -799,13 +799,17 @@ all_uses_available_at (rtx def_insn, rtx target_insn)
df_ref *use_rec;
struct df_insn_info *insn_info = DF_INSN_INFO_GET (def_insn);
rtx def_set = single_set (def_insn);
+ rtx next;
gcc_assert (def_set);
/* If target_insn comes right after def_insn, which is very common
- for addresses, we can use a quicker test. */
- if (NEXT_INSN (def_insn) == target_insn
- && REG_P (SET_DEST (def_set)))
+ for addresses, we can use a quicker test. Ignore debug insns
+ other than target insns for this. */
+ next = NEXT_INSN (def_insn);
+ while (next && next != target_insn && DEBUG_INSN_P (next))
+ next = NEXT_INSN (next);
+ if (next == target_insn && REG_P (SET_DEST (def_set)))
{
rtx def_reg = SET_DEST (def_set);