This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Do not allow irreducible loops/regions in a scop


On Thu, Nov 5, 2015 at 10:12 PM, Aditya Kumar <aditya.k7@samsung.com> wrote:
> Irreducible regions are not going to be optimized by ISL
> so discard them early.
>
> gcc/ChangeLog:
>
> 2015-11-06  Aditya Kumar  <aditya.k7@samsung.com>
>
>         * graphite-scop-detection.c (scop_detection::merge_sese):
>         (scop_detection::can_represent_loop_1):
>         (scop_detection::harmful_stmt_in_region):

Ok.
I will add "Check flag *_IRREDUCIBLE_LOOP." to the changelog before committing.
Thanks for taking care of this.

Sebastian
>
>
> ---
>  gcc/graphite-scop-detection.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
> index 8d67883..4e19b63 100644
> --- a/gcc/graphite-scop-detection.c
> +++ b/gcc/graphite-scop-detection.c
> @@ -605,7 +605,8 @@ scop_detection::merge_sese (sese_l first, sese_l second) const
>                                               get_entry_bb (second));
>
>    edge entry = get_nearest_dom_with_single_entry (dom);
> -  if (!entry)
> +
> +  if (!entry || (entry->flags & EDGE_IRREDUCIBLE_LOOP))
>      return invalid_sese;
>
>    basic_block pdom = nearest_common_dominator (CDI_POST_DOMINATORS,
> @@ -614,7 +615,8 @@ scop_detection::merge_sese (sese_l first, sese_l second) const
>    pdom = nearest_common_dominator (CDI_POST_DOMINATORS, dom, pdom);
>
>    edge exit = get_nearest_pdom_with_single_exit (pdom);
> -  if (!exit)
> +
> +  if (!exit || (exit->flags & EDGE_IRREDUCIBLE_LOOP))
>      return invalid_sese;
>
>    sese_l combined (entry, exit);
> @@ -734,6 +736,7 @@ scop_detection::can_represent_loop_1 (loop_p loop, sese_l scop)
>    struct tree_niter_desc niter_desc;
>
>    return single_exit (loop)
> +    && (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP)
>      && number_of_iterations_exit (loop, single_exit (loop), &niter_desc, false)
>      && niter_desc.control.no_overflow
>      && (niter = number_of_latch_executions (loop))
> @@ -864,6 +867,10 @@ scop_detection::harmful_stmt_in_region (sese_l scop) const
>        if (!dominated_by_p (CDI_POST_DOMINATORS, bb, exit_bb))
>         continue;
>
> +      /* The basic block should not be part of an irreducible loop.  */
> +      if (bb->flags & BB_IRREDUCIBLE_LOOP)
> +        return true;
> +
>        if (harmful_stmt_in_bb (scop, bb))
>         return true;
>      }
> --
> 2.1.0.243.g30d45f7
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]