From ee9d3095a33df9aa6956c9a7d8782d9bb3fad85e Mon Sep 17 00:00:00 2001
From: Sebastian Pop <sebpop@gmail.com>
Date: Fri, 5 Nov 2010 16:57:00 -0500
Subject: [PATCH] Fix PR46036.
2010-11-04 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.
---
gcc/ChangeLog | 6 ++++++
gcc/testsuite/ChangeLog | 5 +++++
gcc/testsuite/gfortran.dg/lto/pr46036_0.f90 | 14 ++++++++++++++
gcc/tree-if-conv.c | 2 +-
4 files changed, 26 insertions(+), 1 deletions(-)
create mode 100644 gcc/testsuite/gfortran.dg/lto/pr46036_0.f90
@@ -1,3 +1,9 @@
+2010-11-04 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-03 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/46292
@@ -1,3 +1,8 @@
+2010-11-04 Sebastian Pop <sebastian.pop@amd.com>
+
+ PR tree-optimization/46036
+ * gfortran.dg/lto/pr46036_0.f90: New.
+
2010-11-04 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/constexpr-access.C: New.
new file mode 100644
@@ -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
@@ -942,7 +942,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));
--
1.7.0.4