aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2015-10-12 14:14:11 +0000
committerTom de Vries <vries@gcc.gnu.org>2015-10-12 14:14:11 +0000
commit7aab672f4239ec94b577d1377b2cd0ac8655df35 (patch)
tree775383ae9d05c78a66379b7c0464fd20b0f4f490
parent9371aeccf2c506d5896a5ec7a947137ab465de93 (diff)
downloadgcc-7aab672f4239ec94b577d1377b2cd0ac8655df35.zip
gcc-7aab672f4239ec94b577d1377b2cd0ac8655df35.tar.gz
gcc-7aab672f4239ec94b577d1377b2cd0ac8655df35.tar.bz2
Handle simple latch in expand_omp_for_generic
2015-10-12 Tom de Vries <tom@codesourcery.com> PR tree-optimization/67476 * omp-low.c (expand_omp_for_generic): Handle simple latch. From-SVN: r228717
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/omp-low.c9
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4d721c1..97f4a0d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-12 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/67476
+ * omp-low.c (expand_omp_for_generic): Handle simple latch.
+
2015-10-12 Christophe Lyon <christophe.lyon@linaro.org>
* config/aarch64/aarch64-simd-builtins.def: Update builtins
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index cdcf9d6..f59a6a4 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -6162,7 +6162,9 @@ expand_omp_for_generic (struct omp_region *region,
if (!broken_loop)
{
l2_bb = create_empty_bb (cont_bb);
- gcc_assert (BRANCH_EDGE (cont_bb)->dest == l1_bb);
+ gcc_assert (BRANCH_EDGE (cont_bb)->dest == l1_bb
+ || (single_succ_edge (BRANCH_EDGE (cont_bb)->dest)->dest
+ == l1_bb));
gcc_assert (EDGE_COUNT (cont_bb->succs) == 2);
}
else
@@ -6438,6 +6440,11 @@ expand_omp_for_generic (struct omp_region *region,
make_edge (cont_bb, l2_bb, EDGE_FALSE_VALUE);
add_bb_to_loop (l2_bb, cont_bb->loop_father);
e = find_edge (cont_bb, l1_bb);
+ if (e == NULL)
+ {
+ e = BRANCH_EDGE (cont_bb);
+ gcc_assert (single_succ (e->dest) == l1_bb);
+ }
if (gimple_omp_for_combined_p (fd->for_stmt))
{
remove_edge (e);