diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-08-20 18:56:49 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-08-20 18:56:49 +0000 |
commit | 29b2949ccfc068c78899358ca40218f3518b00dd (patch) | |
tree | 013abe1ce3cdfba67f32519713150bc97ed65657 /gcc/fwprop.c | |
parent | 4a65e4050b007411afbc13cfb9c29762c683696c (diff) | |
download | gcc-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.c | 12 |
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); |