On Mon, Jul 28, 2014 at 11:21:53AM +0200, Tom de Vries wrote:
> Jakub,
> 
> we're using expand_omp_for_static_chunk with a chunk_size of one to expand the
> openacc loop construct.
> 
> This results in an inner and outer loop being generated, with the inner loop
> having a trip count of one, which means that the inner loop can be simplified 
> to
> just the inner loop body. However, subsequent optimizations do not manage to 
> do
> this simplification.
> 
> This patch sets the loop exit condition to true if the chunk_size is one, to
> ensure that the compiler will optimize away the inner loop.
> 
> OK for gomp4 branch?
> 
> Thanks,
> - Tom

> 2014-07-25  Tom de Vries  <t...@codesourcery.com>
> 
>       * omp-low.c (expand_omp_for_static_chunk): Remove inner loop if
>       chunk_size is one.

If that is still the case on the trunk, the patch is ok for trunk after
retesting it.  Please mention the PR tree-optimization/65468 in the
ChangeLog entry and make sure there is some runtime testcase that tests
that code path (both OpenMP and OpenACC one).

> diff --git a/gcc/omp-low.c b/gcc/omp-low.c
> index b188e2d..5a73986 100644
> --- a/gcc/omp-low.c
> +++ b/gcc/omp-low.c
> @@ -7345,9 +7345,14 @@ expand_omp_for_static_chunk (struct omp_region *region,
>         stmt = gimple_build_assign (vback, t);
>         gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
>  
> -       t = build2 (fd->loop.cond_code, boolean_type_node,
> -                   DECL_P (vback) && TREE_ADDRESSABLE (vback)
> -                   ? t : vback, e);
> +       if (tree_int_cst_equal (fd->chunk_size, integer_one_node))
> +         t = build2 (EQ_EXPR, boolean_type_node,
> +                     build_int_cst (itype, 0),
> +                     build_int_cst (itype, 1));
> +       else
> +         t = build2 (fd->loop.cond_code, boolean_type_node,
> +                     DECL_P (vback) && TREE_ADDRESSABLE (vback)
> +                     ? t : vback, e);
>         gsi_insert_before (&gsi, gimple_build_cond_empty (t), GSI_SAME_STMT);
>       }
>  


        Jakub

Reply via email to