2017-10-17 Richard Biener <rguenther@suse.de>
authorRichard Biener <rguenther@suse.de>
Tue, 17 Oct 2017 13:19:51 +0000 (13:19 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 17 Oct 2017 13:19:51 +0000 (13:19 +0000)
* graphite-scop-detection.c
(scop_detection::stmt_has_simple_data_refs_p): Always use
the full nest as region.
(try_generate_gimple_bb): Likewise.
* sese.c (scalar_evolution_in_region): Simplify now that
SCEV can handle instantiation in regions.
* tree-scalar-evolution.c (instantiate_scev_name): Also instantiate
in the non-loop part of a function if requested.

From-SVN: r253811

gcc/ChangeLog
gcc/graphite-scop-detection.c
gcc/sese.c
gcc/tree-scalar-evolution.c

index 4107557527283ced69e67df3d4181ef749992865..52ffae41945a481546fd0ae22acdbea1cda8b183 100644 (file)
@@ -1,3 +1,14 @@
+2017-10-17  Richard Biener  <rguenther@suse.de>
+
+       * graphite-scop-detection.c
+       (scop_detection::stmt_has_simple_data_refs_p): Always use
+       the full nest as region.
+       (try_generate_gimple_bb): Likewise.
+       * sese.c (scalar_evolution_in_region): Simplify now that
+       SCEV can handle instantiation in regions.
+       * tree-scalar-evolution.c (instantiate_scev_name): Also instantiate
+       in the non-loop part of a function if requested.
+
 2017-10-17  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/82563
index ce6ab9545275061afffaa78938328855dc532aae..a8963e1dd81706ba15adb40cce001e8a7468b960 100644 (file)
@@ -1005,15 +1005,10 @@ scop_detection::graphite_can_represent_expr (sese_l scop, loop_p loop,
 bool
 scop_detection::stmt_has_simple_data_refs_p (sese_l scop, gimple *stmt)
 {
-  edge nest;
+  edge nest = scop.entry;;
   loop_p loop = loop_containing_stmt (stmt);
   if (!loop_in_sese_p (loop, scop))
-    {
-      nest = scop.entry;
-      loop = NULL;
-    }
-  else
-    nest = loop_preheader_edge (outermost_loop_in_sese (scop, gimple_bb (stmt)));
+    loop = NULL;
 
   auto_vec<data_reference_p> drs;
   if (! graphite_find_data_references_in_stmt (nest, loop, stmt, &drs))
@@ -1381,15 +1376,10 @@ try_generate_gimple_bb (scop_p scop, basic_block bb)
   vec<scalar_use> reads = vNULL;
 
   sese_l region = scop->scop_info->region;
-  edge nest;
+  edge nest = region.entry;
   loop_p loop = bb->loop_father;
   if (!loop_in_sese_p (loop, region))
-    {
-      nest = region.entry;
-      loop = NULL;
-    }
-  else
-    nest = loop_preheader_edge (outermost_loop_in_sese (region, bb));
+    loop = NULL;
 
   for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi);
        gsi_next (&gsi))
index 8aa8015290ddacd6c8c3bda425fc9f669b824e3d..7fcda75a028c35d0c33dd5d1b7bebaf21b921f91 100644 (file)
@@ -459,41 +459,16 @@ scev_analyzable_p (tree def, sese_l &region)
 tree
 scalar_evolution_in_region (const sese_l &region, loop_p loop, tree t)
 {
-  gimple *def;
-  struct loop *def_loop;
-
   /* SCOP parameters.  */
   if (TREE_CODE (t) == SSA_NAME
       && !defined_in_sese_p (t, region))
     return t;
 
-  if (TREE_CODE (t) != SSA_NAME
-      || loop_in_sese_p (loop, region))
-    /* FIXME: we would need instantiate SCEV to work on a region, and be more
-       flexible wrt. memory loads that may be invariant in the region.  */
-    return instantiate_scev (region.entry, loop,
-                            analyze_scalar_evolution (loop, t));
-
-  def = SSA_NAME_DEF_STMT (t);
-  def_loop = loop_containing_stmt (def);
-
-  if (loop_in_sese_p (def_loop, region))
-    {
-      t = analyze_scalar_evolution (def_loop, t);
-      def_loop = superloop_at_depth (def_loop, loop_depth (loop) + 1);
-      t = compute_overall_effect_of_inner_loop (def_loop, t);
-      return t;
-    }
-
-  bool has_vdefs = false;
-  if (invariant_in_sese_p_rec (t, region, &has_vdefs))
-    return t;
-
-  /* T variates in REGION.  */
-  if (has_vdefs)
-    return chrec_dont_know;
+  if (!loop_in_sese_p (loop, region))
+    loop = NULL;
 
-  return instantiate_scev (region.entry, loop, t);
+  return instantiate_scev (region.entry, loop,
+                          analyze_scalar_evolution (loop, t));
 }
 
 /* Return true if BB is empty, contains only DEBUG_INSNs.  */
index b6c1fcef6a18790bca35b38e8a135b445770c7c4..b47b4ed77209ee76a7108aef8c17a873d02f522a 100644 (file)
@@ -2358,11 +2358,9 @@ instantiate_scev_name (edge instantiate_below,
   struct loop *def_loop;
   basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (chrec));
 
-  /* A parameter (or loop invariant and we do not want to include
-     evolutions in outer loops), nothing to do.  */
+  /* A parameter, nothing to do.  */
   if (!def_bb
-      || loop_depth (def_bb->loop_father) == 0
-      || ! dominated_by_p (CDI_DOMINATORS, def_bb, instantiate_below->dest))
+      || !dominated_by_p (CDI_DOMINATORS, def_bb, instantiate_below->dest))
     return chrec;
 
   /* We cache the value of instantiated variable to avoid exponential