public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-11] graphite: Adjust scop loop-nest choice
@ 2021-11-17  8:18 Frederik Harwath
  0 siblings, 0 replies; only message in thread
From: Frederik Harwath @ 2021-11-17  8:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:cf481a504f4628d9cd496925a2ef4a1284ae64d5

commit cf481a504f4628d9cd496925a2ef4a1284ae64d5
Author: Frederik Harwath <frederik@codesourcery.com>
Date:   Tue Nov 16 16:21:57 2021 +0100

    graphite: Adjust scop loop-nest choice
    
    The find_common_loop function is used in Graphite to obtain a common
    super-loop of all loops inside a SCoP.  The function is applied to the
    loop of the destination block of the edge that leads into the SESE
    region and the loop of the source block of the edge that exits the
    region.  The exit block is usually introduced by the canonicalization
    of the loop structure that Graphite does to support its code
    generation. If it is empty, it may happen that it belongs to the outer
    fake loop.  This way, build_alias_set may end up analysing
    data-references with respect to this loop although there may exist a
    proper super-loop of the SCoP loops.  This does not seem to be correct
    in general and it leads to problems with runtime alias check creation
    which fails if executed on a loop without niter information.
    
    gcc/ChangeLog:
    
            * graphite-scop-detection.c (scop_context_loop): New function.
            (build_alias_set): Use scop_context_loop instead of find_common_loop.
            * graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Likewise.
            * graphite.h (scop_context_loop): New declaration.

Diff:
---
 gcc/graphite-isl-ast-to-gimple.c |  4 +---
 gcc/graphite-scop-detection.c    | 21 ++++++++++++++++++---
 gcc/graphite.h                   |  1 +
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index bdabe588c3d..ec055a358f3 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -1543,9 +1543,7 @@ graphite_regenerate_ast_isl (scop_p scop)
 	 conditional if aliasing can be ruled out at runtime and the original
 	 version of the SCoP, otherwise. */
 
-      loop_p loop
-          = find_common_loop (scop->scop_info->region.entry->dest->loop_father,
-                              scop->scop_info->region.exit->src->loop_father);
+      loop_p loop = scop_context_loop (scop);
       tree cond = generate_alias_cond (scop->unhandled_alias_ddrs, loop);
       tree non_alias_cond = build1 (TRUTH_NOT_EXPR, boolean_type_node, cond);
       set_ifsese_condition (region->if_region, non_alias_cond);
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index afc955cc97e..99e906a5d12 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -297,6 +297,23 @@ single_pred_cond_non_loop_exit (basic_block bb)
   return NULL;
 }
 
+
+/* Return the innermost loop that encloses all loops in SCOP. */
+
+loop_p
+scop_context_loop (scop_p scop)
+{
+  edge scop_entry = scop->scop_info->region.entry;
+  edge scop_exit = scop->scop_info->region.exit;
+  basic_block exit_bb = scop_exit->src;
+
+  while (sese_trivially_empty_bb_p (exit_bb) && single_pred_p (exit_bb))
+    exit_bb = single_pred (exit_bb);
+
+  loop_p entry_loop = scop_entry->dest->loop_father;
+  return find_common_loop (entry_loop, exit_bb->loop_father);
+}
+
 namespace
 {
 
@@ -1776,9 +1793,7 @@ build_alias_set (scop_p scop)
   int i, j;
   int *all_vertices;
 
-  struct loop *nest
-    = find_common_loop (scop->scop_info->region.entry->dest->loop_father,
-			scop->scop_info->region.exit->src->loop_father);
+  struct loop *nest = scop_context_loop (scop);
 
   gcc_checking_assert (nest);
 
diff --git a/gcc/graphite.h b/gcc/graphite.h
index 9c508f31109..dacb27a9073 100644
--- a/gcc/graphite.h
+++ b/gcc/graphite.h
@@ -480,4 +480,5 @@ extern tree cached_scalar_evolution_in_region (const sese_l &, loop_p, tree);
 extern void dot_all_sese (FILE *, vec<sese_l> &);
 extern void dot_sese (sese_l &);
 extern void dot_cfg ();
+extern loop_p scop_context_loop (scop_p);
 #endif


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-17  8:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-17  8:18 [gcc/devel/omp/gcc-11] graphite: Adjust scop loop-nest choice Frederik Harwath

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).