]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix chrec_contains_symbols_defined_in_loop.
authorSebastian Pop <sebastian.pop@amd.com>
Thu, 30 Sep 2010 21:18:38 +0000 (21:18 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Thu, 30 Sep 2010 21:18:38 +0000 (21:18 +0000)
2010-08-20  Sebastian Pop  <sebastian.pop@amd.com>

* tree-scalar-evolution.c (chrec_contains_symbols_defined_in_loop):
Do not check for VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
RESULT_DECL, and FIELD_DECL.  Return false for an
SSA_NAME_IS_DEFAULT_DEF.
(compute_scalar_evolution_in_loop): Do not further analyze the
scalar evolution when no_evolution_in_loop_p returns true.

From-SVN: r164789

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

index fa87e2746e1796eba3f099eb074bd02947ac2ca6..bd84f6691658581eedf26da688635456a0ede0f3 100644 (file)
@@ -1,3 +1,12 @@
+2010-09-30  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * tree-scalar-evolution.c (chrec_contains_symbols_defined_in_loop):
+       Do not check for VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
+       RESULT_DECL, and FIELD_DECL.  Return false for an
+       SSA_NAME_IS_DEFAULT_DEF.
+       (compute_scalar_evolution_in_loop): Do not further analyze the
+       scalar evolution when no_evolution_in_loop_p returns true.
+
 2010-09-30  Sebastian Pop  <sebastian.pop@amd.com>
 
        * tree-chrec.h (evolution_function_is_affine_p): Do not check
index 93b999d308a1ef595e20bb7a21069f5b3c723ed3..ea6bb12e4c70ae7cf697bfeb6026c2b1836ae7d4 100644 (file)
@@ -1,3 +1,12 @@
+2010-08-20  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * tree-scalar-evolution.c (chrec_contains_symbols_defined_in_loop):
+       Do not check for VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
+       RESULT_DECL, and FIELD_DECL.  Return false for an
+       SSA_NAME_IS_DEFAULT_DEF.
+       (compute_scalar_evolution_in_loop): Do not further analyze the
+       scalar evolution when no_evolution_in_loop_p returns true.
+
 2010-08-20  Sebastian Pop  <sebastian.pop@amd.com>
 
        * tree-chrec.h (evolution_function_is_affine_p): Do not check
index c7f45f229d13307d11e5f5dfacae812f833bed0e..a7e165aed3f118be26facf3c62bc33ac83796fab 100644 (file)
@@ -385,19 +385,17 @@ chrec_contains_symbols_defined_in_loop (const_tree chrec, unsigned loop_nb)
   if (is_gimple_min_invariant (chrec))
     return false;
 
-  if (TREE_CODE (chrec) == VAR_DECL
-      || TREE_CODE (chrec) == PARM_DECL
-      || TREE_CODE (chrec) == FUNCTION_DECL
-      || TREE_CODE (chrec) == LABEL_DECL
-      || TREE_CODE (chrec) == RESULT_DECL
-      || TREE_CODE (chrec) == FIELD_DECL)
-    return true;
-
   if (TREE_CODE (chrec) == SSA_NAME)
     {
-      gimple def = SSA_NAME_DEF_STMT (chrec);
-      struct loop *def_loop = loop_containing_stmt (def);
-      struct loop *loop = get_loop (loop_nb);
+      gimple def;
+      loop_p def_loop, loop;
+
+      if (SSA_NAME_IS_DEFAULT_DEF (chrec))
+       return false;
+
+      def = SSA_NAME_DEF_STMT (chrec);
+      def_loop = loop_containing_stmt (def);
+      loop = get_loop (loop_nb);
 
       if (def_loop == NULL)
        return false;
@@ -1834,13 +1832,18 @@ compute_scalar_evolution_in_loop (struct loop *wrto_loop,
                                  struct loop *def_loop,
                                  tree ev)
 {
+  bool val;
   tree res;
+
   if (def_loop == wrto_loop)
     return ev;
 
   def_loop = superloop_at_depth (def_loop, loop_depth (wrto_loop) + 1);
   res = compute_overall_effect_of_inner_loop (def_loop, ev);
 
+  if (no_evolution_in_loop_p (res, wrto_loop->num, &val) && val)
+    return res;
+
   return analyze_scalar_evolution_1 (wrto_loop, res, chrec_not_analyzed_yet);
 }