1 /* Functions to determine/estimate number of iterations of a loop.
2 Copyright (C) 2004 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 GCC is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING. If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "coretypes.h"
28 #include "hard-reg-set.h"
29 #include "basic-block.h"
31 #include "diagnostic.h"
32 #include "tree-flow.h"
33 #include "tree-dump.h"
35 #include "tree-pass.h"
37 #include "tree-chrec.h"
38 #include "tree-scalar-evolution.h"
39 #include "tree-data-ref.h"
42 #include "tree-inline.h"
44 #define SWAP(X, Y) do { void *tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
46 /* Just to shorten the ugly names. */
47 #define EXEC_BINARY nondestructive_fold_binary_to_constant
48 #define EXEC_UNARY nondestructive_fold_unary_to_constant
52 Analysis of number of iterations of an affine exit test.
56 /* Returns true if ARG is either NULL_TREE or constant zero. Unlike
57 integer_zerop, it does not care about overflow flags. */
65 if (TREE_CODE (arg) != INTEGER_CST)
68 return (TREE_INT_CST_LOW (arg) == 0 && TREE_INT_CST_HIGH (arg) == 0);
71 /* Returns true if ARG a nonzero constant. Unlike integer_nonzerop, it does
72 not care about overflow flags. */
80 if (TREE_CODE (arg) != INTEGER_CST)
83 return (TREE_INT_CST_LOW (arg) != 0 || TREE_INT_CST_HIGH (arg) != 0);
86 /* Returns number of zeros at the end of binary representation of X.
88 ??? Use ffs if available? */
91 num_ending_zeros (tree x)
93 unsigned HOST_WIDE_INT fr, nfr;
95 tree type = TREE_TYPE (x);
97 if (TREE_INT_CST_LOW (x) == 0)
99 num = HOST_BITS_PER_WIDE_INT;
100 fr = TREE_INT_CST_HIGH (x);
105 fr = TREE_INT_CST_LOW (x);
108 for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
111 if (nfr << abits == fr)
118 if (num > TYPE_PRECISION (type))
119 num = TYPE_PRECISION (type);
121 return build_int_cst_type (type, num);
124 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
127 inverse (tree x, tree mask)
129 tree type = TREE_TYPE (x);
131 unsigned ctr = tree_floor_log2 (mask);
133 if (TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
135 unsigned HOST_WIDE_INT ix;
136 unsigned HOST_WIDE_INT imask;
137 unsigned HOST_WIDE_INT irslt = 1;
139 gcc_assert (cst_and_fits_in_hwi (x));
140 gcc_assert (cst_and_fits_in_hwi (mask));
142 ix = int_cst_value (x);
143 imask = int_cst_value (mask);
152 rslt = build_int_cst_type (type, irslt);
156 rslt = build_int_cst_type (type, 1);
159 rslt = EXEC_BINARY (MULT_EXPR, type, rslt, x);
160 x = EXEC_BINARY (MULT_EXPR, type, x, x);
162 rslt = EXEC_BINARY (BIT_AND_EXPR, type, rslt, mask);
168 /* Determine the number of iterations according to condition (for staying
169 inside loop) which compares two induction variables using comparison
170 operator CODE. The induction variable on left side of the comparison
171 has base BASE0 and step STEP0. the right-hand side one has base
172 BASE1 and step STEP1. Both induction variables must have type TYPE,
173 which must be an integer or pointer type. STEP0 and STEP1 must be
174 constants (or NULL_TREE, which is interpreted as constant zero).
176 The results (number of iterations and assumptions as described in
177 comments at struct tree_niter_desc in tree-flow.h) are stored to NITER.
178 In case we are unable to determine number of iterations, contents of
179 this structure is unchanged. */
182 number_of_iterations_cond (tree type, tree base0, tree step0,
183 enum tree_code code, tree base1, tree step1,
184 struct tree_niter_desc *niter)
186 tree step, delta, mmin, mmax;
187 tree may_xform, bound, s, d, tmp;
188 bool was_sharp = false;
190 tree assumptions = boolean_true_node;
191 tree noloop_assumptions = boolean_false_node;
192 tree niter_type, signed_niter_type;
195 /* The meaning of these assumptions is this:
197 then the rest of information does not have to be valid
198 if noloop_assumptions then the loop does not have to roll
199 (but it is only conservative approximation, i.e. it only says that
200 if !noloop_assumptions, then the loop does not end before the computed
201 number of iterations) */
203 /* Make < comparison from > ones. */
209 code = swap_tree_comparison (code);
212 /* We can handle the case when neither of the sides of the comparison is
213 invariant, provided that the test is NE_EXPR. This rarely occurs in
214 practice, but it is simple enough to manage. */
215 if (!zero_p (step0) && !zero_p (step1))
220 step0 = EXEC_BINARY (MINUS_EXPR, type, step0, step1);
224 /* If the result is a constant, the loop is weird. More precise handling
225 would be possible, but the situation is not common enough to waste time
227 if (zero_p (step0) && zero_p (step1))
230 /* Ignore loops of while (i-- < 10) type. */
233 if (step0 && !tree_expr_nonnegative_p (step0))
236 if (!zero_p (step1) && tree_expr_nonnegative_p (step1))
240 if (POINTER_TYPE_P (type))
242 /* We assume pointer arithmetic never overflows. */
243 mmin = mmax = NULL_TREE;
247 mmin = TYPE_MIN_VALUE (type);
248 mmax = TYPE_MAX_VALUE (type);
251 /* Some more condition normalization. We must record some assumptions
256 /* We want to take care only of <=; this is easy,
257 as in cases the overflow would make the transformation unsafe the loop
258 does not roll. Seemingly it would make more sense to want to take
259 care of <, as NE is more similar to it, but the problem is that here
260 the transformation would be more difficult due to possibly infinite
265 assumption = fold (build2 (EQ_EXPR, boolean_type_node, base0, mmax));
267 assumption = boolean_false_node;
268 if (nonzero_p (assumption))
270 base0 = fold (build2 (PLUS_EXPR, type, base0,
271 build_int_cst_type (type, 1)));
276 assumption = fold (build2 (EQ_EXPR, boolean_type_node, base1, mmin));
278 assumption = boolean_false_node;
279 if (nonzero_p (assumption))
281 base1 = fold (build2 (MINUS_EXPR, type, base1,
282 build_int_cst_type (type, 1)));
284 noloop_assumptions = assumption;
287 /* It will be useful to be able to tell the difference once more in
288 <= -> != reduction. */
292 /* Take care of trivially infinite loops. */
297 && operand_equal_p (base0, mmin, 0))
301 && operand_equal_p (base1, mmax, 0))
305 /* If we can we want to take care of NE conditions instead of size
306 comparisons, as they are much more friendly (most importantly
307 this takes care of special handling of loops with step 1). We can
308 do it if we first check that upper bound is greater or equal to
309 lower bound, their difference is constant c modulo step and that
310 there is not an overflow. */
314 step = EXEC_UNARY (NEGATE_EXPR, type, step1);
317 delta = build2 (MINUS_EXPR, type, base1, base0);
318 delta = fold (build2 (FLOOR_MOD_EXPR, type, delta, step));
319 may_xform = boolean_false_node;
321 if (TREE_CODE (delta) == INTEGER_CST)
323 tmp = EXEC_BINARY (MINUS_EXPR, type, step,
324 build_int_cst_type (type, 1));
326 && operand_equal_p (delta, tmp, 0))
328 /* A special case. We have transformed condition of type
329 for (i = 0; i < 4; i += 4)
331 for (i = 0; i <= 3; i += 4)
332 obviously if the test for overflow during that transformation
333 passed, we cannot overflow here. Most importantly any
334 loop with sharp end condition and step 1 falls into this
335 category, so handling this case specially is definitely
336 worth the troubles. */
337 may_xform = boolean_true_node;
339 else if (zero_p (step0))
342 may_xform = boolean_true_node;
345 bound = EXEC_BINARY (PLUS_EXPR, type, mmin, step);
346 bound = EXEC_BINARY (MINUS_EXPR, type, bound, delta);
347 may_xform = fold (build2 (LE_EXPR, boolean_type_node,
354 may_xform = boolean_true_node;
357 bound = EXEC_BINARY (MINUS_EXPR, type, mmax, step);
358 bound = EXEC_BINARY (PLUS_EXPR, type, bound, delta);
359 may_xform = fold (build2 (LE_EXPR, boolean_type_node,
365 if (!zero_p (may_xform))
367 /* We perform the transformation always provided that it is not
368 completely senseless. This is OK, as we would need this assumption
369 to determine the number of iterations anyway. */
370 if (!nonzero_p (may_xform))
371 assumptions = may_xform;
375 base0 = build2 (PLUS_EXPR, type, base0, delta);
376 base0 = fold (build2 (MINUS_EXPR, type, base0, step));
380 base1 = build2 (MINUS_EXPR, type, base1, delta);
381 base1 = fold (build2 (PLUS_EXPR, type, base1, step));
384 assumption = fold (build2 (GT_EXPR, boolean_type_node, base0, base1));
385 noloop_assumptions = fold (build2 (TRUTH_OR_EXPR, boolean_type_node,
386 noloop_assumptions, assumption));
391 /* Count the number of iterations. */
392 niter_type = unsigned_type_for (type);
393 signed_niter_type = signed_type_for (type);
397 /* Everything we do here is just arithmetics modulo size of mode. This
398 makes us able to do more involved computations of number of iterations
399 than in other cases. First transform the condition into shape
400 s * i <> c, with s positive. */
401 base1 = fold (build2 (MINUS_EXPR, type, base1, base0));
404 step0 = EXEC_UNARY (NEGATE_EXPR, type, step1);
406 if (!tree_expr_nonnegative_p (fold_convert (signed_niter_type, step0)))
408 step0 = EXEC_UNARY (NEGATE_EXPR, type, step0);
409 base1 = fold (build1 (NEGATE_EXPR, type, base1));
412 base1 = fold_convert (niter_type, base1);
413 step0 = fold_convert (niter_type, step0);
415 /* Let nsd (step, size of mode) = d. If d does not divide c, the loop
416 is infinite. Otherwise, the number of iterations is
417 (inverse(s/d) * (c/d)) mod (size of mode/d). */
418 bits = num_ending_zeros (step0);
419 d = EXEC_BINARY (LSHIFT_EXPR, niter_type,
420 build_int_cst_type (niter_type, 1), bits);
421 s = EXEC_BINARY (RSHIFT_EXPR, niter_type, step0, bits);
422 bound = EXEC_BINARY (RSHIFT_EXPR, niter_type,
423 build_int_cst (niter_type, -1),
426 assumption = fold (build2 (FLOOR_MOD_EXPR, niter_type, base1, d));
427 assumption = fold (build2 (EQ_EXPR, boolean_type_node,
429 build_int_cst (niter_type, 0)));
430 assumptions = fold (build2 (TRUTH_AND_EXPR, boolean_type_node,
431 assumptions, assumption));
433 tmp = fold (build2 (EXACT_DIV_EXPR, niter_type, base1, d));
434 tmp = fold (build2 (MULT_EXPR, niter_type, tmp, inverse (s, bound)));
435 niter->niter = fold (build2 (BIT_AND_EXPR, niter_type, tmp, bound));
440 /* Condition in shape a + s * i <= b
441 We must know that b + s does not overflow and a <= b + s and then we
442 can compute number of iterations as (b + s - a) / s. (It might
443 seem that we in fact could be more clever about testing the b + s
444 overflow condition using some information about b - a mod s,
445 but it was already taken into account during LE -> NE transform). */
449 bound = EXEC_BINARY (MINUS_EXPR, type, mmax, step0);
450 assumption = fold (build2 (LE_EXPR, boolean_type_node,
452 assumptions = fold (build2 (TRUTH_AND_EXPR, boolean_type_node,
453 assumptions, assumption));
457 tmp = fold (build2 (PLUS_EXPR, type, base1, step0));
458 assumption = fold (build2 (GT_EXPR, boolean_type_node, base0, tmp));
459 delta = fold (build2 (PLUS_EXPR, type, base1, step));
460 delta = fold (build2 (MINUS_EXPR, type, delta, base0));
461 delta = fold_convert (niter_type, delta);
465 /* Condition in shape a <= b - s * i
466 We must know that a - s does not overflow and a - s <= b and then
467 we can again compute number of iterations as (b - (a - s)) / s. */
470 bound = EXEC_BINARY (MINUS_EXPR, type, mmin, step1);
471 assumption = fold (build2 (LE_EXPR, boolean_type_node,
473 assumptions = fold (build2 (TRUTH_AND_EXPR, boolean_type_node,
474 assumptions, assumption));
476 step = fold (build1 (NEGATE_EXPR, type, step1));
477 tmp = fold (build2 (PLUS_EXPR, type, base0, step1));
478 assumption = fold (build2 (GT_EXPR, boolean_type_node, tmp, base1));
479 delta = fold (build2 (MINUS_EXPR, type, base0, step));
480 delta = fold (build2 (MINUS_EXPR, type, base1, delta));
481 delta = fold_convert (niter_type, delta);
483 noloop_assumptions = fold (build2 (TRUTH_OR_EXPR, boolean_type_node,
484 noloop_assumptions, assumption));
485 delta = fold (build2 (FLOOR_DIV_EXPR, niter_type, delta,
486 fold_convert (niter_type, step)));
487 niter->niter = delta;
490 niter->assumptions = assumptions;
491 niter->may_be_zero = noloop_assumptions;
495 niter->assumptions = boolean_true_node;
496 niter->may_be_zero = boolean_true_node;
497 niter->niter = build_int_cst_type (type, 0);
501 /* Tries to simplify EXPR using the evolutions of the loop invariants
502 in the superloops of LOOP. Returns the simplified expression
503 (or EXPR unchanged, if no simplification was possible). */
506 simplify_using_outer_evolutions (struct loop *loop, tree expr)
508 enum tree_code code = TREE_CODE (expr);
512 if (is_gimple_min_invariant (expr))
515 if (code == TRUTH_OR_EXPR
516 || code == TRUTH_AND_EXPR
517 || code == COND_EXPR)
521 e0 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 0));
522 if (TREE_OPERAND (expr, 0) != e0)
525 e1 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 1));
526 if (TREE_OPERAND (expr, 1) != e1)
529 if (code == COND_EXPR)
531 e2 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 2));
532 if (TREE_OPERAND (expr, 2) != e2)
540 if (code == COND_EXPR)
541 expr = build3 (code, boolean_type_node, e0, e1, e2);
543 expr = build2 (code, boolean_type_node, e0, e1);
550 e = instantiate_parameters (loop, expr);
551 if (is_gimple_min_invariant (e))
557 /* Tries to simplify EXPR using the condition COND. Returns the simplified
558 expression (or EXPR unchanged, if no simplification was possible).*/
561 tree_simplify_using_condition (tree cond, tree expr)
564 tree e, e0, e1, e2, notcond;
565 enum tree_code code = TREE_CODE (expr);
567 if (code == INTEGER_CST)
570 if (code == TRUTH_OR_EXPR
571 || code == TRUTH_AND_EXPR
572 || code == COND_EXPR)
576 e0 = tree_simplify_using_condition (cond, TREE_OPERAND (expr, 0));
577 if (TREE_OPERAND (expr, 0) != e0)
580 e1 = tree_simplify_using_condition (cond, TREE_OPERAND (expr, 1));
581 if (TREE_OPERAND (expr, 1) != e1)
584 if (code == COND_EXPR)
586 e2 = tree_simplify_using_condition (cond, TREE_OPERAND (expr, 2));
587 if (TREE_OPERAND (expr, 2) != e2)
595 if (code == COND_EXPR)
596 expr = build3 (code, boolean_type_node, e0, e1, e2);
598 expr = build2 (code, boolean_type_node, e0, e1);
605 /* Check whether COND ==> EXPR. */
606 notcond = invert_truthvalue (cond);
607 e = fold (build2 (TRUTH_OR_EXPR, boolean_type_node,
612 /* Check whether COND ==> not EXPR. */
613 e = fold (build2 (TRUTH_AND_EXPR, boolean_type_node,
621 /* Tries to simplify EXPR using the conditions on entry to LOOP.
622 Record the conditions used for simplification to CONDS_USED.
623 Returns the simplified expression (or EXPR unchanged, if no
624 simplification was possible).*/
627 simplify_using_initial_conditions (struct loop *loop, tree expr,
634 if (TREE_CODE (expr) == INTEGER_CST)
637 for (bb = loop->header;
638 bb != ENTRY_BLOCK_PTR;
639 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
641 e = EDGE_PRED (bb, 0);
642 if (EDGE_COUNT (bb->preds) > 1)
645 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
648 cond = COND_EXPR_COND (last_stmt (e->src));
649 if (e->flags & EDGE_FALSE_VALUE)
650 cond = invert_truthvalue (cond);
651 exp = tree_simplify_using_condition (cond, expr);
654 *conds_used = fold (build2 (TRUTH_AND_EXPR,
665 /* Stores description of number of iterations of LOOP derived from
666 EXIT (an exit edge of the LOOP) in NITER. Returns true if some
667 useful information could be derived (and fields of NITER has
668 meaning described in comments at struct tree_niter_desc
669 declaration), false otherwise. */
672 number_of_iterations_exit (struct loop *loop, edge exit,
673 struct tree_niter_desc *niter)
675 tree stmt, cond, type;
676 tree op0, base0, step0;
677 tree op1, base1, step1;
680 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, exit->src))
683 niter->assumptions = boolean_false_node;
684 stmt = last_stmt (exit->src);
685 if (!stmt || TREE_CODE (stmt) != COND_EXPR)
688 /* We want the condition for staying inside loop. */
689 cond = COND_EXPR_COND (stmt);
690 if (exit->flags & EDGE_TRUE_VALUE)
691 cond = invert_truthvalue (cond);
693 code = TREE_CODE (cond);
707 op0 = TREE_OPERAND (cond, 0);
708 op1 = TREE_OPERAND (cond, 1);
709 type = TREE_TYPE (op0);
711 if (TREE_CODE (type) != INTEGER_TYPE
712 && !POINTER_TYPE_P (type))
715 if (!simple_iv (loop, stmt, op0, &base0, &step0))
717 if (!simple_iv (loop, stmt, op1, &base1, &step1))
720 niter->niter = NULL_TREE;
721 number_of_iterations_cond (type, base0, step0, code, base1, step1,
726 niter->assumptions = simplify_using_outer_evolutions (loop,
728 niter->may_be_zero = simplify_using_outer_evolutions (loop,
730 niter->niter = simplify_using_outer_evolutions (loop, niter->niter);
732 niter->additional_info = boolean_true_node;
734 = simplify_using_initial_conditions (loop,
736 &niter->additional_info);
738 = simplify_using_initial_conditions (loop,
740 &niter->additional_info);
741 return integer_onep (niter->assumptions);
746 Analysis of a number of iterations of a loop by a brute-force evaluation.
750 /* Bound on the number of iterations we try to evaluate. */
752 #define MAX_ITERATIONS_TO_TRACK \
753 ((unsigned) PARAM_VALUE (PARAM_MAX_ITERATIONS_TO_TRACK))
755 /* Returns the loop phi node of LOOP such that ssa name X is derived from its
756 result by a chain of operations such that all but exactly one of their
757 operands are constants. */
760 chain_of_csts_start (struct loop *loop, tree x)
762 tree stmt = SSA_NAME_DEF_STMT (x);
763 basic_block bb = bb_for_stmt (stmt);
767 || !flow_bb_inside_loop_p (loop, bb))
770 if (TREE_CODE (stmt) == PHI_NODE)
772 if (bb == loop->header)
778 if (TREE_CODE (stmt) != MODIFY_EXPR)
781 get_stmt_operands (stmt);
782 if (NUM_VUSES (STMT_VUSE_OPS (stmt)) > 0)
784 if (NUM_V_MAY_DEFS (STMT_V_MAY_DEF_OPS (stmt)) > 0)
786 if (NUM_V_MUST_DEFS (STMT_V_MUST_DEF_OPS (stmt)) > 0)
788 if (NUM_DEFS (STMT_DEF_OPS (stmt)) > 1)
790 uses = STMT_USE_OPS (stmt);
791 if (NUM_USES (uses) != 1)
794 return chain_of_csts_start (loop, USE_OP (uses, 0));
797 /* Determines whether the expression X is derived from a result of a phi node
798 in header of LOOP such that
800 * the derivation of X consists only from operations with constants
801 * the initial value of the phi node is constant
802 * the value of the phi node in the next iteration can be derived from the
803 value in the current iteration by a chain of operations with constants.
805 If such phi node exists, it is returned. If X is a constant, X is returned
806 unchanged. Otherwise NULL_TREE is returned. */
809 get_base_for (struct loop *loop, tree x)
811 tree phi, init, next;
813 if (is_gimple_min_invariant (x))
816 phi = chain_of_csts_start (loop, x);
820 init = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
821 next = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
823 if (TREE_CODE (next) != SSA_NAME)
826 if (!is_gimple_min_invariant (init))
829 if (chain_of_csts_start (loop, next) != phi)
835 /* Given an expression X, then
837 * if BASE is NULL_TREE, X must be a constant and we return X.
838 * otherwise X is a SSA name, whose value in the considered loop is derived
839 by a chain of operations with constant from a result of a phi node in
840 the header of the loop. Then we return value of X when the value of the
841 result of this phi node is given by the constant BASE. */
844 get_val_for (tree x, tree base)
853 stmt = SSA_NAME_DEF_STMT (x);
854 if (TREE_CODE (stmt) == PHI_NODE)
857 uses = STMT_USE_OPS (stmt);
858 op = USE_OP_PTR (uses, 0);
860 nx = USE_FROM_PTR (op);
861 val = get_val_for (nx, base);
863 val = fold (TREE_OPERAND (stmt, 1));
869 /* Tries to count the number of iterations of LOOP till it exits by EXIT
870 by brute force -- i.e. by determining the value of the operands of the
871 condition at EXIT in first few iterations of the loop (assuming that
872 these values are constant) and determining the first one in that the
873 condition is not satisfied. Returns the constant giving the number
874 of the iterations of LOOP if successful, chrec_dont_know otherwise. */
877 loop_niter_by_eval (struct loop *loop, edge exit)
879 tree cond, cnd, acnd;
880 tree op[2], val[2], next[2], aval[2], phi[2];
884 cond = last_stmt (exit->src);
885 if (!cond || TREE_CODE (cond) != COND_EXPR)
886 return chrec_dont_know;
888 cnd = COND_EXPR_COND (cond);
889 if (exit->flags & EDGE_TRUE_VALUE)
890 cnd = invert_truthvalue (cnd);
892 cmp = TREE_CODE (cnd);
901 for (j = 0; j < 2; j++)
902 op[j] = TREE_OPERAND (cnd, j);
906 return chrec_dont_know;
909 for (j = 0; j < 2; j++)
911 phi[j] = get_base_for (loop, op[j]);
913 return chrec_dont_know;
916 for (j = 0; j < 2; j++)
918 if (TREE_CODE (phi[j]) == PHI_NODE)
920 val[j] = PHI_ARG_DEF_FROM_EDGE (phi[j], loop_preheader_edge (loop));
921 next[j] = PHI_ARG_DEF_FROM_EDGE (phi[j], loop_latch_edge (loop));
931 for (i = 0; i < MAX_ITERATIONS_TO_TRACK; i++)
933 for (j = 0; j < 2; j++)
934 aval[j] = get_val_for (op[j], val[j]);
936 acnd = fold (build2 (cmp, boolean_type_node, aval[0], aval[1]));
939 if (dump_file && (dump_flags & TDF_DETAILS))
941 "Proved that loop %d iterates %d times using brute force.\n",
943 return build_int_cst (unsigned_type_node, i);
946 for (j = 0; j < 2; j++)
947 val[j] = get_val_for (next[j], val[j]);
950 return chrec_dont_know;
953 /* Finds the exit of the LOOP by that the loop exits after a constant
954 number of iterations and stores the exit edge to *EXIT. The constant
955 giving the number of iterations of LOOP is returned. The number of
956 iterations is determined using loop_niter_by_eval (i.e. by brute force
957 evaluation). If we are unable to find the exit for that loop_niter_by_eval
958 determines the number of iterations, chrec_dont_know is returned. */
961 find_loop_niter_by_eval (struct loop *loop, edge *exit)
964 edge *exits = get_loop_exit_edges (loop, &n_exits);
966 tree niter = NULL_TREE, aniter;
969 for (i = 0; i < n_exits; i++)
972 if (!just_once_each_iteration_p (loop, ex->src))
975 aniter = loop_niter_by_eval (loop, ex);
976 if (chrec_contains_undetermined (aniter)
977 || TREE_CODE (aniter) != INTEGER_CST)
981 && !nonzero_p (fold (build2 (LT_EXPR, boolean_type_node,
990 return niter ? niter : chrec_dont_know;
995 Analysis of upper bounds on number of iterations of a loop.
999 /* Records that AT_STMT is executed at most BOUND times in LOOP. The
1000 additional condition ADDITIONAL is recorded with the bound. */
1003 record_estimate (struct loop *loop, tree bound, tree additional, tree at_stmt)
1005 struct nb_iter_bound *elt = xmalloc (sizeof (struct nb_iter_bound));
1007 if (dump_file && (dump_flags & TDF_DETAILS))
1009 fprintf (dump_file, "Statements after ");
1010 print_generic_expr (dump_file, at_stmt, TDF_SLIM);
1011 fprintf (dump_file, " are executed at most ");
1012 print_generic_expr (dump_file, bound, TDF_SLIM);
1013 fprintf (dump_file, " times in loop %d.\n", loop->num);
1017 elt->at_stmt = at_stmt;
1018 elt->additional = additional;
1019 elt->next = loop->bounds;
1023 /* Records estimates on numbers of iterations of LOOP. */
1026 estimate_numbers_of_iterations_loop (struct loop *loop)
1030 unsigned i, n_exits;
1031 struct tree_niter_desc niter_desc;
1033 exits = get_loop_exit_edges (loop, &n_exits);
1034 for (i = 0; i < n_exits; i++)
1036 if (!number_of_iterations_exit (loop, exits[i], &niter_desc))
1039 niter = niter_desc.niter;
1040 type = TREE_TYPE (niter);
1041 if (!zero_p (niter_desc.may_be_zero)
1042 && !nonzero_p (niter_desc.may_be_zero))
1043 niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
1044 build_int_cst_type (type, 0),
1046 record_estimate (loop, niter,
1047 niter_desc.additional_info,
1048 last_stmt (exits[i]->src));
1052 /* Analyzes the bounds of arrays accessed in the loop. */
1053 if (loop->estimated_nb_iterations == NULL_TREE)
1055 varray_type datarefs;
1056 VARRAY_GENERIC_PTR_INIT (datarefs, 3, "datarefs");
1057 find_data_references_in_loop (loop, &datarefs);
1058 free_data_refs (datarefs);
1062 /* Records estimates on numbers of iterations of LOOPS. */
1065 estimate_numbers_of_iterations (struct loops *loops)
1070 for (i = 1; i < loops->num; i++)
1072 loop = loops->parray[i];
1074 estimate_numbers_of_iterations_loop (loop);
1078 /* If A > B, returns -1. If A == B, returns 0. If A < B, returns 1.
1079 If neither of these relations can be proved, returns 2. */
1082 compare_trees (tree a, tree b)
1084 tree typea = TREE_TYPE (a), typeb = TREE_TYPE (b);
1087 if (TYPE_PRECISION (typea) > TYPE_PRECISION (typeb))
1092 a = fold_convert (type, a);
1093 b = fold_convert (type, b);
1095 if (nonzero_p (fold (build2 (EQ_EXPR, boolean_type_node, a, b))))
1097 if (nonzero_p (fold (build2 (LT_EXPR, boolean_type_node, a, b))))
1099 if (nonzero_p (fold (build2 (GT_EXPR, boolean_type_node, a, b))))
1105 /* Returns the largest value obtainable by casting something in INNER type to
1109 upper_bound_in_type (tree outer, tree inner)
1111 unsigned HOST_WIDE_INT lo, hi;
1112 unsigned bits = TYPE_PRECISION (inner);
1114 if (TYPE_UNSIGNED (outer) || TYPE_UNSIGNED (inner))
1116 /* Zero extending in these cases. */
1117 if (bits <= HOST_BITS_PER_WIDE_INT)
1120 lo = (~(unsigned HOST_WIDE_INT) 0)
1121 >> (HOST_BITS_PER_WIDE_INT - bits);
1125 hi = (~(unsigned HOST_WIDE_INT) 0)
1126 >> (2 * HOST_BITS_PER_WIDE_INT - bits);
1127 lo = ~(unsigned HOST_WIDE_INT) 0;
1132 /* Sign extending in these cases. */
1133 if (bits <= HOST_BITS_PER_WIDE_INT)
1136 lo = (~(unsigned HOST_WIDE_INT) 0)
1137 >> (HOST_BITS_PER_WIDE_INT - bits) >> 1;
1141 hi = (~(unsigned HOST_WIDE_INT) 0)
1142 >> (2 * HOST_BITS_PER_WIDE_INT - bits) >> 1;
1143 lo = ~(unsigned HOST_WIDE_INT) 0;
1147 return fold_convert (outer,
1148 build_int_cst_wide (inner, lo, hi));
1151 /* Returns the smallest value obtainable by casting something in INNER type to
1155 lower_bound_in_type (tree outer, tree inner)
1157 unsigned HOST_WIDE_INT lo, hi;
1158 unsigned bits = TYPE_PRECISION (inner);
1160 if (TYPE_UNSIGNED (outer) || TYPE_UNSIGNED (inner))
1162 else if (bits <= HOST_BITS_PER_WIDE_INT)
1164 hi = ~(unsigned HOST_WIDE_INT) 0;
1165 lo = (~(unsigned HOST_WIDE_INT) 0) << (bits - 1);
1169 hi = (~(unsigned HOST_WIDE_INT) 0) << (bits - HOST_BITS_PER_WIDE_INT - 1);
1173 return fold_convert (outer,
1174 build_int_cst_wide (inner, lo, hi));
1177 /* Returns true if statement S1 dominates statement S2. */
1180 stmt_dominates_stmt_p (tree s1, tree s2)
1182 basic_block bb1 = bb_for_stmt (s1), bb2 = bb_for_stmt (s2);
1190 block_stmt_iterator bsi;
1192 for (bsi = bsi_start (bb1); bsi_stmt (bsi) != s2; bsi_next (&bsi))
1193 if (bsi_stmt (bsi) == s1)
1199 return dominated_by_p (CDI_DOMINATORS, bb2, bb1);
1202 /* Checks whether it is correct to count the induction variable BASE + STEP * I
1203 at AT_STMT in wider TYPE, using the fact that statement OF is executed at
1204 most BOUND times in the loop. If it is possible, return the value of step
1205 of the induction variable in the TYPE, otherwise return NULL_TREE.
1207 ADDITIONAL is the additional condition recorded for operands of the bound.
1208 This is useful in the following case, created by loop header copying:
1217 If the n > 0 condition is taken into account, the number of iterations of the
1218 loop can be expressed as n - 1. If the type of n is signed, the ADDITIONAL
1219 assumption "n > 0" says us that the value of the number of iterations is at
1220 most MAX_TYPE - 1 (without this assumption, it might overflow). */
1223 can_count_iv_in_wider_type_bound (tree type, tree base, tree step,
1229 tree inner_type = TREE_TYPE (base), b, bplusstep, new_step, new_step_abs;
1230 tree valid_niter, extreme, unsigned_type, delta, bound_type;
1233 b = fold_convert (type, base);
1234 bplusstep = fold_convert (type,
1235 fold (build2 (PLUS_EXPR, inner_type, base, step)));
1236 new_step = fold (build2 (MINUS_EXPR, type, bplusstep, b));
1237 if (TREE_CODE (new_step) != INTEGER_CST)
1240 switch (compare_trees (bplusstep, b))
1243 extreme = upper_bound_in_type (type, inner_type);
1244 delta = fold (build2 (MINUS_EXPR, type, extreme, b));
1245 new_step_abs = new_step;
1249 extreme = lower_bound_in_type (type, inner_type);
1250 new_step_abs = fold (build1 (NEGATE_EXPR, type, new_step));
1251 delta = fold (build2 (MINUS_EXPR, type, b, extreme));
1261 unsigned_type = unsigned_type_for (type);
1262 delta = fold_convert (unsigned_type, delta);
1263 new_step_abs = fold_convert (unsigned_type, new_step_abs);
1264 valid_niter = fold (build2 (FLOOR_DIV_EXPR, unsigned_type,
1265 delta, new_step_abs));
1267 bound_type = TREE_TYPE (bound);
1268 if (TYPE_PRECISION (type) > TYPE_PRECISION (bound_type))
1269 bound = fold_convert (unsigned_type, bound);
1271 valid_niter = fold_convert (bound_type, valid_niter);
1273 if (at_stmt && stmt_dominates_stmt_p (of, at_stmt))
1275 /* After the statement OF we know that anything is executed at most
1277 cond = build2 (GE_EXPR, boolean_type_node, valid_niter, bound);
1281 /* Before the statement OF we know that anything is executed at most
1283 cond = build2 (GT_EXPR, boolean_type_node, valid_niter, bound);
1287 if (nonzero_p (cond))
1290 /* Try taking additional conditions into account. */
1291 cond = build2 (TRUTH_OR_EXPR, boolean_type_node,
1292 invert_truthvalue (additional),
1295 if (nonzero_p (cond))
1301 /* Checks whether it is correct to count the induction variable BASE + STEP * I
1302 at AT_STMT in wider TYPE, using the bounds on numbers of iterations of a
1303 LOOP. If it is possible, return the value of step of the induction variable
1304 in the TYPE, otherwise return NULL_TREE. */
1307 can_count_iv_in_wider_type (struct loop *loop, tree type, tree base, tree step,
1310 struct nb_iter_bound *bound;
1313 for (bound = loop->bounds; bound; bound = bound->next)
1315 new_step = can_count_iv_in_wider_type_bound (type, base, step,
1328 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
1331 free_numbers_of_iterations_estimates_loop (struct loop *loop)
1333 struct nb_iter_bound *bound, *next;
1335 for (bound = loop->bounds; bound; bound = next)
1341 loop->bounds = NULL;
1344 /* Frees the information on upper bounds on numbers of iterations of LOOPS. */
1347 free_numbers_of_iterations_estimates (struct loops *loops)
1352 for (i = 1; i < loops->num; i++)
1354 loop = loops->parray[i];
1356 free_numbers_of_iterations_estimates_loop (loop);