diff options
author | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-07 19:51:25 +0000 |
---|---|---|
committer | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-07 19:51:25 +0000 |
commit | b3786ab323f4845c9721759e9e0442bfa68eafe4 (patch) | |
tree | 4aae0809ad1fc08b9c4dad889abab72475236b7f /gcc/tree-chrec.h | |
parent | e8473153f8d7b879a3faaa173e192a0d5ba78250 (diff) | |
download | gcc-b3786ab323f4845c9721759e9e0442bfa68eafe4.tar.gz |
Fixes PR 18403 and meta PR 21861.
* Makefile.in (tree-chrec.o): Depend on CFGLOOP_H and TREE_FLOW_H.
* tree-chrec.c: Include cfgloop.h and tree-flow.h.
(evolution_function_is_invariant_rec_p,
evolution_function_is_invariant_p): New.
(chrec_convert): Use an extra parameter AT_STMT for refining the
information that is passed down to convert_step. Integrate the
code that was in count_ev_in_wider_type.
* tree-chrec.h (count_ev_in_wider_type): Removed.
(chrec_convert): Modify its declaration.
(evolution_function_is_invariant_p): Declared.
(evolution_function_is_affine_p): Use evolution_function_is_invariant_p.
* tree-flow.h (can_count_iv_in_wider_type): Renamed convert_step.
(scev_probably_wraps_p): Declared.
* tree-scalar-evolution.c (count_ev_in_wider_type): Removed.
(follow_ssa_edge_in_rhs, interpret_rhs_modify_expr):
Use an extra parameter AT_STMT for refining the information that is
passed down to convert_step.
(follow_ssa_edge_inner_loop_phi, follow_ssa_edge,
analyze_scalar_evolution_1): Initialize AT_STMT with the current
analyzed statement.
(instantiate_parameters_1): Don't know yet how to initialize AT_STMT.
* tree-ssa-loop-ivopts.c (idx_find_step): Update the use of
can_count_iv_in_wider_type to use convert_step.
* tree-ssa-loop-niter.c (can_count_iv_in_wider_type_bound): Move
code that is independent of the loop over the known iteration
bounds to convert_step_widening, the rest is moved to
proved_non_wrapping_p.
(scev_probably_wraps_p): New.
(can_count_iv_in_wider_type): Renamed convert_step.
* tree-vrp.c (adjust_range_with_scev): Take an extra AT_STMT parameter.
Use scev_probably_wraps_p for computing init_is_max.
(vrp_visit_assignment): Pass the current analyzed statement to
adjust_range_with_scev.
(execute_vrp): Call estimate_numbers_of_iterations for refining the
information provided by scev analyzer.
testsuite:
* testsuite/gcc.dg/vect/vect-77.c: Remove xfail from lp64.
* testsuite/gcc.dg/vect/vect-78.c: Same.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100718 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-chrec.h')
-rw-r--r-- | gcc/tree-chrec.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index d101c9b14c7..723c8918e28 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -67,8 +67,7 @@ tree_is_chrec (tree expr) extern tree chrec_fold_plus (tree, tree, tree); extern tree chrec_fold_minus (tree, tree, tree); extern tree chrec_fold_multiply (tree, tree, tree); -extern tree chrec_convert (tree, tree); -extern tree count_ev_in_wider_type (tree, tree); +extern tree chrec_convert (tree, tree, tree); extern tree chrec_type (tree); /* Operations. */ @@ -146,6 +145,7 @@ evolution_function_is_constant_p (tree chrec) } } +extern bool evolution_function_is_invariant_p (tree, int); /* Determine whether the given tree is an affine evolution function or not. */ static inline bool @@ -157,8 +157,10 @@ evolution_function_is_affine_p (tree chrec) switch (TREE_CODE (chrec)) { case POLYNOMIAL_CHREC: - if (evolution_function_is_constant_p (CHREC_LEFT (chrec)) - && evolution_function_is_constant_p (CHREC_RIGHT (chrec))) + if (evolution_function_is_invariant_p (CHREC_LEFT (chrec), + CHREC_VARIABLE (chrec)) + && evolution_function_is_invariant_p (CHREC_RIGHT (chrec), + CHREC_VARIABLE (chrec))) return true; else return false; |