1 /* Functions to determine/estimate number of iterations of a loop.
2 Copyright (C) 2004, 2005 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, 51 Franklin Street, Fifth Floor, Boston, MA
23 #include "coretypes.h"
28 #include "hard-reg-set.h"
29 #include "basic-block.h"
31 #include "diagnostic.h"
33 #include "tree-flow.h"
34 #include "tree-dump.h"
36 #include "tree-pass.h"
38 #include "tree-chrec.h"
39 #include "tree-scalar-evolution.h"
40 #include "tree-data-ref.h"
44 #include "tree-inline.h"
46 #define SWAP(X, Y) do { void *tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
51 Analysis of number of iterations of an affine exit test.
55 /* Returns true if ARG is either NULL_TREE or constant zero. Unlike
56 integer_zerop, it does not care about overflow flags. */
64 if (TREE_CODE (arg
) != INTEGER_CST
)
67 return (TREE_INT_CST_LOW (arg
) == 0 && TREE_INT_CST_HIGH (arg
) == 0);
70 /* Returns true if ARG a nonzero constant. Unlike integer_nonzerop, it does
71 not care about overflow flags. */
79 if (TREE_CODE (arg
) != INTEGER_CST
)
82 return (TREE_INT_CST_LOW (arg
) != 0 || TREE_INT_CST_HIGH (arg
) != 0);
85 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
88 inverse (tree x
, tree mask
)
90 tree type
= TREE_TYPE (x
);
92 unsigned ctr
= tree_floor_log2 (mask
);
94 if (TYPE_PRECISION (type
) <= HOST_BITS_PER_WIDE_INT
)
96 unsigned HOST_WIDE_INT ix
;
97 unsigned HOST_WIDE_INT imask
;
98 unsigned HOST_WIDE_INT irslt
= 1;
100 gcc_assert (cst_and_fits_in_hwi (x
));
101 gcc_assert (cst_and_fits_in_hwi (mask
));
103 ix
= int_cst_value (x
);
104 imask
= int_cst_value (mask
);
113 rslt
= build_int_cst_type (type
, irslt
);
117 rslt
= build_int_cst_type (type
, 1);
120 rslt
= int_const_binop (MULT_EXPR
, rslt
, x
, 0);
121 x
= int_const_binop (MULT_EXPR
, x
, x
, 0);
123 rslt
= int_const_binop (BIT_AND_EXPR
, rslt
, mask
, 0);
129 /* Determine the number of iterations according to condition (for staying
130 inside loop) which compares two induction variables using comparison
131 operator CODE. The induction variable on left side of the comparison
132 is IV0, the right-hand side is IV1. Both induction variables must have
133 type TYPE, which must be an integer or pointer type. The steps of the
134 ivs must be constants (or NULL_TREE, which is interpreted as constant zero).
136 The results (number of iterations and assumptions as described in
137 comments at struct tree_niter_desc in tree-flow.h) are stored to NITER.
138 In case we are unable to determine number of iterations, contents of
139 this structure is unchanged. */
142 number_of_iterations_cond (tree type
, affine_iv
*iv0
, enum tree_code code
,
143 affine_iv
*iv1
, struct tree_niter_desc
*niter
)
145 tree step
, delta
, mmin
, mmax
;
146 tree may_xform
, bound
, s
, d
, tmp
;
147 bool was_sharp
= false, never_infinite
;
149 tree assumptions
= boolean_true_node
;
150 tree noloop_assumptions
= boolean_false_node
;
151 tree niter_type
, signed_niter_type
;
154 /* The meaning of these assumptions is this:
156 then the rest of information does not have to be valid
157 if noloop_assumptions then the loop does not have to roll
158 (but it is only conservative approximation, i.e. it only says that
159 if !noloop_assumptions, then the loop does not end before the computed
160 number of iterations) */
162 /* Make < comparison from > ones. */
167 code
= swap_tree_comparison (code
);
170 /* If the control induction variable does not overflow, the loop obviously
171 cannot be infinite. */
172 if (!zero_p (iv0
->step
) && iv0
->no_overflow
)
173 never_infinite
= true;
174 else if (!zero_p (iv1
->step
) && iv1
->no_overflow
)
175 never_infinite
= true;
177 never_infinite
= false;
179 /* We can handle the case when neither of the sides of the comparison is
180 invariant, provided that the test is NE_EXPR. This rarely occurs in
181 practice, but it is simple enough to manage. */
182 if (!zero_p (iv0
->step
) && !zero_p (iv1
->step
))
187 iv0
->step
= fold_binary_to_constant (MINUS_EXPR
, type
,
188 iv0
->step
, iv1
->step
);
189 iv0
->no_overflow
= false;
190 iv1
->step
= NULL_TREE
;
191 iv1
->no_overflow
= true;
194 /* If the result is a constant, the loop is weird. More precise handling
195 would be possible, but the situation is not common enough to waste time
197 if (zero_p (iv0
->step
) && zero_p (iv1
->step
))
200 /* Ignore loops of while (i-- < 10) type. */
203 if (iv0
->step
&& tree_int_cst_sign_bit (iv0
->step
))
206 if (!zero_p (iv1
->step
) && !tree_int_cst_sign_bit (iv1
->step
))
210 if (POINTER_TYPE_P (type
))
212 /* We assume pointer arithmetic never overflows. */
213 mmin
= mmax
= NULL_TREE
;
217 mmin
= TYPE_MIN_VALUE (type
);
218 mmax
= TYPE_MAX_VALUE (type
);
221 /* Some more condition normalization. We must record some assumptions
226 /* We want to take care only of <=; this is easy,
227 as in cases the overflow would make the transformation unsafe the loop
228 does not roll. Seemingly it would make more sense to want to take
229 care of <, as NE is more similar to it, but the problem is that here
230 the transformation would be more difficult due to possibly infinite
232 if (zero_p (iv0
->step
))
235 assumption
= fold_build2 (EQ_EXPR
, boolean_type_node
,
238 assumption
= boolean_false_node
;
239 if (nonzero_p (assumption
))
241 iv0
->base
= fold_build2 (PLUS_EXPR
, type
, iv0
->base
,
242 build_int_cst_type (type
, 1));
247 assumption
= fold_build2 (EQ_EXPR
, boolean_type_node
,
250 assumption
= boolean_false_node
;
251 if (nonzero_p (assumption
))
253 iv1
->base
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
,
254 build_int_cst_type (type
, 1));
256 noloop_assumptions
= assumption
;
259 /* It will be useful to be able to tell the difference once more in
260 <= -> != reduction. */
264 /* Take care of trivially infinite loops. */
267 if (zero_p (iv0
->step
)
269 && operand_equal_p (iv0
->base
, mmin
, 0))
271 if (zero_p (iv1
->step
)
273 && operand_equal_p (iv1
->base
, mmax
, 0))
277 /* If we can we want to take care of NE conditions instead of size
278 comparisons, as they are much more friendly (most importantly
279 this takes care of special handling of loops with step 1). We can
280 do it if we first check that upper bound is greater or equal to
281 lower bound, their difference is constant c modulo step and that
282 there is not an overflow. */
285 if (zero_p (iv0
->step
))
286 step
= fold_unary_to_constant (NEGATE_EXPR
, type
, iv1
->step
);
289 delta
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, iv0
->base
);
290 delta
= fold_build2 (FLOOR_MOD_EXPR
, type
, delta
, step
);
291 may_xform
= boolean_false_node
;
293 if (TREE_CODE (delta
) == INTEGER_CST
)
295 tmp
= fold_binary_to_constant (MINUS_EXPR
, type
, step
,
296 build_int_cst_type (type
, 1));
298 && operand_equal_p (delta
, tmp
, 0))
300 /* A special case. We have transformed condition of type
301 for (i = 0; i < 4; i += 4)
303 for (i = 0; i <= 3; i += 4)
304 obviously if the test for overflow during that transformation
305 passed, we cannot overflow here. Most importantly any
306 loop with sharp end condition and step 1 falls into this
307 category, so handling this case specially is definitely
308 worth the troubles. */
309 may_xform
= boolean_true_node
;
311 else if (zero_p (iv0
->step
))
313 if (!mmin
|| iv1
->no_overflow
)
314 may_xform
= boolean_true_node
;
317 bound
= fold_binary_to_constant (PLUS_EXPR
, type
,
319 bound
= fold_binary_to_constant (MINUS_EXPR
, type
,
321 may_xform
= fold_build2 (LE_EXPR
, boolean_type_node
,
327 if (!mmax
|| iv0
->no_overflow
)
328 may_xform
= boolean_true_node
;
331 bound
= fold_binary_to_constant (MINUS_EXPR
, type
,
333 bound
= fold_binary_to_constant (PLUS_EXPR
, type
,
335 may_xform
= fold_build2 (LE_EXPR
, boolean_type_node
,
341 if (!zero_p (may_xform
))
343 /* We perform the transformation always provided that it is not
344 completely senseless. This is OK, as we would need this assumption
345 to determine the number of iterations anyway. */
346 if (!nonzero_p (may_xform
))
347 assumptions
= may_xform
;
349 if (zero_p (iv0
->step
))
351 iv0
->base
= fold_build2 (PLUS_EXPR
, type
, iv0
->base
, delta
);
352 iv0
->base
= fold_build2 (MINUS_EXPR
, type
, iv0
->base
, step
);
356 iv1
->base
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, delta
);
357 iv1
->base
= fold_build2 (PLUS_EXPR
, type
, iv1
->base
, step
);
360 assumption
= fold_build2 (GT_EXPR
, boolean_type_node
,
361 iv0
->base
, iv1
->base
);
362 noloop_assumptions
= fold_build2 (TRUTH_OR_EXPR
, boolean_type_node
,
363 noloop_assumptions
, assumption
);
368 /* Count the number of iterations. */
369 niter_type
= unsigned_type_for (type
);
370 signed_niter_type
= signed_type_for (type
);
374 /* Everything we do here is just arithmetics modulo size of mode. This
375 makes us able to do more involved computations of number of iterations
376 than in other cases. First transform the condition into shape
377 s * i <> c, with s positive. */
378 iv1
->base
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, iv0
->base
);
379 iv0
->base
= NULL_TREE
;
380 if (!zero_p (iv1
->step
))
381 iv0
->step
= fold_unary_to_constant (NEGATE_EXPR
, type
, iv1
->step
);
382 iv1
->step
= NULL_TREE
;
383 if (tree_int_cst_sign_bit (fold_convert (signed_niter_type
, iv0
->step
)))
385 iv0
->step
= fold_unary_to_constant (NEGATE_EXPR
, type
, iv0
->step
);
386 iv1
->base
= fold_build1 (NEGATE_EXPR
, type
, iv1
->base
);
389 iv1
->base
= fold_convert (niter_type
, iv1
->base
);
390 iv0
->step
= fold_convert (niter_type
, iv0
->step
);
392 /* Let nsd (step, size of mode) = d. If d does not divide c, the loop
393 is infinite. Otherwise, the number of iterations is
394 (inverse(s/d) * (c/d)) mod (size of mode/d). */
395 bits
= num_ending_zeros (iv0
->step
);
396 d
= fold_binary_to_constant (LSHIFT_EXPR
, niter_type
,
397 build_int_cst_type (niter_type
, 1), bits
);
398 s
= fold_binary_to_constant (RSHIFT_EXPR
, niter_type
, iv0
->step
, bits
);
400 bound
= build_low_bits_mask (niter_type
,
401 (TYPE_PRECISION (niter_type
)
402 - tree_low_cst (bits
, 1)));
406 /* If we cannot assume that the loop is not infinite, record the
407 assumptions for divisibility of c. */
408 assumption
= fold_build2 (FLOOR_MOD_EXPR
, niter_type
, iv1
->base
, d
);
409 assumption
= fold_build2 (EQ_EXPR
, boolean_type_node
,
411 build_int_cst (niter_type
, 0));
412 assumptions
= fold_build2 (TRUTH_AND_EXPR
, boolean_type_node
,
413 assumptions
, assumption
);
416 tmp
= fold_build2 (EXACT_DIV_EXPR
, niter_type
, iv1
->base
, d
);
417 tmp
= fold_build2 (MULT_EXPR
, niter_type
, tmp
, inverse (s
, bound
));
418 niter
->niter
= fold_build2 (BIT_AND_EXPR
, niter_type
, tmp
, bound
);
422 if (zero_p (iv1
->step
))
423 /* Condition in shape a + s * i <= b
424 We must know that b + s does not overflow and a <= b + s and then we
425 can compute number of iterations as (b + s - a) / s. (It might
426 seem that we in fact could be more clever about testing the b + s
427 overflow condition using some information about b - a mod s,
428 but it was already taken into account during LE -> NE transform). */
430 if (mmax
&& !iv0
->no_overflow
)
432 bound
= fold_binary_to_constant (MINUS_EXPR
, type
,
434 assumption
= fold_build2 (LE_EXPR
, boolean_type_node
,
436 assumptions
= fold_build2 (TRUTH_AND_EXPR
, boolean_type_node
,
437 assumptions
, assumption
);
441 tmp
= fold_build2 (PLUS_EXPR
, type
, iv1
->base
, iv0
->step
);
442 assumption
= fold_build2 (GT_EXPR
, boolean_type_node
,
444 delta
= fold_build2 (PLUS_EXPR
, type
, iv1
->base
, step
);
445 delta
= fold_build2 (MINUS_EXPR
, type
, delta
, iv0
->base
);
446 delta
= fold_convert (niter_type
, delta
);
450 /* Condition in shape a <= b - s * i
451 We must know that a - s does not overflow and a - s <= b and then
452 we can again compute number of iterations as (b - (a - s)) / s. */
453 if (mmin
&& !iv1
->no_overflow
)
455 bound
= fold_binary_to_constant (MINUS_EXPR
, type
,
457 assumption
= fold_build2 (LE_EXPR
, boolean_type_node
,
459 assumptions
= fold_build2 (TRUTH_AND_EXPR
, boolean_type_node
,
460 assumptions
, assumption
);
462 step
= fold_build1 (NEGATE_EXPR
, type
, iv1
->step
);
463 tmp
= fold_build2 (PLUS_EXPR
, type
, iv0
->base
, iv1
->step
);
464 assumption
= fold_build2 (GT_EXPR
, boolean_type_node
, tmp
, iv1
->base
);
465 delta
= fold_build2 (MINUS_EXPR
, type
, iv0
->base
, step
);
466 delta
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, delta
);
467 delta
= fold_convert (niter_type
, delta
);
469 noloop_assumptions
= fold_build2 (TRUTH_OR_EXPR
, boolean_type_node
,
470 noloop_assumptions
, assumption
);
471 delta
= fold_build2 (FLOOR_DIV_EXPR
, niter_type
, delta
,
472 fold_convert (niter_type
, step
));
473 niter
->niter
= delta
;
476 niter
->assumptions
= assumptions
;
477 niter
->may_be_zero
= noloop_assumptions
;
481 niter
->assumptions
= boolean_true_node
;
482 niter
->may_be_zero
= boolean_true_node
;
483 niter
->niter
= build_int_cst_type (type
, 0);
488 /* Similar to number_of_iterations_cond, but only handles the special
489 case of loops with step 1 or -1. The meaning of the arguments
490 is the same as in number_of_iterations_cond. The function
491 returns true if the special case was recognized, false otherwise. */
494 number_of_iterations_special (tree type
, affine_iv
*iv0
, enum tree_code code
,
495 affine_iv
*iv1
, struct tree_niter_desc
*niter
)
497 tree niter_type
= unsigned_type_for (type
), mmax
, mmin
;
499 /* Make < comparison from > ones. */
504 code
= swap_tree_comparison (code
);
510 if (zero_p (iv0
->step
))
512 if (zero_p (iv1
->step
))
516 else if (!zero_p (iv1
->step
))
519 if (integer_onep (iv0
->step
))
521 /* for (i = iv0->base; i != iv1->base; i++) */
522 niter
->assumptions
= boolean_true_node
;
523 niter
->may_be_zero
= boolean_false_node
;
524 niter
->niter
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, iv0
->base
);
525 niter
->additional_info
= boolean_true_node
;
527 else if (integer_all_onesp (iv0
->step
))
529 /* for (i = iv0->base; i != iv1->base; i--) */
530 niter
->assumptions
= boolean_true_node
;
531 niter
->may_be_zero
= boolean_false_node
;
532 niter
->niter
= fold_build2 (MINUS_EXPR
, type
, iv0
->base
, iv1
->base
);
540 if ((iv0
->step
&& integer_onep (iv0
->step
)
541 && zero_p (iv1
->step
))
542 || (iv1
->step
&& integer_all_onesp (iv1
->step
)
543 && zero_p (iv0
->step
)))
545 /* for (i = iv0->base; i < iv1->base; i++)
549 for (i = iv1->base; i > iv0->base; i--).
551 In both cases # of iterations is iv1->base - iv0->base. */
553 niter
->assumptions
= boolean_true_node
;
554 niter
->may_be_zero
= fold_build2 (GT_EXPR
, boolean_type_node
,
555 iv0
->base
, iv1
->base
);
556 niter
->niter
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, iv0
->base
);
563 if (POINTER_TYPE_P (type
))
565 /* We assume pointer arithmetic never overflows. */
566 mmin
= mmax
= NULL_TREE
;
570 mmin
= TYPE_MIN_VALUE (type
);
571 mmax
= TYPE_MAX_VALUE (type
);
574 if (iv0
->step
&& integer_onep (iv0
->step
)
575 && zero_p (iv1
->step
))
577 /* for (i = iv0->base; i <= iv1->base; i++) */
578 if (mmax
&& !iv0
->no_overflow
)
579 niter
->assumptions
= fold_build2 (NE_EXPR
, boolean_type_node
,
582 niter
->assumptions
= boolean_true_node
;
583 iv1
->base
= fold_build2 (PLUS_EXPR
, type
, iv1
->base
,
584 build_int_cst_type (type
, 1));
586 else if (iv1
->step
&& integer_all_onesp (iv1
->step
)
587 && zero_p (iv0
->step
))
589 /* for (i = iv1->base; i >= iv0->base; i--) */
590 if (mmin
&& !iv1
->no_overflow
)
591 niter
->assumptions
= fold_build2 (NE_EXPR
, boolean_type_node
,
594 niter
->assumptions
= boolean_true_node
;
595 iv0
->base
= fold_build2 (MINUS_EXPR
, type
, iv0
->base
,
596 build_int_cst_type (type
, 1));
601 niter
->may_be_zero
= fold_build2 (GT_EXPR
, boolean_type_node
,
602 iv0
->base
, iv1
->base
);
603 niter
->niter
= fold_build2 (MINUS_EXPR
, type
, iv1
->base
, iv0
->base
);
610 niter
->niter
= fold_convert (niter_type
, niter
->niter
);
611 niter
->additional_info
= boolean_true_node
;
615 /* Substitute NEW for OLD in EXPR and fold the result. */
618 simplify_replace_tree (tree expr
, tree old
, tree
new)
621 tree ret
= NULL_TREE
, e
, se
;
627 || operand_equal_p (expr
, old
, 0))
628 return unshare_expr (new);
633 n
= TREE_CODE_LENGTH (TREE_CODE (expr
));
634 for (i
= 0; i
< n
; i
++)
636 e
= TREE_OPERAND (expr
, i
);
637 se
= simplify_replace_tree (e
, old
, new);
642 ret
= copy_node (expr
);
644 TREE_OPERAND (ret
, i
) = se
;
647 return (ret
? fold (ret
) : expr
);
650 /* Expand definitions of ssa names in EXPR as long as they are simple
651 enough, and return the new expression. */
654 expand_simple_operations (tree expr
)
657 tree ret
= NULL_TREE
, e
, ee
, stmt
;
660 if (expr
== NULL_TREE
)
663 if (is_gimple_min_invariant (expr
))
666 code
= TREE_CODE (expr
);
667 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code
)))
669 n
= TREE_CODE_LENGTH (code
);
670 for (i
= 0; i
< n
; i
++)
672 e
= TREE_OPERAND (expr
, i
);
673 ee
= expand_simple_operations (e
);
678 ret
= copy_node (expr
);
680 TREE_OPERAND (ret
, i
) = ee
;
683 return (ret
? fold (ret
) : expr
);
686 if (TREE_CODE (expr
) != SSA_NAME
)
689 stmt
= SSA_NAME_DEF_STMT (expr
);
690 if (TREE_CODE (stmt
) != MODIFY_EXPR
)
693 e
= TREE_OPERAND (stmt
, 1);
694 if (/* Casts are simple. */
695 TREE_CODE (e
) != NOP_EXPR
696 && TREE_CODE (e
) != CONVERT_EXPR
697 /* Copies are simple. */
698 && TREE_CODE (e
) != SSA_NAME
699 /* Assignments of invariants are simple. */
700 && !is_gimple_min_invariant (e
)
701 /* And increments and decrements by a constant are simple. */
702 && !((TREE_CODE (e
) == PLUS_EXPR
703 || TREE_CODE (e
) == MINUS_EXPR
)
704 && is_gimple_min_invariant (TREE_OPERAND (e
, 1))))
707 return expand_simple_operations (e
);
710 /* Tries to simplify EXPR using the condition COND. Returns the simplified
711 expression (or EXPR unchanged, if no simplification was possible). */
714 tree_simplify_using_condition_1 (tree cond
, tree expr
)
717 tree e
, te
, e0
, e1
, e2
, notcond
;
718 enum tree_code code
= TREE_CODE (expr
);
720 if (code
== INTEGER_CST
)
723 if (code
== TRUTH_OR_EXPR
724 || code
== TRUTH_AND_EXPR
725 || code
== COND_EXPR
)
729 e0
= tree_simplify_using_condition_1 (cond
, TREE_OPERAND (expr
, 0));
730 if (TREE_OPERAND (expr
, 0) != e0
)
733 e1
= tree_simplify_using_condition_1 (cond
, TREE_OPERAND (expr
, 1));
734 if (TREE_OPERAND (expr
, 1) != e1
)
737 if (code
== COND_EXPR
)
739 e2
= tree_simplify_using_condition_1 (cond
, TREE_OPERAND (expr
, 2));
740 if (TREE_OPERAND (expr
, 2) != e2
)
748 if (code
== COND_EXPR
)
749 expr
= fold_build3 (code
, boolean_type_node
, e0
, e1
, e2
);
751 expr
= fold_build2 (code
, boolean_type_node
, e0
, e1
);
757 /* In case COND is equality, we may be able to simplify EXPR by copy/constant
758 propagation, and vice versa. Fold does not handle this, since it is
759 considered too expensive. */
760 if (TREE_CODE (cond
) == EQ_EXPR
)
762 e0
= TREE_OPERAND (cond
, 0);
763 e1
= TREE_OPERAND (cond
, 1);
765 /* We know that e0 == e1. Check whether we cannot simplify expr
767 e
= simplify_replace_tree (expr
, e0
, e1
);
768 if (zero_p (e
) || nonzero_p (e
))
771 e
= simplify_replace_tree (expr
, e1
, e0
);
772 if (zero_p (e
) || nonzero_p (e
))
775 if (TREE_CODE (expr
) == EQ_EXPR
)
777 e0
= TREE_OPERAND (expr
, 0);
778 e1
= TREE_OPERAND (expr
, 1);
780 /* If e0 == e1 (EXPR) implies !COND, then EXPR cannot be true. */
781 e
= simplify_replace_tree (cond
, e0
, e1
);
784 e
= simplify_replace_tree (cond
, e1
, e0
);
788 if (TREE_CODE (expr
) == NE_EXPR
)
790 e0
= TREE_OPERAND (expr
, 0);
791 e1
= TREE_OPERAND (expr
, 1);
793 /* If e0 == e1 (!EXPR) implies !COND, then EXPR must be true. */
794 e
= simplify_replace_tree (cond
, e0
, e1
);
796 return boolean_true_node
;
797 e
= simplify_replace_tree (cond
, e1
, e0
);
799 return boolean_true_node
;
802 te
= expand_simple_operations (expr
);
804 /* Check whether COND ==> EXPR. */
805 notcond
= invert_truthvalue (cond
);
806 e
= fold_binary (TRUTH_OR_EXPR
, boolean_type_node
, notcond
, te
);
810 /* Check whether COND ==> not EXPR. */
811 e
= fold_binary (TRUTH_AND_EXPR
, boolean_type_node
, cond
, te
);
818 /* Tries to simplify EXPR using the condition COND. Returns the simplified
819 expression (or EXPR unchanged, if no simplification was possible).
820 Wrapper around tree_simplify_using_condition_1 that ensures that chains
821 of simple operations in definitions of ssa names in COND are expanded,
822 so that things like casts or incrementing the value of the bound before
823 the loop do not cause us to fail. */
826 tree_simplify_using_condition (tree cond
, tree expr
)
828 cond
= expand_simple_operations (cond
);
830 return tree_simplify_using_condition_1 (cond
, expr
);
833 /* Tries to simplify EXPR using the conditions on entry to LOOP.
834 Record the conditions used for simplification to CONDS_USED.
835 Returns the simplified expression (or EXPR unchanged, if no
836 simplification was possible).*/
839 simplify_using_initial_conditions (struct loop
*loop
, tree expr
,
846 if (TREE_CODE (expr
) == INTEGER_CST
)
849 for (bb
= loop
->header
;
850 bb
!= ENTRY_BLOCK_PTR
;
851 bb
= get_immediate_dominator (CDI_DOMINATORS
, bb
))
853 if (!single_pred_p (bb
))
855 e
= single_pred_edge (bb
);
857 if (!(e
->flags
& (EDGE_TRUE_VALUE
| EDGE_FALSE_VALUE
)))
860 cond
= COND_EXPR_COND (last_stmt (e
->src
));
861 if (e
->flags
& EDGE_FALSE_VALUE
)
862 cond
= invert_truthvalue (cond
);
863 exp
= tree_simplify_using_condition (cond
, expr
);
866 *conds_used
= fold_build2 (TRUTH_AND_EXPR
,
877 /* Tries to simplify EXPR using the evolutions of the loop invariants
878 in the superloops of LOOP. Returns the simplified expression
879 (or EXPR unchanged, if no simplification was possible). */
882 simplify_using_outer_evolutions (struct loop
*loop
, tree expr
)
884 enum tree_code code
= TREE_CODE (expr
);
888 if (is_gimple_min_invariant (expr
))
891 if (code
== TRUTH_OR_EXPR
892 || code
== TRUTH_AND_EXPR
893 || code
== COND_EXPR
)
897 e0
= simplify_using_outer_evolutions (loop
, TREE_OPERAND (expr
, 0));
898 if (TREE_OPERAND (expr
, 0) != e0
)
901 e1
= simplify_using_outer_evolutions (loop
, TREE_OPERAND (expr
, 1));
902 if (TREE_OPERAND (expr
, 1) != e1
)
905 if (code
== COND_EXPR
)
907 e2
= simplify_using_outer_evolutions (loop
, TREE_OPERAND (expr
, 2));
908 if (TREE_OPERAND (expr
, 2) != e2
)
916 if (code
== COND_EXPR
)
917 expr
= fold_build3 (code
, boolean_type_node
, e0
, e1
, e2
);
919 expr
= fold_build2 (code
, boolean_type_node
, e0
, e1
);
925 e
= instantiate_parameters (loop
, expr
);
926 if (is_gimple_min_invariant (e
))
932 /* Stores description of number of iterations of LOOP derived from
933 EXIT (an exit edge of the LOOP) in NITER. Returns true if some
934 useful information could be derived (and fields of NITER has
935 meaning described in comments at struct tree_niter_desc
936 declaration), false otherwise. If WARN is true and
937 -Wunsafe-loop-optimizations was given, warn if the optimizer is going to use
938 potentially unsafe assumptions. */
941 number_of_iterations_exit (struct loop
*loop
, edge exit
,
942 struct tree_niter_desc
*niter
,
945 tree stmt
, cond
, type
;
950 if (!dominated_by_p (CDI_DOMINATORS
, loop
->latch
, exit
->src
))
953 niter
->assumptions
= boolean_false_node
;
954 stmt
= last_stmt (exit
->src
);
955 if (!stmt
|| TREE_CODE (stmt
) != COND_EXPR
)
958 /* We want the condition for staying inside loop. */
959 cond
= COND_EXPR_COND (stmt
);
960 if (exit
->flags
& EDGE_TRUE_VALUE
)
961 cond
= invert_truthvalue (cond
);
963 code
= TREE_CODE (cond
);
977 op0
= TREE_OPERAND (cond
, 0);
978 op1
= TREE_OPERAND (cond
, 1);
979 type
= TREE_TYPE (op0
);
981 if (TREE_CODE (type
) != INTEGER_TYPE
982 && !POINTER_TYPE_P (type
))
985 if (!simple_iv (loop
, stmt
, op0
, &iv0
, false))
987 if (!simple_iv (loop
, stmt
, op1
, &iv1
, false))
990 niter
->niter
= NULL_TREE
;
992 /* Handle common special cases first, so that we do not need to use
993 generic (and slow) analysis very often. */
994 if (!number_of_iterations_special (type
, &iv0
, code
, &iv1
, niter
))
997 number_of_iterations_cond (type
, &iv0
, code
, &iv1
, niter
);
1005 niter
->assumptions
= simplify_using_outer_evolutions (loop
,
1006 niter
->assumptions
);
1007 niter
->may_be_zero
= simplify_using_outer_evolutions (loop
,
1008 niter
->may_be_zero
);
1009 niter
->niter
= simplify_using_outer_evolutions (loop
, niter
->niter
);
1012 niter
->additional_info
= boolean_true_node
;
1014 = simplify_using_initial_conditions (loop
,
1016 &niter
->additional_info
);
1018 = simplify_using_initial_conditions (loop
,
1020 &niter
->additional_info
);
1022 if (integer_onep (niter
->assumptions
))
1025 /* With -funsafe-loop-optimizations we assume that nothing bad can happen.
1026 But if we can prove that there is overflow or some other source of weird
1027 behavior, ignore the loop even with -funsafe-loop-optimizations. */
1028 if (integer_zerop (niter
->assumptions
))
1031 if (flag_unsafe_loop_optimizations
)
1032 niter
->assumptions
= boolean_true_node
;
1036 const char *wording
;
1037 location_t loc
= EXPR_LOCATION (stmt
);
1039 /* We can provide a more specific warning if one of the operator is
1040 constant and the other advances by +1 or -1. */
1041 if (!zero_p (iv1
.step
)
1042 ? (zero_p (iv0
.step
)
1043 && (integer_onep (iv1
.step
) || integer_all_onesp (iv1
.step
)))
1045 && (integer_onep (iv0
.step
) || integer_all_onesp (iv0
.step
))))
1047 flag_unsafe_loop_optimizations
1048 ? N_("assuming that the loop is not infinite")
1049 : N_("cannot optimize possibly infinite loops");
1052 flag_unsafe_loop_optimizations
1053 ? N_("assuming that the loop counter does not overflow")
1054 : N_("cannot optimize loop, the loop counter may overflow");
1056 if (LOCATION_LINE (loc
) > 0)
1057 warning (OPT_Wunsafe_loop_optimizations
, "%H%s", &loc
, gettext (wording
));
1059 warning (OPT_Wunsafe_loop_optimizations
, "%s", gettext (wording
));
1062 return flag_unsafe_loop_optimizations
;
1065 /* Try to determine the number of iterations of LOOP. If we succeed,
1066 expression giving number of iterations is returned and *EXIT is
1067 set to the edge from that the information is obtained. Otherwise
1068 chrec_dont_know is returned. */
1071 find_loop_niter (struct loop
*loop
, edge
*exit
)
1073 unsigned n_exits
, i
;
1074 edge
*exits
= get_loop_exit_edges (loop
, &n_exits
);
1076 tree niter
= NULL_TREE
, aniter
;
1077 struct tree_niter_desc desc
;
1080 for (i
= 0; i
< n_exits
; i
++)
1083 if (!just_once_each_iteration_p (loop
, ex
->src
))
1086 if (!number_of_iterations_exit (loop
, ex
, &desc
, false))
1089 if (nonzero_p (desc
.may_be_zero
))
1091 /* We exit in the first iteration through this exit.
1092 We won't find anything better. */
1093 niter
= build_int_cst_type (unsigned_type_node
, 0);
1098 if (!zero_p (desc
.may_be_zero
))
1101 aniter
= desc
.niter
;
1105 /* Nothing recorded yet. */
1111 /* Prefer constants, the lower the better. */
1112 if (TREE_CODE (aniter
) != INTEGER_CST
)
1115 if (TREE_CODE (niter
) != INTEGER_CST
)
1122 if (tree_int_cst_lt (aniter
, niter
))
1131 return niter
? niter
: chrec_dont_know
;
1136 Analysis of a number of iterations of a loop by a brute-force evaluation.
1140 /* Bound on the number of iterations we try to evaluate. */
1142 #define MAX_ITERATIONS_TO_TRACK \
1143 ((unsigned) PARAM_VALUE (PARAM_MAX_ITERATIONS_TO_TRACK))
1145 /* Returns the loop phi node of LOOP such that ssa name X is derived from its
1146 result by a chain of operations such that all but exactly one of their
1147 operands are constants. */
1150 chain_of_csts_start (struct loop
*loop
, tree x
)
1152 tree stmt
= SSA_NAME_DEF_STMT (x
);
1154 basic_block bb
= bb_for_stmt (stmt
);
1157 || !flow_bb_inside_loop_p (loop
, bb
))
1160 if (TREE_CODE (stmt
) == PHI_NODE
)
1162 if (bb
== loop
->header
)
1168 if (TREE_CODE (stmt
) != MODIFY_EXPR
)
1171 if (!ZERO_SSA_OPERANDS (stmt
, SSA_OP_ALL_VIRTUALS
))
1173 if (SINGLE_SSA_DEF_OPERAND (stmt
, SSA_OP_DEF
) == NULL_DEF_OPERAND_P
)
1176 use
= SINGLE_SSA_TREE_OPERAND (stmt
, SSA_OP_USE
);
1177 if (use
== NULL_USE_OPERAND_P
)
1180 return chain_of_csts_start (loop
, use
);
1183 /* Determines whether the expression X is derived from a result of a phi node
1184 in header of LOOP such that
1186 * the derivation of X consists only from operations with constants
1187 * the initial value of the phi node is constant
1188 * the value of the phi node in the next iteration can be derived from the
1189 value in the current iteration by a chain of operations with constants.
1191 If such phi node exists, it is returned. If X is a constant, X is returned
1192 unchanged. Otherwise NULL_TREE is returned. */
1195 get_base_for (struct loop
*loop
, tree x
)
1197 tree phi
, init
, next
;
1199 if (is_gimple_min_invariant (x
))
1202 phi
= chain_of_csts_start (loop
, x
);
1206 init
= PHI_ARG_DEF_FROM_EDGE (phi
, loop_preheader_edge (loop
));
1207 next
= PHI_ARG_DEF_FROM_EDGE (phi
, loop_latch_edge (loop
));
1209 if (TREE_CODE (next
) != SSA_NAME
)
1212 if (!is_gimple_min_invariant (init
))
1215 if (chain_of_csts_start (loop
, next
) != phi
)
1221 /* Given an expression X, then
1223 * if BASE is NULL_TREE, X must be a constant and we return X.
1224 * otherwise X is a SSA name, whose value in the considered loop is derived
1225 by a chain of operations with constant from a result of a phi node in
1226 the header of the loop. Then we return value of X when the value of the
1227 result of this phi node is given by the constant BASE. */
1230 get_val_for (tree x
, tree base
)
1239 stmt
= SSA_NAME_DEF_STMT (x
);
1240 if (TREE_CODE (stmt
) == PHI_NODE
)
1243 FOR_EACH_SSA_USE_OPERAND (op
, stmt
, iter
, SSA_OP_USE
)
1245 nx
= USE_FROM_PTR (op
);
1246 val
= get_val_for (nx
, base
);
1248 val
= fold (TREE_OPERAND (stmt
, 1));
1250 /* only iterate loop once. */
1254 /* Should never reach here. */
1258 /* Tries to count the number of iterations of LOOP till it exits by EXIT
1259 by brute force -- i.e. by determining the value of the operands of the
1260 condition at EXIT in first few iterations of the loop (assuming that
1261 these values are constant) and determining the first one in that the
1262 condition is not satisfied. Returns the constant giving the number
1263 of the iterations of LOOP if successful, chrec_dont_know otherwise. */
1266 loop_niter_by_eval (struct loop
*loop
, edge exit
)
1268 tree cond
, cnd
, acnd
;
1269 tree op
[2], val
[2], next
[2], aval
[2], phi
[2];
1273 cond
= last_stmt (exit
->src
);
1274 if (!cond
|| TREE_CODE (cond
) != COND_EXPR
)
1275 return chrec_dont_know
;
1277 cnd
= COND_EXPR_COND (cond
);
1278 if (exit
->flags
& EDGE_TRUE_VALUE
)
1279 cnd
= invert_truthvalue (cnd
);
1281 cmp
= TREE_CODE (cnd
);
1290 for (j
= 0; j
< 2; j
++)
1291 op
[j
] = TREE_OPERAND (cnd
, j
);
1295 return chrec_dont_know
;
1298 for (j
= 0; j
< 2; j
++)
1300 phi
[j
] = get_base_for (loop
, op
[j
]);
1302 return chrec_dont_know
;
1305 for (j
= 0; j
< 2; j
++)
1307 if (TREE_CODE (phi
[j
]) == PHI_NODE
)
1309 val
[j
] = PHI_ARG_DEF_FROM_EDGE (phi
[j
], loop_preheader_edge (loop
));
1310 next
[j
] = PHI_ARG_DEF_FROM_EDGE (phi
[j
], loop_latch_edge (loop
));
1315 next
[j
] = NULL_TREE
;
1320 for (i
= 0; i
< MAX_ITERATIONS_TO_TRACK
; i
++)
1322 for (j
= 0; j
< 2; j
++)
1323 aval
[j
] = get_val_for (op
[j
], val
[j
]);
1325 acnd
= fold_binary (cmp
, boolean_type_node
, aval
[0], aval
[1]);
1326 if (acnd
&& zero_p (acnd
))
1328 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1330 "Proved that loop %d iterates %d times using brute force.\n",
1332 return build_int_cst (unsigned_type_node
, i
);
1335 for (j
= 0; j
< 2; j
++)
1336 val
[j
] = get_val_for (next
[j
], val
[j
]);
1339 return chrec_dont_know
;
1342 /* Finds the exit of the LOOP by that the loop exits after a constant
1343 number of iterations and stores the exit edge to *EXIT. The constant
1344 giving the number of iterations of LOOP is returned. The number of
1345 iterations is determined using loop_niter_by_eval (i.e. by brute force
1346 evaluation). If we are unable to find the exit for that loop_niter_by_eval
1347 determines the number of iterations, chrec_dont_know is returned. */
1350 find_loop_niter_by_eval (struct loop
*loop
, edge
*exit
)
1352 unsigned n_exits
, i
;
1353 edge
*exits
= get_loop_exit_edges (loop
, &n_exits
);
1355 tree niter
= NULL_TREE
, aniter
;
1358 for (i
= 0; i
< n_exits
; i
++)
1361 if (!just_once_each_iteration_p (loop
, ex
->src
))
1364 aniter
= loop_niter_by_eval (loop
, ex
);
1365 if (chrec_contains_undetermined (aniter
))
1369 && !tree_int_cst_lt (aniter
, niter
))
1377 return niter
? niter
: chrec_dont_know
;
1382 Analysis of upper bounds on number of iterations of a loop.
1386 /* Records that AT_STMT is executed at most BOUND times in LOOP. The
1387 additional condition ADDITIONAL is recorded with the bound. */
1390 record_estimate (struct loop
*loop
, tree bound
, tree additional
, tree at_stmt
)
1392 struct nb_iter_bound
*elt
= xmalloc (sizeof (struct nb_iter_bound
));
1394 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1396 fprintf (dump_file
, "Statements after ");
1397 print_generic_expr (dump_file
, at_stmt
, TDF_SLIM
);
1398 fprintf (dump_file
, " are executed at most ");
1399 print_generic_expr (dump_file
, bound
, TDF_SLIM
);
1400 fprintf (dump_file
, " times in loop %d.\n", loop
->num
);
1404 elt
->at_stmt
= at_stmt
;
1405 elt
->additional
= additional
;
1406 elt
->next
= loop
->bounds
;
1410 /* Initialize LOOP->ESTIMATED_NB_ITERATIONS with the lowest safe
1411 approximation of the number of iterations for LOOP. */
1414 compute_estimated_nb_iterations (struct loop
*loop
)
1416 struct nb_iter_bound
*bound
;
1418 for (bound
= loop
->bounds
; bound
; bound
= bound
->next
)
1419 if (TREE_CODE (bound
->bound
) == INTEGER_CST
1420 /* Update only when there is no previous estimation. */
1421 && (chrec_contains_undetermined (loop
->estimated_nb_iterations
)
1422 /* Or when the current estimation is smaller. */
1423 || tree_int_cst_lt (bound
->bound
, loop
->estimated_nb_iterations
)))
1424 loop
->estimated_nb_iterations
= bound
->bound
;
1427 /* The following analyzers are extracting informations on the bounds
1428 of LOOP from the following undefined behaviors:
1430 - data references should not access elements over the statically
1433 - signed variables should not overflow when flag_wrapv is not set.
1437 infer_loop_bounds_from_undefined (struct loop
*loop
)
1440 basic_block bb
, *bbs
;
1441 block_stmt_iterator bsi
;
1443 bbs
= get_loop_body (loop
);
1445 for (i
= 0; i
< loop
->num_nodes
; i
++)
1449 for (bsi
= bsi_start (bb
); !bsi_end_p (bsi
); bsi_next (&bsi
))
1451 tree stmt
= bsi_stmt (bsi
);
1453 switch (TREE_CODE (stmt
))
1457 tree op0
= TREE_OPERAND (stmt
, 0);
1458 tree op1
= TREE_OPERAND (stmt
, 1);
1460 /* For each array access, analyze its access function
1461 and record a bound on the loop iteration domain. */
1462 if (TREE_CODE (op1
) == ARRAY_REF
1463 && !array_ref_contains_indirect_ref (op1
))
1464 estimate_iters_using_array (stmt
, op1
);
1466 if (TREE_CODE (op0
) == ARRAY_REF
1467 && !array_ref_contains_indirect_ref (op0
))
1468 estimate_iters_using_array (stmt
, op0
);
1470 /* For each signed type variable in LOOP, analyze its
1471 scalar evolution and record a bound of the loop
1472 based on the type's ranges. */
1473 else if (!flag_wrapv
&& TREE_CODE (op0
) == SSA_NAME
)
1475 tree init
, step
, diff
, estimation
;
1476 tree scev
= instantiate_parameters
1477 (loop
, analyze_scalar_evolution (loop
, op0
));
1478 tree type
= chrec_type (scev
);
1481 if (chrec_contains_undetermined (scev
)
1482 || TYPE_UNSIGNED (type
))
1485 init
= initial_condition_in_loop_num (scev
, loop
->num
);
1486 step
= evolution_part_in_loop_num (scev
, loop
->num
);
1488 if (init
== NULL_TREE
1489 || step
== NULL_TREE
1490 || TREE_CODE (init
) != INTEGER_CST
1491 || TREE_CODE (step
) != INTEGER_CST
1492 || TYPE_MIN_VALUE (type
) == NULL_TREE
1493 || TYPE_MAX_VALUE (type
) == NULL_TREE
)
1496 utype
= unsigned_type_for (type
);
1497 if (tree_int_cst_lt (step
, integer_zero_node
))
1498 diff
= fold_build2 (MINUS_EXPR
, utype
, init
,
1499 TYPE_MIN_VALUE (type
));
1501 diff
= fold_build2 (MINUS_EXPR
, utype
,
1502 TYPE_MAX_VALUE (type
), init
);
1504 estimation
= fold_build2 (CEIL_DIV_EXPR
, utype
, diff
,
1506 record_estimate (loop
, estimation
, boolean_true_node
, stmt
);
1516 for (args
= TREE_OPERAND (stmt
, 1); args
;
1517 args
= TREE_CHAIN (args
))
1518 if (TREE_CODE (TREE_VALUE (args
)) == ARRAY_REF
1519 && !array_ref_contains_indirect_ref (TREE_VALUE (args
)))
1520 estimate_iters_using_array (stmt
, TREE_VALUE (args
));
1530 if (chrec_contains_undetermined (loop
->estimated_nb_iterations
))
1531 compute_estimated_nb_iterations (loop
);
1537 /* Records estimates on numbers of iterations of LOOP. */
1540 estimate_numbers_of_iterations_loop (struct loop
*loop
)
1544 unsigned i
, n_exits
;
1545 struct tree_niter_desc niter_desc
;
1547 /* Give up if we already have tried to compute an estimation. */
1548 if (loop
->estimated_nb_iterations
== chrec_dont_know
1549 /* Or when we already have an estimation. */
1550 || (loop
->estimated_nb_iterations
!= NULL_TREE
1551 && TREE_CODE (loop
->estimated_nb_iterations
) == INTEGER_CST
))
1554 loop
->estimated_nb_iterations
= chrec_dont_know
;
1556 exits
= get_loop_exit_edges (loop
, &n_exits
);
1557 for (i
= 0; i
< n_exits
; i
++)
1559 if (!number_of_iterations_exit (loop
, exits
[i
], &niter_desc
, false))
1562 niter
= niter_desc
.niter
;
1563 type
= TREE_TYPE (niter
);
1564 if (!zero_p (niter_desc
.may_be_zero
)
1565 && !nonzero_p (niter_desc
.may_be_zero
))
1566 niter
= build3 (COND_EXPR
, type
, niter_desc
.may_be_zero
,
1567 build_int_cst_type (type
, 0),
1569 record_estimate (loop
, niter
,
1570 niter_desc
.additional_info
,
1571 last_stmt (exits
[i
]->src
));
1575 if (chrec_contains_undetermined (loop
->estimated_nb_iterations
))
1576 infer_loop_bounds_from_undefined (loop
);
1579 /* Records estimates on numbers of iterations of LOOPS. */
1582 estimate_numbers_of_iterations (struct loops
*loops
)
1587 for (i
= 1; i
< loops
->num
; i
++)
1589 loop
= loops
->parray
[i
];
1591 estimate_numbers_of_iterations_loop (loop
);
1595 /* If A > B, returns -1. If A == B, returns 0. If A < B, returns 1.
1596 If neither of these relations can be proved, returns 2. */
1599 compare_trees (tree a
, tree b
)
1601 tree typea
= TREE_TYPE (a
), typeb
= TREE_TYPE (b
);
1604 if (TYPE_PRECISION (typea
) > TYPE_PRECISION (typeb
))
1609 a
= fold_convert (type
, a
);
1610 b
= fold_convert (type
, b
);
1612 if (nonzero_p (fold_binary (EQ_EXPR
, boolean_type_node
, a
, b
)))
1614 if (nonzero_p (fold_binary (LT_EXPR
, boolean_type_node
, a
, b
)))
1616 if (nonzero_p (fold_binary (GT_EXPR
, boolean_type_node
, a
, b
)))
1622 /* Returns true if statement S1 dominates statement S2. */
1625 stmt_dominates_stmt_p (tree s1
, tree s2
)
1627 basic_block bb1
= bb_for_stmt (s1
), bb2
= bb_for_stmt (s2
);
1635 block_stmt_iterator bsi
;
1637 for (bsi
= bsi_start (bb1
); bsi_stmt (bsi
) != s2
; bsi_next (&bsi
))
1638 if (bsi_stmt (bsi
) == s1
)
1644 return dominated_by_p (CDI_DOMINATORS
, bb2
, bb1
);
1647 /* Return true when it is possible to prove that the induction
1648 variable does not wrap: vary outside the type specified bounds.
1649 Checks whether BOUND < VALID_NITER that means in the context of iv
1650 conversion that all the iterations in the loop are safe: not
1653 The statement NITER_BOUND->AT_STMT is executed at most
1654 NITER_BOUND->BOUND times in the loop.
1656 NITER_BOUND->ADDITIONAL is the additional condition recorded for
1657 operands of the bound. This is useful in the following case,
1658 created by loop header copying:
1667 If the n > 0 condition is taken into account, the number of iterations of the
1668 loop can be expressed as n - 1. If the type of n is signed, the ADDITIONAL
1669 assumption "n > 0" says us that the value of the number of iterations is at
1670 most MAX_TYPE - 1 (without this assumption, it might overflow). */
1673 proved_non_wrapping_p (tree at_stmt
,
1674 struct nb_iter_bound
*niter_bound
,
1679 tree bound
= niter_bound
->bound
;
1682 if (TYPE_PRECISION (new_type
) > TYPE_PRECISION (TREE_TYPE (bound
)))
1683 bound
= fold_convert (unsigned_type_for (new_type
), bound
);
1685 valid_niter
= fold_convert (TREE_TYPE (bound
), valid_niter
);
1687 /* Give up if BOUND was not folded to an INTEGER_CST, as in PR23434. */
1688 if (TREE_CODE (bound
) != INTEGER_CST
)
1691 /* After the statement niter_bound->at_stmt we know that anything is
1692 executed at most BOUND times. */
1693 if (at_stmt
&& stmt_dominates_stmt_p (niter_bound
->at_stmt
, at_stmt
))
1695 /* Before the statement niter_bound->at_stmt we know that anything
1696 is executed at most BOUND + 1 times. */
1700 cond
= fold_binary (cmp
, boolean_type_node
, valid_niter
, bound
);
1701 if (nonzero_p (cond
))
1704 cond
= build2 (cmp
, boolean_type_node
, valid_niter
, bound
);
1705 /* Try taking additional conditions into account. */
1706 cond
= fold_binary (TRUTH_OR_EXPR
, boolean_type_node
,
1707 invert_truthvalue (niter_bound
->additional
),
1710 if (nonzero_p (cond
))
1716 /* Checks whether it is correct to count the induction variable BASE +
1717 STEP * I at AT_STMT in a wider type NEW_TYPE, using the bounds on
1718 numbers of iterations of a LOOP. If it is possible, return the
1719 value of step of the induction variable in the NEW_TYPE, otherwise
1720 return NULL_TREE. */
1723 convert_step_widening (struct loop
*loop
, tree new_type
, tree base
, tree step
,
1726 struct nb_iter_bound
*bound
;
1727 tree base_in_new_type
, base_plus_step_in_new_type
, step_in_new_type
;
1728 tree delta
, step_abs
;
1729 tree unsigned_type
, valid_niter
;
1731 /* Compute the new step. For example, {(uchar) 100, +, (uchar) 240}
1732 is converted to {(uint) 100, +, (uint) 0xfffffff0} in order to
1733 keep the values of the induction variable unchanged: 100, 84, 68,
1736 Another example is: (uint) {(uchar)100, +, (uchar)3} is converted
1737 to {(uint)100, +, (uint)3}.
1739 Before returning the new step, verify that the number of
1740 iterations is less than DELTA / STEP_ABS (i.e. in the previous
1741 example (256 - 100) / 3) such that the iv does not wrap (in which
1742 case the operations are too difficult to be represented and
1743 handled: the values of the iv should be taken modulo 256 in the
1744 wider type; this is not implemented). */
1745 base_in_new_type
= fold_convert (new_type
, base
);
1746 base_plus_step_in_new_type
=
1747 fold_convert (new_type
,
1748 fold_build2 (PLUS_EXPR
, TREE_TYPE (base
), base
, step
));
1749 step_in_new_type
= fold_build2 (MINUS_EXPR
, new_type
,
1750 base_plus_step_in_new_type
,
1753 if (TREE_CODE (step_in_new_type
) != INTEGER_CST
)
1756 switch (compare_trees (base_plus_step_in_new_type
, base_in_new_type
))
1760 tree extreme
= upper_bound_in_type (new_type
, TREE_TYPE (base
));
1761 delta
= fold_build2 (MINUS_EXPR
, new_type
, extreme
,
1763 step_abs
= step_in_new_type
;
1769 tree extreme
= lower_bound_in_type (new_type
, TREE_TYPE (base
));
1770 delta
= fold_build2 (MINUS_EXPR
, new_type
, base_in_new_type
,
1772 step_abs
= fold_build1 (NEGATE_EXPR
, new_type
, step_in_new_type
);
1777 return step_in_new_type
;
1783 unsigned_type
= unsigned_type_for (new_type
);
1784 delta
= fold_convert (unsigned_type
, delta
);
1785 step_abs
= fold_convert (unsigned_type
, step_abs
);
1786 valid_niter
= fold_build2 (FLOOR_DIV_EXPR
, unsigned_type
,
1789 estimate_numbers_of_iterations_loop (loop
);
1790 for (bound
= loop
->bounds
; bound
; bound
= bound
->next
)
1791 if (proved_non_wrapping_p (at_stmt
, bound
, new_type
, valid_niter
))
1792 return step_in_new_type
;
1794 /* Fail when the loop has no bound estimations, or when no bound can
1795 be used for verifying the conversion. */
1799 /* Returns true when VAR is used in pointer arithmetics. DEPTH is
1800 used for limiting the search. */
1803 used_in_pointer_arithmetic_p (tree var
, int depth
)
1805 use_operand_p use_p
;
1806 imm_use_iterator iter
;
1809 || TREE_CODE (var
) != SSA_NAME
1810 || !has_single_use (var
))
1813 FOR_EACH_IMM_USE_FAST (use_p
, iter
, var
)
1815 tree stmt
= USE_STMT (use_p
);
1817 if (stmt
&& TREE_CODE (stmt
) == MODIFY_EXPR
)
1819 tree rhs
= TREE_OPERAND (stmt
, 1);
1821 if (TREE_CODE (rhs
) == NOP_EXPR
1822 || TREE_CODE (rhs
) == CONVERT_EXPR
)
1824 if (POINTER_TYPE_P (TREE_TYPE (rhs
)))
1829 return used_in_pointer_arithmetic_p (TREE_OPERAND (stmt
, 0),
1836 /* Return false only when the induction variable BASE + STEP * I is
1837 known to not overflow: i.e. when the number of iterations is small
1838 enough with respect to the step and initial condition in order to
1839 keep the evolution confined in TYPEs bounds. Return true when the
1840 iv is known to overflow or when the property is not computable.
1842 Initialize INIT_IS_MAX to true when the evolution goes from
1843 INIT_IS_MAX to LOWER_BOUND_IN_TYPE, false in the contrary case.
1844 When this property cannot be determined, UNKNOWN_MAX is set to
1848 scev_probably_wraps_p (tree type
, tree base
, tree step
,
1849 tree at_stmt
, struct loop
*loop
,
1850 bool *init_is_max
, bool *unknown_max
)
1852 struct nb_iter_bound
*bound
;
1853 tree delta
, step_abs
;
1854 tree unsigned_type
, valid_niter
;
1855 tree base_plus_step
, bpsps
;
1858 /* FIXME: The following code will not be used anymore once
1859 http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html is
1862 If AT_STMT is a cast to unsigned that is later used for
1863 referencing a memory location, it is followed by a pointer
1864 conversion just after. Because pointers do not wrap, the
1865 sequences that reference the memory do not wrap either. In the
1866 following example, sequences corresponding to D_13 and to D_14
1867 can be proved to not wrap because they are used for computing a
1870 D.1621_13 = (long unsigned intD.4) D.1620_12;
1871 D.1622_14 = D.1621_13 * 8;
1872 D.1623_15 = (doubleD.29 *) D.1622_14;
1874 if (at_stmt
&& TREE_CODE (at_stmt
) == MODIFY_EXPR
)
1876 tree op0
= TREE_OPERAND (at_stmt
, 0);
1877 tree op1
= TREE_OPERAND (at_stmt
, 1);
1878 tree type_op1
= TREE_TYPE (op1
);
1880 if ((TYPE_UNSIGNED (type_op1
)
1881 && used_in_pointer_arithmetic_p (op0
, 2))
1882 || POINTER_TYPE_P (type_op1
))
1884 *unknown_max
= true;
1889 if (chrec_contains_undetermined (base
)
1890 || chrec_contains_undetermined (step
)
1891 || TREE_CODE (base
) == REAL_CST
1892 || TREE_CODE (step
) == REAL_CST
)
1894 *unknown_max
= true;
1898 *unknown_max
= false;
1899 base_plus_step
= fold_build2 (PLUS_EXPR
, type
, base
, step
);
1900 bpsps
= fold_build2 (PLUS_EXPR
, type
, base_plus_step
, step
);
1901 cps
= compare_trees (base_plus_step
, base
);
1902 cpsps
= compare_trees (bpsps
, base_plus_step
);
1904 /* Check that the sequence is not wrapping in the first step: it
1905 should have the same monotonicity for the first two steps. See
1914 tree extreme
= upper_bound_in_type (type
, TREE_TYPE (base
));
1915 delta
= fold_build2 (MINUS_EXPR
, type
, extreme
, base
);
1917 *init_is_max
= false;
1923 tree extreme
= lower_bound_in_type (type
, TREE_TYPE (base
));
1924 delta
= fold_build2 (MINUS_EXPR
, type
, base
, extreme
);
1925 step_abs
= fold_build1 (NEGATE_EXPR
, type
, step
);
1926 *init_is_max
= true;
1931 /* This means step is equal to 0. This should not happen. It
1932 could happen in convert step, but not here. Safely answer
1933 don't know as in the default case. */
1936 *unknown_max
= true;
1940 /* If AT_STMT represents a cast operation, we may not be able to
1941 take advantage of the undefinedness of signed type evolutions.
1943 implement-c.texi states: "For conversion to a type of width
1944 N, the value is reduced modulo 2^N to be within range of the
1947 See PR 21959 for a test case. Essentially, given a cast
1952 sc = (signed char) uc;
1956 where uc and sc have the scev {0, +, 1}, we would consider uc to
1957 wrap around, but not sc, because it is of a signed type. This
1958 causes VRP to erroneously fold the predicate above because it
1959 thinks that sc cannot be negative. */
1960 if (at_stmt
&& TREE_CODE (at_stmt
) == MODIFY_EXPR
)
1962 tree rhs
= TREE_OPERAND (at_stmt
, 1);
1963 tree outer_t
= TREE_TYPE (rhs
);
1965 if (!TYPE_UNSIGNED (outer_t
)
1966 && (TREE_CODE (rhs
) == NOP_EXPR
|| TREE_CODE (rhs
) == CONVERT_EXPR
))
1968 tree inner_t
= TREE_TYPE (TREE_OPERAND (rhs
, 0));
1970 /* If the inner type is unsigned and its size and/or
1971 precision are smaller to that of the outer type, then the
1972 expression may wrap around. */
1973 if (TYPE_UNSIGNED (inner_t
)
1974 && (TYPE_SIZE (inner_t
) <= TYPE_SIZE (outer_t
)
1975 || TYPE_PRECISION (inner_t
) <= TYPE_PRECISION (outer_t
)))
1977 *unknown_max
= true;
1983 /* After having set INIT_IS_MAX, we can return false: when not using
1984 wrapping arithmetic, signed types don't wrap. */
1985 if (!flag_wrapv
&& !TYPE_UNSIGNED (type
))
1988 unsigned_type
= unsigned_type_for (type
);
1989 delta
= fold_convert (unsigned_type
, delta
);
1990 step_abs
= fold_convert (unsigned_type
, step_abs
);
1991 valid_niter
= fold_build2 (FLOOR_DIV_EXPR
, unsigned_type
, delta
, step_abs
);
1993 estimate_numbers_of_iterations_loop (loop
);
1994 for (bound
= loop
->bounds
; bound
; bound
= bound
->next
)
1995 if (proved_non_wrapping_p (at_stmt
, bound
, type
, valid_niter
))
1998 /* At this point we still don't have a proof that the iv does not
1999 overflow: give up. */
2000 *unknown_max
= true;
2004 /* Return the conversion to NEW_TYPE of the STEP of an induction
2005 variable BASE + STEP * I at AT_STMT. When it fails, return
2009 convert_step (struct loop
*loop
, tree new_type
, tree base
, tree step
,
2014 if (chrec_contains_undetermined (base
)
2015 || chrec_contains_undetermined (step
))
2018 base_type
= TREE_TYPE (base
);
2020 /* When not using wrapping arithmetic, signed types don't wrap. */
2021 if (!flag_wrapv
&& !TYPE_UNSIGNED (base_type
))
2022 return fold_convert (new_type
, step
);
2024 if (TYPE_PRECISION (new_type
) > TYPE_PRECISION (base_type
))
2025 return convert_step_widening (loop
, new_type
, base
, step
, at_stmt
);
2027 return fold_convert (new_type
, step
);
2030 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
2033 free_numbers_of_iterations_estimates_loop (struct loop
*loop
)
2035 struct nb_iter_bound
*bound
, *next
;
2037 loop
->nb_iterations
= NULL
;
2038 loop
->estimated_nb_iterations
= NULL
;
2039 for (bound
= loop
->bounds
; bound
; bound
= next
)
2045 loop
->bounds
= NULL
;
2048 /* Frees the information on upper bounds on numbers of iterations of LOOPS. */
2051 free_numbers_of_iterations_estimates (struct loops
*loops
)
2056 for (i
= 1; i
< loops
->num
; i
++)
2058 loop
= loops
->parray
[i
];
2060 free_numbers_of_iterations_estimates_loop (loop
);
2064 /* Substitute value VAL for ssa name NAME inside expressions held
2068 substitute_in_loop_info (struct loop
*loop
, tree name
, tree val
)
2070 struct nb_iter_bound
*bound
;
2072 loop
->nb_iterations
= simplify_replace_tree (loop
->nb_iterations
, name
, val
);
2073 loop
->estimated_nb_iterations
2074 = simplify_replace_tree (loop
->estimated_nb_iterations
, name
, val
);
2075 for (bound
= loop
->bounds
; bound
; bound
= bound
->next
)
2077 bound
->bound
= simplify_replace_tree (bound
->bound
, name
, val
);
2078 bound
->additional
= simplify_replace_tree (bound
->additional
, name
, val
);