Call compute_overall_effect_of_inner_loop from instantiate_scev_name.
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jun 2010 22:09:41 +0000 (22:09 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jun 2010 22:09:41 +0000 (22:09 +0000)
2010-06-09  Sebastian Pop  <sebastian.pop@amd.com>

* tree-scalar-evolution.c (instantiate_scev_name): Do not fail
the scev analysis when the variable is not used outside the loop
in a close phi node: call compute_overall_effect_of_inner_loop.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160510 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-scalar-evolution.c

index 111d1e5..8babd20 100644 (file)
@@ -1,5 +1,11 @@
 2010-06-09  Sebastian Pop  <sebastian.pop@amd.com>
 
+       * tree-scalar-evolution.c (instantiate_scev_name): Do not fail
+       the scev analysis when the variable is not used outside the loop
+       in a close phi node: call compute_overall_effect_of_inner_loop.
+
+2010-06-09  Sebastian Pop  <sebastian.pop@amd.com>
+
        * graphite-sese-to-poly.c (single_pred_cond): Renamed
        single_pred_cond_non_loop_exit.  Return NULL for loop exit edges.
        (build_sese_conditions_before): Renamed call to single_pred_cond.
index 5eb6174..13d897f 100644 (file)
@@ -2172,9 +2172,19 @@ instantiate_scev_name (basic_block instantiate_below,
       else
        res = chrec;
 
-      if (res == NULL_TREE
-         || !dominated_by_p (CDI_DOMINATORS, instantiate_below,
-                             gimple_bb (SSA_NAME_DEF_STMT (res))))
+      /* When there is no loop_closed_phi_def, it means that the
+        variable is not used after the loop: try to still compute the
+        value of the variable when exiting the loop.  */
+      if (res == NULL_TREE)
+       {
+         loop_p loop = loop_containing_stmt (SSA_NAME_DEF_STMT (chrec));
+         res = analyze_scalar_evolution (loop, chrec);
+         res = compute_overall_effect_of_inner_loop (loop, res);
+         res = instantiate_scev_r (instantiate_below, evolution_loop, res,
+                                   fold_conversions, cache, size_expr);
+       }
+      else if (!dominated_by_p (CDI_DOMINATORS, instantiate_below,
+                               gimple_bb (SSA_NAME_DEF_STMT (res))))
        res = chrec_dont_know;
     }