aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2010-11-09 19:23:43 +0000
committerSebastian Pop <spop@gcc.gnu.org>2010-11-09 19:23:43 +0000
commit0104d6c71a694c717617dfc4c847641825ca094c (patch)
tree3d7e9821162a3ea039aaa73e75b610839ad30c8c /gcc
parentfd99dfdffb204765440234841e78437f59aeb264 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/lto/pr46036_0.f9014
-rw-r--r--gcc/tree-if-conv.c2
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));