OSDN Git Service

2005-09-20 Daniel Berlin <dberlin@dberlin.org>
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Sep 2005 00:42:28 +0000 (00:42 +0000)
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Sep 2005 00:42:28 +0000 (00:42 +0000)
* tree-data-ref.c (analyze_array_indexes): Only estimate when
estimate_only  is true.
* tree-flow.h (ref_contains_indirect_ref): New prototype.
* tree-flow-inline.h (ref_contains_indirect_ref): Moved from
tree-ssa-structalias.c
* tree-ssa-loop-niter.c (infer_loop_bounds_from_undefined): Use
ref_contains_indirect_ref.
* tree-ssa-structalias.c (ref_contains_indirect_ref): Moved.

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

gcc/ChangeLog
gcc/tree-data-ref.c
gcc/tree-flow-inline.h
gcc/tree-flow.h
gcc/tree-ssa-structalias.c

index 5b1dccf..471414d 100644 (file)
@@ -1,3 +1,14 @@
+2005-09-21  Daniel Berlin  <dberlin@dberlin.org>
+
+       * tree-data-ref.c (analyze_array_indexes): Only estimate when
+       estimate_only  is true.
+       * tree-flow.h (ref_contains_indirect_ref): New prototype.
+       * tree-flow-inline.h (ref_contains_indirect_ref): Moved from
+       tree-ssa-structalias.c 
+       * tree-ssa-loop-niter.c (infer_loop_bounds_from_undefined): Use
+       ref_contains_indirect_ref.
+       * tree-ssa-structalias.c (ref_contains_indirect_ref): Moved.
+
 2005-09-21  DJ Delorie  <dj@redhat.com>
 
        * config/mn10300/mn10300.c (TARGET_DEFAULT_TARGET_FLAGS): Add
index e87d664..cb3a0ea 100644 (file)
@@ -823,7 +823,8 @@ analyze_array_indexes (struct loop *loop,
   access_fn = instantiate_parameters 
     (loop, analyze_scalar_evolution (loop, opnd1));
 
-  if (chrec_contains_undetermined (loop->estimated_nb_iterations))
+  if (estimate_only 
+      && chrec_contains_undetermined (loop->estimated_nb_iterations))
     estimate_niter_from_size_of_data (loop, opnd0, access_fn, stmt);
 
   if (!estimate_only)
index b0f5e88..b317c8c 100644 (file)
@@ -1414,6 +1414,21 @@ unmodifiable_var_p (tree var)
   return TREE_READONLY (var) && (TREE_STATIC (var) || DECL_EXTERNAL (var));
 }
 
+/* Return true if REF, an ARRAY_REF, has an INDIRECT_REF somewhere in
+   it.  */
+
+static inline bool
+ref_contains_indirect_ref (tree ref)
+{
+  while (handled_component_p (ref))
+    {
+      if (TREE_CODE (ref) == INDIRECT_REF)
+       return true;
+      ref = TREE_OPERAND (ref, 0);
+    }
+  return false;
+}
+
 /* Return true if REF, a COMPONENT_REF, has an ARRAY_REF somewhere in it.  */
 
 static inline bool
index 40a9b54..ac34f66 100644 (file)
@@ -614,6 +614,7 @@ extern void count_uses_and_derefs (tree, tree, unsigned *, unsigned *, bool *);
 static inline subvar_t get_subvars_for_var (tree);
 static inline tree get_subvar_at (tree, unsigned HOST_WIDE_INT);
 static inline bool ref_contains_array_ref (tree);
+static inline bool ref_contains_indirect_ref (tree);
 extern tree okay_component_ref_for_subvars (tree, unsigned HOST_WIDE_INT *,
                                            unsigned HOST_WIDE_INT *);
 static inline bool var_can_have_subvars (tree);
index a1c0f05..c41519c 100644 (file)
@@ -2008,12 +2008,12 @@ offset_overlaps_with_access (const unsigned HOST_WIDE_INT fieldpos,
 /* Given a COMPONENT_REF T, return the constraint_expr for it.  */
 
 static struct constraint_expr
-get_constraint_for_component_ref (tree t, bool *needs_anyoffset)
+get_constraint_for_component_ref (tree t, bool *need_anyoffset)
 {
   struct constraint_expr result;
-  HOST_WIDE_INT bitsize;
+  HOST_WIDE_INT bitsize = -1;
   HOST_WIDE_INT bitpos;
-  tree offset;
+  tree offset = NULL_TREE;
   enum machine_mode mode;
   int unsignedp;
   int volatilep;
@@ -2039,7 +2039,7 @@ get_constraint_for_component_ref (tree t, bool *needs_anyoffset)
  
   t = get_inner_reference (t, &bitsize, &bitpos, &offset, &mode,
                           &unsignedp, &volatilep, false);
-  result = get_constraint_for (t, needs_anyoffset);
+  result = get_constraint_for (t, need_anyoffset);
 
   /* This can also happen due to weird offsetof type macros.  */
   if (TREE_CODE (t) != ADDR_EXPR && result.type == ADDRESSOF)
@@ -2051,10 +2051,10 @@ get_constraint_for_component_ref (tree t, bool *needs_anyoffset)
     {
       result.offset = bitpos;
     }  
-  else if (needs_anyoffset)
+  else if (need_anyoffset)
     {
       result.offset = 0;
-      *needs_anyoffset = true; 
+      *need_anyoffset = true; 
     }
   else
     {
@@ -2510,23 +2510,6 @@ do_structure_copy (tree lhsop, tree rhsop)
     }
 }
 
-
-/* Return true if REF, a COMPONENT_REF, has an INDIRECT_REF somewhere
-   in it.  */
-
-static inline bool
-ref_contains_indirect_ref (tree ref)
-{
-  while (handled_component_p (ref))
-    {
-      if (TREE_CODE (ref) == INDIRECT_REF)
-       return true;
-      ref = TREE_OPERAND (ref, 0);
-    }
-  return false;
-}
-
-
 /* Update related alias information kept in AI.  This is used when
    building name tags, alias sets and deciding grouping heuristics.
    STMT is the statement to process.  This function also updates