diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2010-11-09 19:23:43 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2010-11-09 19:23:43 +0000 |
commit | 0104d6c71a694c717617dfc4c847641825ca094c (patch) | |
tree | 3d7e9821162a3ea039aaa73e75b610839ad30c8c /gcc | |
parent | fd99dfdffb204765440234841e78437f59aeb264 (diff) | |
download | gcc-0104d6c71a694c717617dfc4c847641825ca094c.zip gcc-0104d6c71a694c717617dfc4c847641825ca094c.tar.gz gcc-0104d6c71a694c717617dfc4c847641825ca094c.tar.bz2 |
re PR tree-optimization/46036 (verify_ssa failed: definition in block 3 follows the use)
Fix PR46036.
2010-11-09 Sebastian Pop <sebastian.pop@amd.com>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/lto/pr46036_0.f90 | 14 | ||||
-rw-r--r-- | gcc/tree-if-conv.c | 2 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d41cabc..dbf4ef6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-09 Sebastian Pop <sebastian.pop@amd.com> + + PR tree-optimization/46036 + * tree-if-conv.c (predicate_bbs): Call unshare_expr before + add_to_dst_predicate_list. + 2010-11-09 Jakub Jelinek <jakub@redhat.com> PR debug/46171 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82fd56b..5517521f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-09 Sebastian Pop <sebastian.pop@amd.com> + + PR tree-optimization/46036 + * gfortran.dg/lto/pr46036_0.f90: New. + 2010-10-09 Jakub Jelinek <jakub@redhat.com> 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 0000000..558c7ed --- /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 642dbda..17b6672 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)); |