diff options
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); |
