diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-12-01 17:57:07 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-12-01 17:57:07 +0100 |
commit | 0397b9654739300f9a1e8a76c8cc816d3cb83bc7 (patch) | |
tree | 2a0b61e7b0f5bbfe78e39830f2ed9679d4bb4e5c /gcc/loop-unroll.c | |
parent | c8218030cc41f25713093f2604d784a781097a11 (diff) | |
download | gcc-0397b9654739300f9a1e8a76c8cc816d3cb83bc7.tar.gz |
re PR rtl-optimization/51014 (ICE: in apply_opt_in_copies, at loop-unroll.c:2283 with -O2 -g -funroll-loops)
PR rtl-optimization/51014
* loop-unroll.c (apply_opt_in_copies): Ignore label DEBUG_INSNs
both from bb and orig_bb.
* g++.dg/opt/pr51014.C: New test.
From-SVN: r181883
Diffstat (limited to 'gcc/loop-unroll.c')
-rw-r--r-- | gcc/loop-unroll.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 6deff4141a3..378b933baf0 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -1,5 +1,5 @@ /* Loop unrolling and peeling. - Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2010 + Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -2262,10 +2262,15 @@ apply_opt_in_copies (struct opt_info *opt_info, for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb)); insn = next) { next = NEXT_INSN (insn); - if (!INSN_P (insn)) + if (!INSN_P (insn) + || (DEBUG_INSN_P (insn) + && TREE_CODE (INSN_VAR_LOCATION_DECL (insn)) == LABEL_DECL)) continue; - while (!INSN_P (orig_insn)) + while (!INSN_P (orig_insn) + || (DEBUG_INSN_P (orig_insn) + && (TREE_CODE (INSN_VAR_LOCATION_DECL (orig_insn)) + == LABEL_DECL))) orig_insn = NEXT_INSN (orig_insn); ivts_templ.insn = orig_insn; |