* 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
+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
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)
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
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);
/* 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;
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)
{
result.offset = bitpos;
}
- else if (needs_anyoffset)
+ else if (need_anyoffset)
{
result.offset = 0;
- *needs_anyoffset = true;
+ *need_anyoffset = true;
}
else
{
}
}
-
-/* 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