diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-09-06 09:29:12 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-09-06 09:29:12 +0200 |
commit | 5ef5a3b7c21df246f1e023f765d61c445cef4d71 (patch) | |
tree | f8d040452ec5242138c3043b9a7cc3be15f871d4 /gcc | |
parent | 3dcdfdc804568d313dd879a5fb6ea9beb115a27b (diff) | |
download | gcc-5ef5a3b7c21df246f1e023f765d61c445cef4d71.zip gcc-5ef5a3b7c21df246f1e023f765d61c445cef4d71.tar.gz gcc-5ef5a3b7c21df246f1e023f765d61c445cef4d71.tar.bz2 |
re PR rtl-optimization/54455 (ICE: RTL check: expected elt 3 type 'B', have '0' (rtx barrier) in compute_bb_for_insn, at cfgrtl.c:418)
PR rtl-optimization/54455
* sel-sched-ir.c (maybe_tidy_empty_bb): Give up if previous fallthru
bb ends up with asm goto referencing bb's label.
* gcc.dg/54455.c: New test.
From-SVN: r191013
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/sel-sched-ir.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/54455.c | 25 |
5 files changed, 55 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be5aeeb..ca50124 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-09-06 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/54455 + * sel-sched-ir.c (maybe_tidy_empty_bb): Give up if previous fallthru + bb ends up with asm goto referencing bb's label. + 2012-09-06 Chen Liqin <liqin.gcc@gmail.com> * config/score/score.c: Remove TARGET_LEGITIMIZE_ADDRESS define diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9b616c2..d237a24 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,4 +1,4 @@ -2012-09-06 Tobias Burnus +2012-09-06 Tobias Burnus <burnus@net-b.de> PR fortran/54463 * trans-intrinsic.c (gfc_conv_intrinsic_funcall): Fix matmul diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index 449efc9..1f1095e 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -1,5 +1,5 @@ /* Instruction scheduling pass. Selective scheduler and pipeliner. - Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -3686,6 +3686,22 @@ maybe_tidy_empty_bb (basic_block bb) FOR_EACH_EDGE (e, ei, bb->preds) if (e->flags & EDGE_COMPLEX) return false; + else if (e->flags & EDGE_FALLTHRU) + { + rtx note; + /* If prev bb ends with asm goto, see if any of the + ASM_OPERANDS_LABELs don't point to the fallthru + label. Do not attempt to redirect it in that case. */ + if (JUMP_P (BB_END (e->src)) + && (note = extract_asm_operands (PATTERN (BB_END (e->src))))) + { + int i, n = ASM_OPERANDS_LABEL_LENGTH (note); + + for (i = 0; i < n; ++i) + if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (bb)) + return false; + } + } free_data_sets (bb); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7089b59..8589e9e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,9 @@ -2012-09-06 Tobias Burnus +2012-09-06 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/54455 + * gcc.dg/54455.c: New test. + +2012-09-06 Tobias Burnus <burnus@net-b.de> PR fortran/54463 * gfortran.dg/promotion_2.f90: New. diff --git a/gcc/testsuite/gcc.dg/54455.c b/gcc/testsuite/gcc.dg/54455.c new file mode 100644 index 0000000..de68a53 --- /dev/null +++ b/gcc/testsuite/gcc.dg/54455.c @@ -0,0 +1,25 @@ +/* PR rtl-optimization/54455 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fschedule-insns -fselective-scheduling --param max-sched-extend-regions-iters=2" } */ + +extern void fn1 (void), fn2 (void); + +static inline __attribute__((always_inline)) int +foo (int *x, long y) +{ + asm goto ("" : : "r" (x), "r" (y) : "memory" : lab); + return 0; +lab: + return 1; +} + +void +bar (int *x) +{ + if (foo (x, 23)) + fn1 (); + else + fn2 (); + + foo (x, 2); +} |