While working on some more loop partitioning improvements, I noticed some
unnecessary checking. By construction an openacc loop must have at least one
head/tail marker, so we should assert that earlier when lowering the loop (in
the common compiler) and then rely on it later when processing the loop (in the
accelerator compiler).
ok for trunk?
nathan
2016-05-02 Nathan Sidwell <nat...@codesourcery.com>
* omp-low.c (lower_oacc_head_tail): Assert there is at least one
marker.
(oacc_loop_process): Check mask for loop termination.
Index: omp-low.c
===================================================================
--- omp-low.c (revision 235758)
+++ omp-low.c (working copy)
@@ -6402,12 +6402,10 @@ lower_oacc_head_tail (location_t loc, tr
gimple_seq_add_stmt (head, gimple_build_assign (ddvar, integer_zero_node));
unsigned count = lower_oacc_head_mark (loc, ddvar, clauses, head, ctx);
- if (!count)
- lower_oacc_loop_marker (loc, ddvar, false, integer_zero_node, tail);
-
tree fork_kind = build_int_cst (unsigned_type_node, IFN_UNIQUE_OACC_FORK);
tree join_kind = build_int_cst (unsigned_type_node, IFN_UNIQUE_OACC_JOIN);
+ gcc_assert (count);
for (unsigned done = 1; count; count--, done++)
{
gimple_seq fork_seq = NULL;
@@ -19331,10 +19329,8 @@ oacc_loop_process (oacc_loop *loop)
oacc_loop_xform_loop (loop->head_end, loop->ifns, mask_arg, chunk_arg);
- for (ix = 0; ix != GOMP_DIM_MAX && loop->heads[ix]; ix++)
+ for (ix = 0; ix != GOMP_DIM_MAX && mask; ix++)
{
- gcc_assert (mask);
-
while (!(GOMP_DIM_MASK (dim) & mask))
dim++;