summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/tree-data-ref.c3
-rw-r--r--gcc/tree-flow-inline.h15
-rw-r--r--gcc/tree-flow.h1
-rw-r--r--gcc/tree-ssa-structalias.c29
5 files changed, 35 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5b1dccfab26..471414d45c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index e87d66458de..cb3a0ea0681 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 b0f5e888551..b317c8ccc9a 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 40a9b540c4e..ac34f66c55d 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 a1c0f05b0b1..c41519ca846 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
OpenPOWER on IntegriCloud