From d0186307062d00b77b83f0fb907604943f3493cc Mon Sep 17 00:00:00 2001 From: dberlin Date: Thu, 22 Sep 2005 00:42:28 +0000 Subject: [PATCH] 2005-09-20 Daniel Berlin * 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 | 11 +++++++++++ gcc/tree-data-ref.c | 3 ++- gcc/tree-flow-inline.h | 15 +++++++++++++++ gcc/tree-flow.h | 1 + gcc/tree-ssa-structalias.c | 29 ++++++----------------------- 5 files changed, 35 insertions(+), 24 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5b1dccf..471414d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2005-09-21 Daniel Berlin + + * 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 * config/mn10300/mn10300.c (TARGET_DEFAULT_TARGET_FLAGS): Add diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index e87d664..cb3a0ea 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -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) diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h index b0f5e88..b317c8c 100644 --- a/gcc/tree-flow-inline.h +++ b/gcc/tree-flow-inline.h @@ -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 diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 40a9b54..ac34f66 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -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); diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index a1c0f05..c41519c 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -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 -- 2.7.4