[PING][PATCH][PR65443] Add transform_to_exit_first_loop_alt
Thomas Schwinge
thomas@codesourcery.com
Mon Jun 8 15:59:00 GMT 2015
Hi Tom!
On Mon, 8 Jun 2015 12:43:01 +0200, Tom de Vries <Tom_deVries@mentor.com> wrote:
> There are two problems in try_transform_to_exit_first_loop_alt:
> 1. In case the latch is not a singleton bb, the function should return
> false rather than true.
> 2. The check for singleton bb should ignore debug-insns.
>
> Attached patch fixes these problems.
> Fix try_transform_to_exit_first_loop_alt
> PR tree-optimization/66442
> * gimple-iterator.h (gimple_seq_nondebug_singleton_p): Add function.
> * tree-parloops.c (try_transform_to_exit_first_loop_alt): Return false
> if the loop latch is not a singleton. Use
> gimple_seq_nondebug_singleton_p instead of gimple_seq_singleton_p.
Per my testing, the backport of this patch that you committed to
gomp-4_0-branch, r224219, introduces a number of regressions in your
OpenACC kernels test cases, specifically the »scan-tree-dump-times
parloops_oacc_kernels "(?n)pragma omp target
oacc_parallel.*num_gangs\\(32\\)" 1« tests. Would you please have a
look?
Grüße,
Thomas
> gcc/gimple-iterator.h | 29 +++++++++++++++++++++++++++++
> gcc/tree-parloops.c | 4 ++--
> 2 files changed, 31 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/gimple-iterator.h b/gcc/gimple-iterator.h
> index 87e943a..76fa456 100644
> --- a/gcc/gimple-iterator.h
> +++ b/gcc/gimple-iterator.h
> @@ -345,4 +345,33 @@ gsi_seq (gimple_stmt_iterator i)
> return *i.seq;
> }
>
> +/* Determine whether SEQ is a nondebug singleton. */
> +
> +static inline bool
> +gimple_seq_nondebug_singleton_p (gimple_seq seq)
> +{
> + gimple_stmt_iterator gsi;
> +
> + /* Find a nondebug gimple. */
> + gsi.ptr = gimple_seq_first (seq);
> + gsi.seq = &seq;
> + gsi.bb = NULL;
> + while (!gsi_end_p (gsi)
> + && is_gimple_debug (gsi_stmt (gsi)))
> + gsi_next (&gsi);
> +
> + /* No nondebug gimple found, not a singleton. */
> + if (gsi_end_p (gsi))
> + return false;
> +
> + /* Find a next nondebug gimple. */
> + gsi_next (&gsi);
> + while (!gsi_end_p (gsi)
> + && is_gimple_debug (gsi_stmt (gsi)))
> + gsi_next (&gsi);
> +
> + /* Only a singleton if there's no next nondebug gimple. */
> + return gsi_end_p (gsi);
> +}
> +
> #endif /* GCC_GIMPLE_ITERATOR_H */
> diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
> index 02f44eb..c4b83fe 100644
> --- a/gcc/tree-parloops.c
> +++ b/gcc/tree-parloops.c
> @@ -1769,8 +1769,8 @@ try_transform_to_exit_first_loop_alt (struct loop *loop,
> tree nit)
> {
> /* Check whether the latch contains a single statement. */
> - if (!gimple_seq_singleton_p (bb_seq (loop->latch)))
> - return true;
> + if (!gimple_seq_nondebug_singleton_p (bb_seq (loop->latch)))
> + return false;
>
> /* Check whether the latch contains the loop iv increment. */
> edge back = single_succ_edge (loop->latch);
> --
> 1.9.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150608/70484d28/attachment.sig>
More information about the Gcc-patches
mailing list