From: Sebastian Pop Date: Tue, 9 Nov 2010 19:23:43 +0000 (+0000) Subject: re PR tree-optimization/46036 (verify_ssa failed: definition in block 3 follows the... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0104d6c71a694c717617dfc4c847641825ca094c;p=gcc.git re PR tree-optimization/46036 (verify_ssa failed: definition in block 3 follows the use) Fix PR46036. 2010-11-09 Sebastian Pop PR tree-optimization/46036 * tree-if-conv.c (predicate_bbs): Call unshare_expr before add_to_dst_predicate_list. * gfortran.dg/lto/pr46036_0.f90: New. From-SVN: r166508 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d41cabca05d..dbf4ef6ab1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-09 Sebastian Pop + + PR tree-optimization/46036 + * tree-if-conv.c (predicate_bbs): Call unshare_expr before + add_to_dst_predicate_list. + 2010-11-09 Jakub Jelinek PR debug/46171 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82fd56bbed6..5517521f671 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-09 Sebastian Pop + + PR tree-optimization/46036 + * gfortran.dg/lto/pr46036_0.f90: New. + 2010-10-09 Jakub Jelinek PR middle-end/45663 diff --git a/gcc/testsuite/gfortran.dg/lto/pr46036_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr46036_0.f90 new file mode 100644 index 00000000000..558c7edc244 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/pr46036_0.f90 @@ -0,0 +1,14 @@ +! { dg-lto-do link } +! { dg-lto-options {{ -O -flto -ftree-vectorize }} } + +function no_of_edges(self) result(res) + integer(kind=kind(1)) :: edge_bit_string + integer(kind=kind(1)) :: res + integer(kind=kind(1)) :: e + do e = 0, 11 + if (.not. btest(edge_bit_string,e)) cycle + res = res + 1 + end do +end function no_of_edges + +end program diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 642dbda24cb..17b66721e5d 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -928,7 +928,7 @@ predicate_bbs (loop_p loop) &true_edge, &false_edge); /* If C is true, then TRUE_EDGE is taken. */ - add_to_dst_predicate_list (loop, true_edge, cond, c); + add_to_dst_predicate_list (loop, true_edge, cond, unshare_expr (c)); /* If C is false, then FALSE_EDGE is taken. */ c2 = invert_truthvalue_loc (loc, unshare_expr (c));