diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2006-02-14 13:22:11 +0100 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2006-02-14 12:22:11 +0000 |
commit | 1768461812d5ccaf9f4a30336e6479eb03a29246 (patch) | |
tree | b637075905e0031ec892d61490a5aafc1637566c /gcc/tree-flow.h | |
parent | 0a4288d92e5c080b448db4041091aea932b44980 (diff) | |
download | gcc-1768461812d5ccaf9f4a30336e6479eb03a29246.zip gcc-1768461812d5ccaf9f4a30336e6479eb03a29246.tar.gz gcc-1768461812d5ccaf9f4a30336e6479eb03a29246.tar.bz2 |
invoke.texi (-fprefetch-loop-arrays, [...]): Document.
* doc/invoke.texi (-fprefetch-loop-arrays, -fprefetch-loop-arrays-rtl):
Document.
* tree-ssa-loop-niter.c (number_of_iterations_ne,
number_of_iterations_lt, number_of_iterations_cond): Remember the shape
of the ending condition.
* tree-ssa-loop-manip.c: Include params.h.
(build_if_stmt, can_unroll_loop_p, determine_exit_conditions,
tree_unroll_loop): New functions.
* tree-pass.h (pass_loop_prefetch): Declare.
* loop.c (rest_of_handle_loop_optimize): Test for
-fprefetch-loop-arrays-rtl.
* tree-scalar-evolution.h (affine_iv): Moved to tree-flow.h.
* timevar.def (TV_TREE_PREFETCH): New timevar.
* tree-ssa-loop.c (tree_ssa_loop_prefetch, gate_tree_ssa_loop_prefetch,
pass_loop_prefetch): New.
* tree-cfgcleanup.c: Include tree-scalar-evolution.h.
(cleanup_tree_cfg_loop): Call scev_reset.
* common.opt (fprefetch-loop-arrays-rtl): Add.
* tree-ssa-loop-prefetch.c: New file.
* tree-outof-ssa.c (struct value_expr_d): Add expr_vars field.
(new_temp_expr_table): Initialize expr_vars.
(free_temp_expr_table): Cleanup expr_vars.
(check_replaceable, find_replaceable_in_bb): Prevent accumulating
expressions from being merged into one.
* tree-flow.h (affine_iv): Moved from tree-scalar-evolution.h.
(struct tree_niter_desc): Add control, bound and cmp fields.
(tree_ssa_prefetch_arrays, can_unroll_loop_p, tree_unroll_loop):
Declare.
* Makefile.in (tree-ssa-loop-prefetch.o): Add.
(tree-cfgcleanup.o): Add SCEV_H dependency.
(tree-ssa-loop-manip.o): Add PARAMS_H dependency.
* passes.c (init_optimization_passes): Add pass_loop_prefetch.
From-SVN: r110964
Diffstat (limited to 'gcc/tree-flow.h')
-rw-r--r-- | gcc/tree-flow.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 0e4824e..7774c3b 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -667,6 +667,17 @@ extern void replace_exp (use_operand_p, tree); extern bool may_propagate_copy (tree, tree); extern bool may_propagate_copy_into_asm (tree); +/* Affine iv. */ + +typedef struct +{ + /* Iv = BASE + STEP * i. */ + tree base, step; + + /* True if this iv does not overflow. */ + bool no_overflow; +} affine_iv; + /* Description of number of iterations of a loop. All the expressions inside the structure can be evaluated at the end of the loop's preheader (and due to ssa form, also anywhere inside the body of the loop). */ @@ -697,6 +708,15 @@ struct tree_niter_desc MAX_SIGNED_INT. However if the (n <= 0) assumption is eliminated (by looking at the guard on entry of the loop), then the information would be lost. */ + + /* The simplified shape of the exit condition. The loop exits if + CONTROL CMP BOUND is false, where CMP is one of NE_EXPR, + LT_EXPR, or GT_EXPR, and step of CONTROL is positive if CMP is + LE_EXPR and negative if CMP is GE_EXPR. This information is used + by loop unrolling. */ + affine_iv control; + tree bound; + enum tree_code cmp; }; /* In tree-vectorizer.c */ @@ -711,6 +731,7 @@ void tree_ssa_lim (struct loops *); void tree_ssa_unswitch_loops (struct loops *); void canonicalize_induction_variables (struct loops *); void tree_unroll_loops_completely (struct loops *, bool); +void tree_ssa_prefetch_arrays (struct loops *); void remove_empty_loops (struct loops *); void tree_ssa_iv_optimize (struct loops *); @@ -748,6 +769,10 @@ struct loop *tree_ssa_loop_version (struct loops *, struct loop *, tree, tree expand_simple_operations (tree); void substitute_in_loop_info (struct loop *, tree, tree); edge single_dom_exit (struct loop *); +bool can_unroll_loop_p (struct loop *loop, unsigned factor, + struct tree_niter_desc *niter); +void tree_unroll_loop (struct loops *, struct loop *, unsigned, + edge, struct tree_niter_desc *); /* In tree-ssa-threadedge.c */ extern bool potentially_threadable_block (basic_block); |