Mark as release
[official-gcc.git] / gcc / tree-ssa-loop-niter.c
blob897b8f518951f5e2dd09db315e51593b36a307a3
1 /* Functions to determine/estimate number of iterations of a loop.
2 Copyright (C) 2004-2014 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 3, or (at your option) any
9 later version.
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
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "tm.h"
24 #include "tree.h"
25 #include "calls.h"
26 #include "expr.h"
27 #include "tm_p.h"
28 #include "basic-block.h"
29 #include "gimple-pretty-print.h"
30 #include "intl.h"
31 #include "pointer-set.h"
32 #include "tree-ssa-alias.h"
33 #include "internal-fn.h"
34 #include "gimple-expr.h"
35 #include "is-a.h"
36 #include "gimple.h"
37 #include "gimplify.h"
38 #include "gimple-iterator.h"
39 #include "gimple-ssa.h"
40 #include "tree-cfg.h"
41 #include "tree-phinodes.h"
42 #include "ssa-iterators.h"
43 #include "tree-ssa-loop-ivopts.h"
44 #include "tree-ssa-loop-niter.h"
45 #include "tree-ssa-loop.h"
46 #include "dumpfile.h"
47 #include "cfgloop.h"
48 #include "tree-chrec.h"
49 #include "tree-scalar-evolution.h"
50 #include "tree-data-ref.h"
51 #include "params.h"
52 #include "flags.h"
53 #include "diagnostic-core.h"
54 #include "tree-inline.h"
55 #include "tree-pass.h"
56 #include "stringpool.h"
57 #include "tree-ssanames.h"
60 #define SWAP(X, Y) do { affine_iv *tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
62 /* The maximum number of dominator BBs we search for conditions
63 of loop header copies we use for simplifying a conditional
64 expression. */
65 #define MAX_DOMINATORS_TO_WALK 8
69 Analysis of number of iterations of an affine exit test.
73 /* Bounds on some value, BELOW <= X <= UP. */
75 typedef struct
77 mpz_t below, up;
78 } bounds;
81 /* Splits expression EXPR to a variable part VAR and constant OFFSET. */
83 static void
84 split_to_var_and_offset (tree expr, tree *var, mpz_t offset)
86 tree type = TREE_TYPE (expr);
87 tree op0, op1;
88 double_int off;
89 bool negate = false;
91 *var = expr;
92 mpz_set_ui (offset, 0);
94 switch (TREE_CODE (expr))
96 case MINUS_EXPR:
97 negate = true;
98 /* Fallthru. */
100 case PLUS_EXPR:
101 case POINTER_PLUS_EXPR:
102 op0 = TREE_OPERAND (expr, 0);
103 op1 = TREE_OPERAND (expr, 1);
105 if (TREE_CODE (op1) != INTEGER_CST)
106 break;
108 *var = op0;
109 /* Always sign extend the offset. */
110 off = tree_to_double_int (op1);
111 off = off.sext (TYPE_PRECISION (type));
112 mpz_set_double_int (offset, off, false);
113 if (negate)
114 mpz_neg (offset, offset);
115 break;
117 case INTEGER_CST:
118 *var = build_int_cst_type (type, 0);
119 off = tree_to_double_int (expr);
120 mpz_set_double_int (offset, off, TYPE_UNSIGNED (type));
121 break;
123 default:
124 break;
128 /* Stores estimate on the minimum/maximum value of the expression VAR + OFF
129 in TYPE to MIN and MAX. */
131 static void
132 determine_value_range (struct loop *loop, tree type, tree var, mpz_t off,
133 mpz_t min, mpz_t max)
135 double_int minv, maxv;
136 enum value_range_type rtype = VR_VARYING;
138 /* If the expression is a constant, we know its value exactly. */
139 if (integer_zerop (var))
141 mpz_set (min, off);
142 mpz_set (max, off);
143 return;
146 get_type_static_bounds (type, min, max);
148 /* See if we have some range info from VRP. */
149 if (TREE_CODE (var) == SSA_NAME && INTEGRAL_TYPE_P (type))
151 edge e = loop_preheader_edge (loop);
152 gimple_stmt_iterator gsi;
154 /* Either for VAR itself... */
155 rtype = get_range_info (var, &minv, &maxv);
156 /* Or for PHI results in loop->header where VAR is used as
157 PHI argument from the loop preheader edge. */
158 for (gsi = gsi_start_phis (loop->header); !gsi_end_p (gsi); gsi_next (&gsi))
160 gimple phi = gsi_stmt (gsi);
161 double_int minc, maxc;
162 if (PHI_ARG_DEF_FROM_EDGE (phi, e) == var
163 && (get_range_info (gimple_phi_result (phi), &minc, &maxc)
164 == VR_RANGE))
166 if (rtype != VR_RANGE)
168 rtype = VR_RANGE;
169 minv = minc;
170 maxv = maxc;
172 else
174 minv = minv.max (minc, TYPE_UNSIGNED (type));
175 maxv = maxv.min (maxc, TYPE_UNSIGNED (type));
176 /* If the PHI result range are inconsistent with
177 the VAR range, give up on looking at the PHI
178 results. This can happen if VR_UNDEFINED is
179 involved. */
180 if (minv.cmp (maxv, TYPE_UNSIGNED (type)) > 0)
182 rtype = get_range_info (var, &minv, &maxv);
183 break;
188 if (rtype == VR_RANGE)
190 mpz_t minm, maxm;
191 gcc_assert (minv.cmp (maxv, TYPE_UNSIGNED (type)) <= 0);
192 mpz_init (minm);
193 mpz_init (maxm);
194 mpz_set_double_int (minm, minv, TYPE_UNSIGNED (type));
195 mpz_set_double_int (maxm, maxv, TYPE_UNSIGNED (type));
196 mpz_add (minm, minm, off);
197 mpz_add (maxm, maxm, off);
198 /* If the computation may not wrap or off is zero, then this
199 is always fine. If off is negative and minv + off isn't
200 smaller than type's minimum, or off is positive and
201 maxv + off isn't bigger than type's maximum, use the more
202 precise range too. */
203 if (nowrap_type_p (type)
204 || mpz_sgn (off) == 0
205 || (mpz_sgn (off) < 0 && mpz_cmp (minm, min) >= 0)
206 || (mpz_sgn (off) > 0 && mpz_cmp (maxm, max) <= 0))
208 mpz_set (min, minm);
209 mpz_set (max, maxm);
210 mpz_clear (minm);
211 mpz_clear (maxm);
212 return;
214 mpz_clear (minm);
215 mpz_clear (maxm);
219 /* If the computation may wrap, we know nothing about the value, except for
220 the range of the type. */
221 if (!nowrap_type_p (type))
222 return;
224 /* Since the addition of OFF does not wrap, if OFF is positive, then we may
225 add it to MIN, otherwise to MAX. */
226 if (mpz_sgn (off) < 0)
227 mpz_add (max, max, off);
228 else
229 mpz_add (min, min, off);
232 /* Stores the bounds on the difference of the values of the expressions
233 (var + X) and (var + Y), computed in TYPE, to BNDS. */
235 static void
236 bound_difference_of_offsetted_base (tree type, mpz_t x, mpz_t y,
237 bounds *bnds)
239 int rel = mpz_cmp (x, y);
240 bool may_wrap = !nowrap_type_p (type);
241 mpz_t m;
243 /* If X == Y, then the expressions are always equal.
244 If X > Y, there are the following possibilities:
245 a) neither of var + X and var + Y overflow or underflow, or both of
246 them do. Then their difference is X - Y.
247 b) var + X overflows, and var + Y does not. Then the values of the
248 expressions are var + X - M and var + Y, where M is the range of
249 the type, and their difference is X - Y - M.
250 c) var + Y underflows and var + X does not. Their difference again
251 is M - X + Y.
252 Therefore, if the arithmetics in type does not overflow, then the
253 bounds are (X - Y, X - Y), otherwise they are (X - Y - M, X - Y)
254 Similarly, if X < Y, the bounds are either (X - Y, X - Y) or
255 (X - Y, X - Y + M). */
257 if (rel == 0)
259 mpz_set_ui (bnds->below, 0);
260 mpz_set_ui (bnds->up, 0);
261 return;
264 mpz_init (m);
265 mpz_set_double_int (m, double_int::mask (TYPE_PRECISION (type)), true);
266 mpz_add_ui (m, m, 1);
267 mpz_sub (bnds->up, x, y);
268 mpz_set (bnds->below, bnds->up);
270 if (may_wrap)
272 if (rel > 0)
273 mpz_sub (bnds->below, bnds->below, m);
274 else
275 mpz_add (bnds->up, bnds->up, m);
278 mpz_clear (m);
281 /* From condition C0 CMP C1 derives information regarding the
282 difference of values of VARX + OFFX and VARY + OFFY, computed in TYPE,
283 and stores it to BNDS. */
285 static void
286 refine_bounds_using_guard (tree type, tree varx, mpz_t offx,
287 tree vary, mpz_t offy,
288 tree c0, enum tree_code cmp, tree c1,
289 bounds *bnds)
291 tree varc0, varc1, tmp, ctype;
292 mpz_t offc0, offc1, loffx, loffy, bnd;
293 bool lbound = false;
294 bool no_wrap = nowrap_type_p (type);
295 bool x_ok, y_ok;
297 switch (cmp)
299 case LT_EXPR:
300 case LE_EXPR:
301 case GT_EXPR:
302 case GE_EXPR:
303 STRIP_SIGN_NOPS (c0);
304 STRIP_SIGN_NOPS (c1);
305 ctype = TREE_TYPE (c0);
306 if (!useless_type_conversion_p (ctype, type))
307 return;
309 break;
311 case EQ_EXPR:
312 /* We could derive quite precise information from EQ_EXPR, however, such
313 a guard is unlikely to appear, so we do not bother with handling
314 it. */
315 return;
317 case NE_EXPR:
318 /* NE_EXPR comparisons do not contain much of useful information, except for
319 special case of comparing with the bounds of the type. */
320 if (TREE_CODE (c1) != INTEGER_CST
321 || !INTEGRAL_TYPE_P (type))
322 return;
324 /* Ensure that the condition speaks about an expression in the same type
325 as X and Y. */
326 ctype = TREE_TYPE (c0);
327 if (TYPE_PRECISION (ctype) != TYPE_PRECISION (type))
328 return;
329 c0 = fold_convert (type, c0);
330 c1 = fold_convert (type, c1);
332 if (TYPE_MIN_VALUE (type)
333 && operand_equal_p (c1, TYPE_MIN_VALUE (type), 0))
335 cmp = GT_EXPR;
336 break;
338 if (TYPE_MAX_VALUE (type)
339 && operand_equal_p (c1, TYPE_MAX_VALUE (type), 0))
341 cmp = LT_EXPR;
342 break;
345 return;
346 default:
347 return;
350 mpz_init (offc0);
351 mpz_init (offc1);
352 split_to_var_and_offset (expand_simple_operations (c0), &varc0, offc0);
353 split_to_var_and_offset (expand_simple_operations (c1), &varc1, offc1);
355 /* We are only interested in comparisons of expressions based on VARX and
356 VARY. TODO -- we might also be able to derive some bounds from
357 expressions containing just one of the variables. */
359 if (operand_equal_p (varx, varc1, 0))
361 tmp = varc0; varc0 = varc1; varc1 = tmp;
362 mpz_swap (offc0, offc1);
363 cmp = swap_tree_comparison (cmp);
366 if (!operand_equal_p (varx, varc0, 0)
367 || !operand_equal_p (vary, varc1, 0))
368 goto end;
370 mpz_init_set (loffx, offx);
371 mpz_init_set (loffy, offy);
373 if (cmp == GT_EXPR || cmp == GE_EXPR)
375 tmp = varx; varx = vary; vary = tmp;
376 mpz_swap (offc0, offc1);
377 mpz_swap (loffx, loffy);
378 cmp = swap_tree_comparison (cmp);
379 lbound = true;
382 /* If there is no overflow, the condition implies that
384 (VARX + OFFX) cmp (VARY + OFFY) + (OFFX - OFFY + OFFC1 - OFFC0).
386 The overflows and underflows may complicate things a bit; each
387 overflow decreases the appropriate offset by M, and underflow
388 increases it by M. The above inequality would not necessarily be
389 true if
391 -- VARX + OFFX underflows and VARX + OFFC0 does not, or
392 VARX + OFFC0 overflows, but VARX + OFFX does not.
393 This may only happen if OFFX < OFFC0.
394 -- VARY + OFFY overflows and VARY + OFFC1 does not, or
395 VARY + OFFC1 underflows and VARY + OFFY does not.
396 This may only happen if OFFY > OFFC1. */
398 if (no_wrap)
400 x_ok = true;
401 y_ok = true;
403 else
405 x_ok = (integer_zerop (varx)
406 || mpz_cmp (loffx, offc0) >= 0);
407 y_ok = (integer_zerop (vary)
408 || mpz_cmp (loffy, offc1) <= 0);
411 if (x_ok && y_ok)
413 mpz_init (bnd);
414 mpz_sub (bnd, loffx, loffy);
415 mpz_add (bnd, bnd, offc1);
416 mpz_sub (bnd, bnd, offc0);
418 if (cmp == LT_EXPR)
419 mpz_sub_ui (bnd, bnd, 1);
421 if (lbound)
423 mpz_neg (bnd, bnd);
424 if (mpz_cmp (bnds->below, bnd) < 0)
425 mpz_set (bnds->below, bnd);
427 else
429 if (mpz_cmp (bnd, bnds->up) < 0)
430 mpz_set (bnds->up, bnd);
432 mpz_clear (bnd);
435 mpz_clear (loffx);
436 mpz_clear (loffy);
437 end:
438 mpz_clear (offc0);
439 mpz_clear (offc1);
442 /* Stores the bounds on the value of the expression X - Y in LOOP to BNDS.
443 The subtraction is considered to be performed in arbitrary precision,
444 without overflows.
446 We do not attempt to be too clever regarding the value ranges of X and
447 Y; most of the time, they are just integers or ssa names offsetted by
448 integer. However, we try to use the information contained in the
449 comparisons before the loop (usually created by loop header copying). */
451 static void
452 bound_difference (struct loop *loop, tree x, tree y, bounds *bnds)
454 tree type = TREE_TYPE (x);
455 tree varx, vary;
456 mpz_t offx, offy;
457 mpz_t minx, maxx, miny, maxy;
458 int cnt = 0;
459 edge e;
460 basic_block bb;
461 tree c0, c1;
462 gimple cond;
463 enum tree_code cmp;
465 /* Get rid of unnecessary casts, but preserve the value of
466 the expressions. */
467 STRIP_SIGN_NOPS (x);
468 STRIP_SIGN_NOPS (y);
470 mpz_init (bnds->below);
471 mpz_init (bnds->up);
472 mpz_init (offx);
473 mpz_init (offy);
474 split_to_var_and_offset (x, &varx, offx);
475 split_to_var_and_offset (y, &vary, offy);
477 if (!integer_zerop (varx)
478 && operand_equal_p (varx, vary, 0))
480 /* Special case VARX == VARY -- we just need to compare the
481 offsets. The matters are a bit more complicated in the
482 case addition of offsets may wrap. */
483 bound_difference_of_offsetted_base (type, offx, offy, bnds);
485 else
487 /* Otherwise, use the value ranges to determine the initial
488 estimates on below and up. */
489 mpz_init (minx);
490 mpz_init (maxx);
491 mpz_init (miny);
492 mpz_init (maxy);
493 determine_value_range (loop, type, varx, offx, minx, maxx);
494 determine_value_range (loop, type, vary, offy, miny, maxy);
496 mpz_sub (bnds->below, minx, maxy);
497 mpz_sub (bnds->up, maxx, miny);
498 mpz_clear (minx);
499 mpz_clear (maxx);
500 mpz_clear (miny);
501 mpz_clear (maxy);
504 /* If both X and Y are constants, we cannot get any more precise. */
505 if (integer_zerop (varx) && integer_zerop (vary))
506 goto end;
508 /* Now walk the dominators of the loop header and use the entry
509 guards to refine the estimates. */
510 for (bb = loop->header;
511 bb != ENTRY_BLOCK_PTR_FOR_FN (cfun) && cnt < MAX_DOMINATORS_TO_WALK;
512 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
514 if (!single_pred_p (bb))
515 continue;
516 e = single_pred_edge (bb);
518 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
519 continue;
521 cond = last_stmt (e->src);
522 c0 = gimple_cond_lhs (cond);
523 cmp = gimple_cond_code (cond);
524 c1 = gimple_cond_rhs (cond);
526 if (e->flags & EDGE_FALSE_VALUE)
527 cmp = invert_tree_comparison (cmp, false);
529 refine_bounds_using_guard (type, varx, offx, vary, offy,
530 c0, cmp, c1, bnds);
531 ++cnt;
534 end:
535 mpz_clear (offx);
536 mpz_clear (offy);
539 /* Update the bounds in BNDS that restrict the value of X to the bounds
540 that restrict the value of X + DELTA. X can be obtained as a
541 difference of two values in TYPE. */
543 static void
544 bounds_add (bounds *bnds, double_int delta, tree type)
546 mpz_t mdelta, max;
548 mpz_init (mdelta);
549 mpz_set_double_int (mdelta, delta, false);
551 mpz_init (max);
552 mpz_set_double_int (max, double_int::mask (TYPE_PRECISION (type)), true);
554 mpz_add (bnds->up, bnds->up, mdelta);
555 mpz_add (bnds->below, bnds->below, mdelta);
557 if (mpz_cmp (bnds->up, max) > 0)
558 mpz_set (bnds->up, max);
560 mpz_neg (max, max);
561 if (mpz_cmp (bnds->below, max) < 0)
562 mpz_set (bnds->below, max);
564 mpz_clear (mdelta);
565 mpz_clear (max);
568 /* Update the bounds in BNDS that restrict the value of X to the bounds
569 that restrict the value of -X. */
571 static void
572 bounds_negate (bounds *bnds)
574 mpz_t tmp;
576 mpz_init_set (tmp, bnds->up);
577 mpz_neg (bnds->up, bnds->below);
578 mpz_neg (bnds->below, tmp);
579 mpz_clear (tmp);
582 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
584 static tree
585 inverse (tree x, tree mask)
587 tree type = TREE_TYPE (x);
588 tree rslt;
589 unsigned ctr = tree_floor_log2 (mask);
591 if (TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
593 unsigned HOST_WIDE_INT ix;
594 unsigned HOST_WIDE_INT imask;
595 unsigned HOST_WIDE_INT irslt = 1;
597 gcc_assert (cst_and_fits_in_hwi (x));
598 gcc_assert (cst_and_fits_in_hwi (mask));
600 ix = int_cst_value (x);
601 imask = int_cst_value (mask);
603 for (; ctr; ctr--)
605 irslt *= ix;
606 ix *= ix;
608 irslt &= imask;
610 rslt = build_int_cst_type (type, irslt);
612 else
614 rslt = build_int_cst (type, 1);
615 for (; ctr; ctr--)
617 rslt = int_const_binop (MULT_EXPR, rslt, x);
618 x = int_const_binop (MULT_EXPR, x, x);
620 rslt = int_const_binop (BIT_AND_EXPR, rslt, mask);
623 return rslt;
626 /* Derives the upper bound BND on the number of executions of loop with exit
627 condition S * i <> C. If NO_OVERFLOW is true, then the control variable of
628 the loop does not overflow. EXIT_MUST_BE_TAKEN is true if we are guaranteed
629 that the loop ends through this exit, i.e., the induction variable ever
630 reaches the value of C.
632 The value C is equal to final - base, where final and base are the final and
633 initial value of the actual induction variable in the analysed loop. BNDS
634 bounds the value of this difference when computed in signed type with
635 unbounded range, while the computation of C is performed in an unsigned
636 type with the range matching the range of the type of the induction variable.
637 In particular, BNDS.up contains an upper bound on C in the following cases:
638 -- if the iv must reach its final value without overflow, i.e., if
639 NO_OVERFLOW && EXIT_MUST_BE_TAKEN is true, or
640 -- if final >= base, which we know to hold when BNDS.below >= 0. */
642 static void
643 number_of_iterations_ne_max (mpz_t bnd, bool no_overflow, tree c, tree s,
644 bounds *bnds, bool exit_must_be_taken)
646 double_int max;
647 mpz_t d;
648 tree type = TREE_TYPE (c);
649 bool bnds_u_valid = ((no_overflow && exit_must_be_taken)
650 || mpz_sgn (bnds->below) >= 0);
652 if (integer_onep (s)
653 || (TREE_CODE (c) == INTEGER_CST
654 && TREE_CODE (s) == INTEGER_CST
655 && tree_to_double_int (c).mod (tree_to_double_int (s),
656 TYPE_UNSIGNED (type),
657 EXACT_DIV_EXPR).is_zero ())
658 || (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (c))
659 && multiple_of_p (type, c, s)))
661 /* If C is an exact multiple of S, then its value will be reached before
662 the induction variable overflows (unless the loop is exited in some
663 other way before). Note that the actual induction variable in the
664 loop (which ranges from base to final instead of from 0 to C) may
665 overflow, in which case BNDS.up will not be giving a correct upper
666 bound on C; thus, BNDS_U_VALID had to be computed in advance. */
667 no_overflow = true;
668 exit_must_be_taken = true;
671 /* If the induction variable can overflow, the number of iterations is at
672 most the period of the control variable (or infinite, but in that case
673 the whole # of iterations analysis will fail). */
674 if (!no_overflow)
676 max = double_int::mask (TYPE_PRECISION (type)
677 - tree_to_uhwi (num_ending_zeros (s)));
678 mpz_set_double_int (bnd, max, true);
679 return;
682 /* Now we know that the induction variable does not overflow, so the loop
683 iterates at most (range of type / S) times. */
684 mpz_set_double_int (bnd, double_int::mask (TYPE_PRECISION (type)), true);
686 /* If the induction variable is guaranteed to reach the value of C before
687 overflow, ... */
688 if (exit_must_be_taken)
690 /* ... then we can strengthen this to C / S, and possibly we can use
691 the upper bound on C given by BNDS. */
692 if (TREE_CODE (c) == INTEGER_CST)
693 mpz_set_double_int (bnd, tree_to_double_int (c), true);
694 else if (bnds_u_valid)
695 mpz_set (bnd, bnds->up);
698 mpz_init (d);
699 mpz_set_double_int (d, tree_to_double_int (s), true);
700 mpz_fdiv_q (bnd, bnd, d);
701 mpz_clear (d);
704 /* Determines number of iterations of loop whose ending condition
705 is IV <> FINAL. TYPE is the type of the iv. The number of
706 iterations is stored to NITER. EXIT_MUST_BE_TAKEN is true if
707 we know that the exit must be taken eventually, i.e., that the IV
708 ever reaches the value FINAL (we derived this earlier, and possibly set
709 NITER->assumptions to make sure this is the case). BNDS contains the
710 bounds on the difference FINAL - IV->base. */
712 static bool
713 number_of_iterations_ne (tree type, affine_iv *iv, tree final,
714 struct tree_niter_desc *niter, bool exit_must_be_taken,
715 bounds *bnds)
717 tree niter_type = unsigned_type_for (type);
718 tree s, c, d, bits, assumption, tmp, bound;
719 mpz_t max;
721 niter->control = *iv;
722 niter->bound = final;
723 niter->cmp = NE_EXPR;
725 /* Rearrange the terms so that we get inequality S * i <> C, with S
726 positive. Also cast everything to the unsigned type. If IV does
727 not overflow, BNDS bounds the value of C. Also, this is the
728 case if the computation |FINAL - IV->base| does not overflow, i.e.,
729 if BNDS->below in the result is nonnegative. */
730 if (tree_int_cst_sign_bit (iv->step))
732 s = fold_convert (niter_type,
733 fold_build1 (NEGATE_EXPR, type, iv->step));
734 c = fold_build2 (MINUS_EXPR, niter_type,
735 fold_convert (niter_type, iv->base),
736 fold_convert (niter_type, final));
737 bounds_negate (bnds);
739 else
741 s = fold_convert (niter_type, iv->step);
742 c = fold_build2 (MINUS_EXPR, niter_type,
743 fold_convert (niter_type, final),
744 fold_convert (niter_type, iv->base));
747 mpz_init (max);
748 number_of_iterations_ne_max (max, iv->no_overflow, c, s, bnds,
749 exit_must_be_taken);
750 niter->max = mpz_get_double_int (niter_type, max, false);
751 mpz_clear (max);
753 /* First the trivial cases -- when the step is 1. */
754 if (integer_onep (s))
756 niter->niter = c;
757 return true;
760 /* Let nsd (step, size of mode) = d. If d does not divide c, the loop
761 is infinite. Otherwise, the number of iterations is
762 (inverse(s/d) * (c/d)) mod (size of mode/d). */
763 bits = num_ending_zeros (s);
764 bound = build_low_bits_mask (niter_type,
765 (TYPE_PRECISION (niter_type)
766 - tree_to_uhwi (bits)));
768 d = fold_binary_to_constant (LSHIFT_EXPR, niter_type,
769 build_int_cst (niter_type, 1), bits);
770 s = fold_binary_to_constant (RSHIFT_EXPR, niter_type, s, bits);
772 if (!exit_must_be_taken)
774 /* If we cannot assume that the exit is taken eventually, record the
775 assumptions for divisibility of c. */
776 assumption = fold_build2 (FLOOR_MOD_EXPR, niter_type, c, d);
777 assumption = fold_build2 (EQ_EXPR, boolean_type_node,
778 assumption, build_int_cst (niter_type, 0));
779 if (!integer_nonzerop (assumption))
780 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
781 niter->assumptions, assumption);
784 c = fold_build2 (EXACT_DIV_EXPR, niter_type, c, d);
785 tmp = fold_build2 (MULT_EXPR, niter_type, c, inverse (s, bound));
786 niter->niter = fold_build2 (BIT_AND_EXPR, niter_type, tmp, bound);
787 return true;
790 /* Checks whether we can determine the final value of the control variable
791 of the loop with ending condition IV0 < IV1 (computed in TYPE).
792 DELTA is the difference IV1->base - IV0->base, STEP is the absolute value
793 of the step. The assumptions necessary to ensure that the computation
794 of the final value does not overflow are recorded in NITER. If we
795 find the final value, we adjust DELTA and return TRUE. Otherwise
796 we return false. BNDS bounds the value of IV1->base - IV0->base,
797 and will be updated by the same amount as DELTA. EXIT_MUST_BE_TAKEN is
798 true if we know that the exit must be taken eventually. */
800 static bool
801 number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
802 struct tree_niter_desc *niter,
803 tree *delta, tree step,
804 bool exit_must_be_taken, bounds *bnds)
806 tree niter_type = TREE_TYPE (step);
807 tree mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
808 tree tmod;
809 mpz_t mmod;
810 tree assumption = boolean_true_node, bound, noloop;
811 bool ret = false, fv_comp_no_overflow;
812 tree type1 = type;
813 if (POINTER_TYPE_P (type))
814 type1 = sizetype;
816 if (TREE_CODE (mod) != INTEGER_CST)
817 return false;
818 if (integer_nonzerop (mod))
819 mod = fold_build2 (MINUS_EXPR, niter_type, step, mod);
820 tmod = fold_convert (type1, mod);
822 mpz_init (mmod);
823 mpz_set_double_int (mmod, tree_to_double_int (mod), true);
824 mpz_neg (mmod, mmod);
826 /* If the induction variable does not overflow and the exit is taken,
827 then the computation of the final value does not overflow. This is
828 also obviously the case if the new final value is equal to the
829 current one. Finally, we postulate this for pointer type variables,
830 as the code cannot rely on the object to that the pointer points being
831 placed at the end of the address space (and more pragmatically,
832 TYPE_{MIN,MAX}_VALUE is not defined for pointers). */
833 if (integer_zerop (mod) || POINTER_TYPE_P (type))
834 fv_comp_no_overflow = true;
835 else if (!exit_must_be_taken)
836 fv_comp_no_overflow = false;
837 else
838 fv_comp_no_overflow =
839 (iv0->no_overflow && integer_nonzerop (iv0->step))
840 || (iv1->no_overflow && integer_nonzerop (iv1->step));
842 if (integer_nonzerop (iv0->step))
844 /* The final value of the iv is iv1->base + MOD, assuming that this
845 computation does not overflow, and that
846 iv0->base <= iv1->base + MOD. */
847 if (!fv_comp_no_overflow)
849 bound = fold_build2 (MINUS_EXPR, type1,
850 TYPE_MAX_VALUE (type1), tmod);
851 assumption = fold_build2 (LE_EXPR, boolean_type_node,
852 iv1->base, bound);
853 if (integer_zerop (assumption))
854 goto end;
856 if (mpz_cmp (mmod, bnds->below) < 0)
857 noloop = boolean_false_node;
858 else if (POINTER_TYPE_P (type))
859 noloop = fold_build2 (GT_EXPR, boolean_type_node,
860 iv0->base,
861 fold_build_pointer_plus (iv1->base, tmod));
862 else
863 noloop = fold_build2 (GT_EXPR, boolean_type_node,
864 iv0->base,
865 fold_build2 (PLUS_EXPR, type1,
866 iv1->base, tmod));
868 else
870 /* The final value of the iv is iv0->base - MOD, assuming that this
871 computation does not overflow, and that
872 iv0->base - MOD <= iv1->base. */
873 if (!fv_comp_no_overflow)
875 bound = fold_build2 (PLUS_EXPR, type1,
876 TYPE_MIN_VALUE (type1), tmod);
877 assumption = fold_build2 (GE_EXPR, boolean_type_node,
878 iv0->base, bound);
879 if (integer_zerop (assumption))
880 goto end;
882 if (mpz_cmp (mmod, bnds->below) < 0)
883 noloop = boolean_false_node;
884 else if (POINTER_TYPE_P (type))
885 noloop = fold_build2 (GT_EXPR, boolean_type_node,
886 fold_build_pointer_plus (iv0->base,
887 fold_build1 (NEGATE_EXPR,
888 type1, tmod)),
889 iv1->base);
890 else
891 noloop = fold_build2 (GT_EXPR, boolean_type_node,
892 fold_build2 (MINUS_EXPR, type1,
893 iv0->base, tmod),
894 iv1->base);
897 if (!integer_nonzerop (assumption))
898 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
899 niter->assumptions,
900 assumption);
901 if (!integer_zerop (noloop))
902 niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
903 niter->may_be_zero,
904 noloop);
905 bounds_add (bnds, tree_to_double_int (mod), type);
906 *delta = fold_build2 (PLUS_EXPR, niter_type, *delta, mod);
908 ret = true;
909 end:
910 mpz_clear (mmod);
911 return ret;
914 /* Add assertions to NITER that ensure that the control variable of the loop
915 with ending condition IV0 < IV1 does not overflow. Types of IV0 and IV1
916 are TYPE. Returns false if we can prove that there is an overflow, true
917 otherwise. STEP is the absolute value of the step. */
919 static bool
920 assert_no_overflow_lt (tree type, affine_iv *iv0, affine_iv *iv1,
921 struct tree_niter_desc *niter, tree step)
923 tree bound, d, assumption, diff;
924 tree niter_type = TREE_TYPE (step);
926 if (integer_nonzerop (iv0->step))
928 /* for (i = iv0->base; i < iv1->base; i += iv0->step) */
929 if (iv0->no_overflow)
930 return true;
932 /* If iv0->base is a constant, we can determine the last value before
933 overflow precisely; otherwise we conservatively assume
934 MAX - STEP + 1. */
936 if (TREE_CODE (iv0->base) == INTEGER_CST)
938 d = fold_build2 (MINUS_EXPR, niter_type,
939 fold_convert (niter_type, TYPE_MAX_VALUE (type)),
940 fold_convert (niter_type, iv0->base));
941 diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
943 else
944 diff = fold_build2 (MINUS_EXPR, niter_type, step,
945 build_int_cst (niter_type, 1));
946 bound = fold_build2 (MINUS_EXPR, type,
947 TYPE_MAX_VALUE (type), fold_convert (type, diff));
948 assumption = fold_build2 (LE_EXPR, boolean_type_node,
949 iv1->base, bound);
951 else
953 /* for (i = iv1->base; i > iv0->base; i += iv1->step) */
954 if (iv1->no_overflow)
955 return true;
957 if (TREE_CODE (iv1->base) == INTEGER_CST)
959 d = fold_build2 (MINUS_EXPR, niter_type,
960 fold_convert (niter_type, iv1->base),
961 fold_convert (niter_type, TYPE_MIN_VALUE (type)));
962 diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
964 else
965 diff = fold_build2 (MINUS_EXPR, niter_type, step,
966 build_int_cst (niter_type, 1));
967 bound = fold_build2 (PLUS_EXPR, type,
968 TYPE_MIN_VALUE (type), fold_convert (type, diff));
969 assumption = fold_build2 (GE_EXPR, boolean_type_node,
970 iv0->base, bound);
973 if (integer_zerop (assumption))
974 return false;
975 if (!integer_nonzerop (assumption))
976 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
977 niter->assumptions, assumption);
979 iv0->no_overflow = true;
980 iv1->no_overflow = true;
981 return true;
984 /* Add an assumption to NITER that a loop whose ending condition
985 is IV0 < IV1 rolls. TYPE is the type of the control iv. BNDS
986 bounds the value of IV1->base - IV0->base. */
988 static void
989 assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
990 struct tree_niter_desc *niter, bounds *bnds)
992 tree assumption = boolean_true_node, bound, diff;
993 tree mbz, mbzl, mbzr, type1;
994 bool rolls_p, no_overflow_p;
995 double_int dstep;
996 mpz_t mstep, max;
998 /* We are going to compute the number of iterations as
999 (iv1->base - iv0->base + step - 1) / step, computed in the unsigned
1000 variant of TYPE. This formula only works if
1002 -step + 1 <= (iv1->base - iv0->base) <= MAX - step + 1
1004 (where MAX is the maximum value of the unsigned variant of TYPE, and
1005 the computations in this formula are performed in full precision,
1006 i.e., without overflows).
1008 Usually, for loops with exit condition iv0->base + step * i < iv1->base,
1009 we have a condition of the form iv0->base - step < iv1->base before the loop,
1010 and for loops iv0->base < iv1->base - step * i the condition
1011 iv0->base < iv1->base + step, due to loop header copying, which enable us
1012 to prove the lower bound.
1014 The upper bound is more complicated. Unless the expressions for initial
1015 and final value themselves contain enough information, we usually cannot
1016 derive it from the context. */
1018 /* First check whether the answer does not follow from the bounds we gathered
1019 before. */
1020 if (integer_nonzerop (iv0->step))
1021 dstep = tree_to_double_int (iv0->step);
1022 else
1024 dstep = tree_to_double_int (iv1->step).sext (TYPE_PRECISION (type));
1025 dstep = -dstep;
1028 mpz_init (mstep);
1029 mpz_set_double_int (mstep, dstep, true);
1030 mpz_neg (mstep, mstep);
1031 mpz_add_ui (mstep, mstep, 1);
1033 rolls_p = mpz_cmp (mstep, bnds->below) <= 0;
1035 mpz_init (max);
1036 mpz_set_double_int (max, double_int::mask (TYPE_PRECISION (type)), true);
1037 mpz_add (max, max, mstep);
1038 no_overflow_p = (mpz_cmp (bnds->up, max) <= 0
1039 /* For pointers, only values lying inside a single object
1040 can be compared or manipulated by pointer arithmetics.
1041 Gcc in general does not allow or handle objects larger
1042 than half of the address space, hence the upper bound
1043 is satisfied for pointers. */
1044 || POINTER_TYPE_P (type));
1045 mpz_clear (mstep);
1046 mpz_clear (max);
1048 if (rolls_p && no_overflow_p)
1049 return;
1051 type1 = type;
1052 if (POINTER_TYPE_P (type))
1053 type1 = sizetype;
1055 /* Now the hard part; we must formulate the assumption(s) as expressions, and
1056 we must be careful not to introduce overflow. */
1058 if (integer_nonzerop (iv0->step))
1060 diff = fold_build2 (MINUS_EXPR, type1,
1061 iv0->step, build_int_cst (type1, 1));
1063 /* We need to know that iv0->base >= MIN + iv0->step - 1. Since
1064 0 address never belongs to any object, we can assume this for
1065 pointers. */
1066 if (!POINTER_TYPE_P (type))
1068 bound = fold_build2 (PLUS_EXPR, type1,
1069 TYPE_MIN_VALUE (type), diff);
1070 assumption = fold_build2 (GE_EXPR, boolean_type_node,
1071 iv0->base, bound);
1074 /* And then we can compute iv0->base - diff, and compare it with
1075 iv1->base. */
1076 mbzl = fold_build2 (MINUS_EXPR, type1,
1077 fold_convert (type1, iv0->base), diff);
1078 mbzr = fold_convert (type1, iv1->base);
1080 else
1082 diff = fold_build2 (PLUS_EXPR, type1,
1083 iv1->step, build_int_cst (type1, 1));
1085 if (!POINTER_TYPE_P (type))
1087 bound = fold_build2 (PLUS_EXPR, type1,
1088 TYPE_MAX_VALUE (type), diff);
1089 assumption = fold_build2 (LE_EXPR, boolean_type_node,
1090 iv1->base, bound);
1093 mbzl = fold_convert (type1, iv0->base);
1094 mbzr = fold_build2 (MINUS_EXPR, type1,
1095 fold_convert (type1, iv1->base), diff);
1098 if (!integer_nonzerop (assumption))
1099 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1100 niter->assumptions, assumption);
1101 if (!rolls_p)
1103 mbz = fold_build2 (GT_EXPR, boolean_type_node, mbzl, mbzr);
1104 niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
1105 niter->may_be_zero, mbz);
1109 /* Determines number of iterations of loop whose ending condition
1110 is IV0 < IV1. TYPE is the type of the iv. The number of
1111 iterations is stored to NITER. BNDS bounds the difference
1112 IV1->base - IV0->base. EXIT_MUST_BE_TAKEN is true if we know
1113 that the exit must be taken eventually. */
1115 static bool
1116 number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
1117 struct tree_niter_desc *niter,
1118 bool exit_must_be_taken, bounds *bnds)
1120 tree niter_type = unsigned_type_for (type);
1121 tree delta, step, s;
1122 mpz_t mstep, tmp;
1124 if (integer_nonzerop (iv0->step))
1126 niter->control = *iv0;
1127 niter->cmp = LT_EXPR;
1128 niter->bound = iv1->base;
1130 else
1132 niter->control = *iv1;
1133 niter->cmp = GT_EXPR;
1134 niter->bound = iv0->base;
1137 delta = fold_build2 (MINUS_EXPR, niter_type,
1138 fold_convert (niter_type, iv1->base),
1139 fold_convert (niter_type, iv0->base));
1141 /* First handle the special case that the step is +-1. */
1142 if ((integer_onep (iv0->step) && integer_zerop (iv1->step))
1143 || (integer_all_onesp (iv1->step) && integer_zerop (iv0->step)))
1145 /* for (i = iv0->base; i < iv1->base; i++)
1149 for (i = iv1->base; i > iv0->base; i--).
1151 In both cases # of iterations is iv1->base - iv0->base, assuming that
1152 iv1->base >= iv0->base.
1154 First try to derive a lower bound on the value of
1155 iv1->base - iv0->base, computed in full precision. If the difference
1156 is nonnegative, we are done, otherwise we must record the
1157 condition. */
1159 if (mpz_sgn (bnds->below) < 0)
1160 niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
1161 iv1->base, iv0->base);
1162 niter->niter = delta;
1163 niter->max = mpz_get_double_int (niter_type, bnds->up, false);
1164 return true;
1167 if (integer_nonzerop (iv0->step))
1168 step = fold_convert (niter_type, iv0->step);
1169 else
1170 step = fold_convert (niter_type,
1171 fold_build1 (NEGATE_EXPR, type, iv1->step));
1173 /* If we can determine the final value of the control iv exactly, we can
1174 transform the condition to != comparison. In particular, this will be
1175 the case if DELTA is constant. */
1176 if (number_of_iterations_lt_to_ne (type, iv0, iv1, niter, &delta, step,
1177 exit_must_be_taken, bnds))
1179 affine_iv zps;
1181 zps.base = build_int_cst (niter_type, 0);
1182 zps.step = step;
1183 /* number_of_iterations_lt_to_ne will add assumptions that ensure that
1184 zps does not overflow. */
1185 zps.no_overflow = true;
1187 return number_of_iterations_ne (type, &zps, delta, niter, true, bnds);
1190 /* Make sure that the control iv does not overflow. */
1191 if (!assert_no_overflow_lt (type, iv0, iv1, niter, step))
1192 return false;
1194 /* We determine the number of iterations as (delta + step - 1) / step. For
1195 this to work, we must know that iv1->base >= iv0->base - step + 1,
1196 otherwise the loop does not roll. */
1197 assert_loop_rolls_lt (type, iv0, iv1, niter, bnds);
1199 s = fold_build2 (MINUS_EXPR, niter_type,
1200 step, build_int_cst (niter_type, 1));
1201 delta = fold_build2 (PLUS_EXPR, niter_type, delta, s);
1202 niter->niter = fold_build2 (FLOOR_DIV_EXPR, niter_type, delta, step);
1204 mpz_init (mstep);
1205 mpz_init (tmp);
1206 mpz_set_double_int (mstep, tree_to_double_int (step), true);
1207 mpz_add (tmp, bnds->up, mstep);
1208 mpz_sub_ui (tmp, tmp, 1);
1209 mpz_fdiv_q (tmp, tmp, mstep);
1210 niter->max = mpz_get_double_int (niter_type, tmp, false);
1211 mpz_clear (mstep);
1212 mpz_clear (tmp);
1214 return true;
1217 /* Determines number of iterations of loop whose ending condition
1218 is IV0 <= IV1. TYPE is the type of the iv. The number of
1219 iterations is stored to NITER. EXIT_MUST_BE_TAKEN is true if
1220 we know that this condition must eventually become false (we derived this
1221 earlier, and possibly set NITER->assumptions to make sure this
1222 is the case). BNDS bounds the difference IV1->base - IV0->base. */
1224 static bool
1225 number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
1226 struct tree_niter_desc *niter, bool exit_must_be_taken,
1227 bounds *bnds)
1229 tree assumption;
1230 tree type1 = type;
1231 if (POINTER_TYPE_P (type))
1232 type1 = sizetype;
1234 /* Say that IV0 is the control variable. Then IV0 <= IV1 iff
1235 IV0 < IV1 + 1, assuming that IV1 is not equal to the greatest
1236 value of the type. This we must know anyway, since if it is
1237 equal to this value, the loop rolls forever. We do not check
1238 this condition for pointer type ivs, as the code cannot rely on
1239 the object to that the pointer points being placed at the end of
1240 the address space (and more pragmatically, TYPE_{MIN,MAX}_VALUE is
1241 not defined for pointers). */
1243 if (!exit_must_be_taken && !POINTER_TYPE_P (type))
1245 if (integer_nonzerop (iv0->step))
1246 assumption = fold_build2 (NE_EXPR, boolean_type_node,
1247 iv1->base, TYPE_MAX_VALUE (type));
1248 else
1249 assumption = fold_build2 (NE_EXPR, boolean_type_node,
1250 iv0->base, TYPE_MIN_VALUE (type));
1252 if (integer_zerop (assumption))
1253 return false;
1254 if (!integer_nonzerop (assumption))
1255 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1256 niter->assumptions, assumption);
1259 if (integer_nonzerop (iv0->step))
1261 if (POINTER_TYPE_P (type))
1262 iv1->base = fold_build_pointer_plus_hwi (iv1->base, 1);
1263 else
1264 iv1->base = fold_build2 (PLUS_EXPR, type1, iv1->base,
1265 build_int_cst (type1, 1));
1267 else if (POINTER_TYPE_P (type))
1268 iv0->base = fold_build_pointer_plus_hwi (iv0->base, -1);
1269 else
1270 iv0->base = fold_build2 (MINUS_EXPR, type1,
1271 iv0->base, build_int_cst (type1, 1));
1273 bounds_add (bnds, double_int_one, type1);
1275 return number_of_iterations_lt (type, iv0, iv1, niter, exit_must_be_taken,
1276 bnds);
1279 /* Dumps description of affine induction variable IV to FILE. */
1281 static void
1282 dump_affine_iv (FILE *file, affine_iv *iv)
1284 if (!integer_zerop (iv->step))
1285 fprintf (file, "[");
1287 print_generic_expr (dump_file, iv->base, TDF_SLIM);
1289 if (!integer_zerop (iv->step))
1291 fprintf (file, ", + , ");
1292 print_generic_expr (dump_file, iv->step, TDF_SLIM);
1293 fprintf (file, "]%s", iv->no_overflow ? "(no_overflow)" : "");
1297 /* Determine the number of iterations according to condition (for staying
1298 inside loop) which compares two induction variables using comparison
1299 operator CODE. The induction variable on left side of the comparison
1300 is IV0, the right-hand side is IV1. Both induction variables must have
1301 type TYPE, which must be an integer or pointer type. The steps of the
1302 ivs must be constants (or NULL_TREE, which is interpreted as constant zero).
1304 LOOP is the loop whose number of iterations we are determining.
1306 ONLY_EXIT is true if we are sure this is the only way the loop could be
1307 exited (including possibly non-returning function calls, exceptions, etc.)
1308 -- in this case we can use the information whether the control induction
1309 variables can overflow or not in a more efficient way.
1311 if EVERY_ITERATION is true, we know the test is executed on every iteration.
1313 The results (number of iterations and assumptions as described in
1314 comments at struct tree_niter_desc in tree-ssa-loop.h) are stored to NITER.
1315 Returns false if it fails to determine number of iterations, true if it
1316 was determined (possibly with some assumptions). */
1318 static bool
1319 number_of_iterations_cond (struct loop *loop,
1320 tree type, affine_iv *iv0, enum tree_code code,
1321 affine_iv *iv1, struct tree_niter_desc *niter,
1322 bool only_exit, bool every_iteration)
1324 bool exit_must_be_taken = false, ret;
1325 bounds bnds;
1327 /* If the test is not executed every iteration, wrapping may make the test
1328 to pass again.
1329 TODO: the overflow case can be still used as unreliable estimate of upper
1330 bound. But we have no API to pass it down to number of iterations code
1331 and, at present, it will not use it anyway. */
1332 if (!every_iteration
1333 && (!iv0->no_overflow || !iv1->no_overflow
1334 || code == NE_EXPR || code == EQ_EXPR))
1335 return false;
1337 /* The meaning of these assumptions is this:
1338 if !assumptions
1339 then the rest of information does not have to be valid
1340 if may_be_zero then the loop does not roll, even if
1341 niter != 0. */
1342 niter->assumptions = boolean_true_node;
1343 niter->may_be_zero = boolean_false_node;
1344 niter->niter = NULL_TREE;
1345 niter->max = double_int_zero;
1347 niter->bound = NULL_TREE;
1348 niter->cmp = ERROR_MARK;
1350 /* Make < comparison from > ones, and for NE_EXPR comparisons, ensure that
1351 the control variable is on lhs. */
1352 if (code == GE_EXPR || code == GT_EXPR
1353 || (code == NE_EXPR && integer_zerop (iv0->step)))
1355 SWAP (iv0, iv1);
1356 code = swap_tree_comparison (code);
1359 if (POINTER_TYPE_P (type))
1361 /* Comparison of pointers is undefined unless both iv0 and iv1 point
1362 to the same object. If they do, the control variable cannot wrap
1363 (as wrap around the bounds of memory will never return a pointer
1364 that would be guaranteed to point to the same object, even if we
1365 avoid undefined behavior by casting to size_t and back). */
1366 iv0->no_overflow = true;
1367 iv1->no_overflow = true;
1370 /* If the control induction variable does not overflow and the only exit
1371 from the loop is the one that we analyze, we know it must be taken
1372 eventually. */
1373 if (only_exit)
1375 if (!integer_zerop (iv0->step) && iv0->no_overflow)
1376 exit_must_be_taken = true;
1377 else if (!integer_zerop (iv1->step) && iv1->no_overflow)
1378 exit_must_be_taken = true;
1381 /* We can handle the case when neither of the sides of the comparison is
1382 invariant, provided that the test is NE_EXPR. This rarely occurs in
1383 practice, but it is simple enough to manage. */
1384 if (!integer_zerop (iv0->step) && !integer_zerop (iv1->step))
1386 tree step_type = POINTER_TYPE_P (type) ? sizetype : type;
1387 if (code != NE_EXPR)
1388 return false;
1390 iv0->step = fold_binary_to_constant (MINUS_EXPR, step_type,
1391 iv0->step, iv1->step);
1392 iv0->no_overflow = false;
1393 iv1->step = build_int_cst (step_type, 0);
1394 iv1->no_overflow = true;
1397 /* If the result of the comparison is a constant, the loop is weird. More
1398 precise handling would be possible, but the situation is not common enough
1399 to waste time on it. */
1400 if (integer_zerop (iv0->step) && integer_zerop (iv1->step))
1401 return false;
1403 /* Ignore loops of while (i-- < 10) type. */
1404 if (code != NE_EXPR)
1406 if (iv0->step && tree_int_cst_sign_bit (iv0->step))
1407 return false;
1409 if (!integer_zerop (iv1->step) && !tree_int_cst_sign_bit (iv1->step))
1410 return false;
1413 /* If the loop exits immediately, there is nothing to do. */
1414 tree tem = fold_binary (code, boolean_type_node, iv0->base, iv1->base);
1415 if (tem && integer_zerop (tem))
1417 niter->niter = build_int_cst (unsigned_type_for (type), 0);
1418 niter->max = double_int_zero;
1419 return true;
1422 /* OK, now we know we have a senseful loop. Handle several cases, depending
1423 on what comparison operator is used. */
1424 bound_difference (loop, iv1->base, iv0->base, &bnds);
1426 if (dump_file && (dump_flags & TDF_DETAILS))
1428 fprintf (dump_file,
1429 "Analyzing # of iterations of loop %d\n", loop->num);
1431 fprintf (dump_file, " exit condition ");
1432 dump_affine_iv (dump_file, iv0);
1433 fprintf (dump_file, " %s ",
1434 code == NE_EXPR ? "!="
1435 : code == LT_EXPR ? "<"
1436 : "<=");
1437 dump_affine_iv (dump_file, iv1);
1438 fprintf (dump_file, "\n");
1440 fprintf (dump_file, " bounds on difference of bases: ");
1441 mpz_out_str (dump_file, 10, bnds.below);
1442 fprintf (dump_file, " ... ");
1443 mpz_out_str (dump_file, 10, bnds.up);
1444 fprintf (dump_file, "\n");
1447 switch (code)
1449 case NE_EXPR:
1450 gcc_assert (integer_zerop (iv1->step));
1451 ret = number_of_iterations_ne (type, iv0, iv1->base, niter,
1452 exit_must_be_taken, &bnds);
1453 break;
1455 case LT_EXPR:
1456 ret = number_of_iterations_lt (type, iv0, iv1, niter, exit_must_be_taken,
1457 &bnds);
1458 break;
1460 case LE_EXPR:
1461 ret = number_of_iterations_le (type, iv0, iv1, niter, exit_must_be_taken,
1462 &bnds);
1463 break;
1465 default:
1466 gcc_unreachable ();
1469 mpz_clear (bnds.up);
1470 mpz_clear (bnds.below);
1472 if (dump_file && (dump_flags & TDF_DETAILS))
1474 if (ret)
1476 fprintf (dump_file, " result:\n");
1477 if (!integer_nonzerop (niter->assumptions))
1479 fprintf (dump_file, " under assumptions ");
1480 print_generic_expr (dump_file, niter->assumptions, TDF_SLIM);
1481 fprintf (dump_file, "\n");
1484 if (!integer_zerop (niter->may_be_zero))
1486 fprintf (dump_file, " zero if ");
1487 print_generic_expr (dump_file, niter->may_be_zero, TDF_SLIM);
1488 fprintf (dump_file, "\n");
1491 fprintf (dump_file, " # of iterations ");
1492 print_generic_expr (dump_file, niter->niter, TDF_SLIM);
1493 fprintf (dump_file, ", bounded by ");
1494 dump_double_int (dump_file, niter->max, true);
1495 fprintf (dump_file, "\n");
1497 else
1498 fprintf (dump_file, " failed\n\n");
1500 return ret;
1503 /* Substitute NEW for OLD in EXPR and fold the result. */
1505 static tree
1506 simplify_replace_tree (tree expr, tree old, tree new_tree)
1508 unsigned i, n;
1509 tree ret = NULL_TREE, e, se;
1511 if (!expr)
1512 return NULL_TREE;
1514 /* Do not bother to replace constants. */
1515 if (CONSTANT_CLASS_P (old))
1516 return expr;
1518 if (expr == old
1519 || operand_equal_p (expr, old, 0))
1520 return unshare_expr (new_tree);
1522 if (!EXPR_P (expr))
1523 return expr;
1525 n = TREE_OPERAND_LENGTH (expr);
1526 for (i = 0; i < n; i++)
1528 e = TREE_OPERAND (expr, i);
1529 se = simplify_replace_tree (e, old, new_tree);
1530 if (e == se)
1531 continue;
1533 if (!ret)
1534 ret = copy_node (expr);
1536 TREE_OPERAND (ret, i) = se;
1539 return (ret ? fold (ret) : expr);
1542 /* Expand definitions of ssa names in EXPR as long as they are simple
1543 enough, and return the new expression. */
1545 tree
1546 expand_simple_operations (tree expr)
1548 unsigned i, n;
1549 tree ret = NULL_TREE, e, ee, e1;
1550 enum tree_code code;
1551 gimple stmt;
1553 if (expr == NULL_TREE)
1554 return expr;
1556 if (is_gimple_min_invariant (expr))
1557 return expr;
1559 code = TREE_CODE (expr);
1560 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
1562 n = TREE_OPERAND_LENGTH (expr);
1563 for (i = 0; i < n; i++)
1565 e = TREE_OPERAND (expr, i);
1566 ee = expand_simple_operations (e);
1567 if (e == ee)
1568 continue;
1570 if (!ret)
1571 ret = copy_node (expr);
1573 TREE_OPERAND (ret, i) = ee;
1576 if (!ret)
1577 return expr;
1579 fold_defer_overflow_warnings ();
1580 ret = fold (ret);
1581 fold_undefer_and_ignore_overflow_warnings ();
1582 return ret;
1585 if (TREE_CODE (expr) != SSA_NAME)
1586 return expr;
1588 stmt = SSA_NAME_DEF_STMT (expr);
1589 if (gimple_code (stmt) == GIMPLE_PHI)
1591 basic_block src, dest;
1593 if (gimple_phi_num_args (stmt) != 1)
1594 return expr;
1595 e = PHI_ARG_DEF (stmt, 0);
1597 /* Avoid propagating through loop exit phi nodes, which
1598 could break loop-closed SSA form restrictions. */
1599 dest = gimple_bb (stmt);
1600 src = single_pred (dest);
1601 if (TREE_CODE (e) == SSA_NAME
1602 && src->loop_father != dest->loop_father)
1603 return expr;
1605 return expand_simple_operations (e);
1607 if (gimple_code (stmt) != GIMPLE_ASSIGN)
1608 return expr;
1610 /* Avoid expanding to expressions that contain SSA names that need
1611 to take part in abnormal coalescing. */
1612 ssa_op_iter iter;
1613 FOR_EACH_SSA_TREE_OPERAND (e, stmt, iter, SSA_OP_USE)
1614 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (e))
1615 return expr;
1617 e = gimple_assign_rhs1 (stmt);
1618 code = gimple_assign_rhs_code (stmt);
1619 if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
1621 if (is_gimple_min_invariant (e))
1622 return e;
1624 if (code == SSA_NAME)
1625 return expand_simple_operations (e);
1627 return expr;
1630 switch (code)
1632 CASE_CONVERT:
1633 /* Casts are simple. */
1634 ee = expand_simple_operations (e);
1635 return fold_build1 (code, TREE_TYPE (expr), ee);
1637 case PLUS_EXPR:
1638 case MINUS_EXPR:
1639 if (TYPE_OVERFLOW_TRAPS (TREE_TYPE (expr)))
1640 return expr;
1641 /* Fallthru. */
1642 case POINTER_PLUS_EXPR:
1643 /* And increments and decrements by a constant are simple. */
1644 e1 = gimple_assign_rhs2 (stmt);
1645 if (!is_gimple_min_invariant (e1))
1646 return expr;
1648 ee = expand_simple_operations (e);
1649 return fold_build2 (code, TREE_TYPE (expr), ee, e1);
1651 default:
1652 return expr;
1656 /* Tries to simplify EXPR using the condition COND. Returns the simplified
1657 expression (or EXPR unchanged, if no simplification was possible). */
1659 static tree
1660 tree_simplify_using_condition_1 (tree cond, tree expr)
1662 bool changed;
1663 tree e, te, e0, e1, e2, notcond;
1664 enum tree_code code = TREE_CODE (expr);
1666 if (code == INTEGER_CST)
1667 return expr;
1669 if (code == TRUTH_OR_EXPR
1670 || code == TRUTH_AND_EXPR
1671 || code == COND_EXPR)
1673 changed = false;
1675 e0 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 0));
1676 if (TREE_OPERAND (expr, 0) != e0)
1677 changed = true;
1679 e1 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 1));
1680 if (TREE_OPERAND (expr, 1) != e1)
1681 changed = true;
1683 if (code == COND_EXPR)
1685 e2 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 2));
1686 if (TREE_OPERAND (expr, 2) != e2)
1687 changed = true;
1689 else
1690 e2 = NULL_TREE;
1692 if (changed)
1694 if (code == COND_EXPR)
1695 expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
1696 else
1697 expr = fold_build2 (code, boolean_type_node, e0, e1);
1700 return expr;
1703 /* In case COND is equality, we may be able to simplify EXPR by copy/constant
1704 propagation, and vice versa. Fold does not handle this, since it is
1705 considered too expensive. */
1706 if (TREE_CODE (cond) == EQ_EXPR)
1708 e0 = TREE_OPERAND (cond, 0);
1709 e1 = TREE_OPERAND (cond, 1);
1711 /* We know that e0 == e1. Check whether we cannot simplify expr
1712 using this fact. */
1713 e = simplify_replace_tree (expr, e0, e1);
1714 if (integer_zerop (e) || integer_nonzerop (e))
1715 return e;
1717 e = simplify_replace_tree (expr, e1, e0);
1718 if (integer_zerop (e) || integer_nonzerop (e))
1719 return e;
1721 if (TREE_CODE (expr) == EQ_EXPR)
1723 e0 = TREE_OPERAND (expr, 0);
1724 e1 = TREE_OPERAND (expr, 1);
1726 /* If e0 == e1 (EXPR) implies !COND, then EXPR cannot be true. */
1727 e = simplify_replace_tree (cond, e0, e1);
1728 if (integer_zerop (e))
1729 return e;
1730 e = simplify_replace_tree (cond, e1, e0);
1731 if (integer_zerop (e))
1732 return e;
1734 if (TREE_CODE (expr) == NE_EXPR)
1736 e0 = TREE_OPERAND (expr, 0);
1737 e1 = TREE_OPERAND (expr, 1);
1739 /* If e0 == e1 (!EXPR) implies !COND, then EXPR must be true. */
1740 e = simplify_replace_tree (cond, e0, e1);
1741 if (integer_zerop (e))
1742 return boolean_true_node;
1743 e = simplify_replace_tree (cond, e1, e0);
1744 if (integer_zerop (e))
1745 return boolean_true_node;
1748 te = expand_simple_operations (expr);
1750 /* Check whether COND ==> EXPR. */
1751 notcond = invert_truthvalue (cond);
1752 e = fold_binary (TRUTH_OR_EXPR, boolean_type_node, notcond, te);
1753 if (e && integer_nonzerop (e))
1754 return e;
1756 /* Check whether COND ==> not EXPR. */
1757 e = fold_binary (TRUTH_AND_EXPR, boolean_type_node, cond, te);
1758 if (e && integer_zerop (e))
1759 return e;
1761 return expr;
1764 /* Tries to simplify EXPR using the condition COND. Returns the simplified
1765 expression (or EXPR unchanged, if no simplification was possible).
1766 Wrapper around tree_simplify_using_condition_1 that ensures that chains
1767 of simple operations in definitions of ssa names in COND are expanded,
1768 so that things like casts or incrementing the value of the bound before
1769 the loop do not cause us to fail. */
1771 static tree
1772 tree_simplify_using_condition (tree cond, tree expr)
1774 cond = expand_simple_operations (cond);
1776 return tree_simplify_using_condition_1 (cond, expr);
1779 /* Tries to simplify EXPR using the conditions on entry to LOOP.
1780 Returns the simplified expression (or EXPR unchanged, if no
1781 simplification was possible).*/
1783 static tree
1784 simplify_using_initial_conditions (struct loop *loop, tree expr)
1786 edge e;
1787 basic_block bb;
1788 gimple stmt;
1789 tree cond;
1790 int cnt = 0;
1792 if (TREE_CODE (expr) == INTEGER_CST)
1793 return expr;
1795 /* Limit walking the dominators to avoid quadraticness in
1796 the number of BBs times the number of loops in degenerate
1797 cases. */
1798 for (bb = loop->header;
1799 bb != ENTRY_BLOCK_PTR_FOR_FN (cfun) && cnt < MAX_DOMINATORS_TO_WALK;
1800 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
1802 if (!single_pred_p (bb))
1803 continue;
1804 e = single_pred_edge (bb);
1806 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
1807 continue;
1809 stmt = last_stmt (e->src);
1810 cond = fold_build2 (gimple_cond_code (stmt),
1811 boolean_type_node,
1812 gimple_cond_lhs (stmt),
1813 gimple_cond_rhs (stmt));
1814 if (e->flags & EDGE_FALSE_VALUE)
1815 cond = invert_truthvalue (cond);
1816 expr = tree_simplify_using_condition (cond, expr);
1817 ++cnt;
1820 return expr;
1823 /* Tries to simplify EXPR using the evolutions of the loop invariants
1824 in the superloops of LOOP. Returns the simplified expression
1825 (or EXPR unchanged, if no simplification was possible). */
1827 static tree
1828 simplify_using_outer_evolutions (struct loop *loop, tree expr)
1830 enum tree_code code = TREE_CODE (expr);
1831 bool changed;
1832 tree e, e0, e1, e2;
1834 if (is_gimple_min_invariant (expr))
1835 return expr;
1837 if (code == TRUTH_OR_EXPR
1838 || code == TRUTH_AND_EXPR
1839 || code == COND_EXPR)
1841 changed = false;
1843 e0 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 0));
1844 if (TREE_OPERAND (expr, 0) != e0)
1845 changed = true;
1847 e1 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 1));
1848 if (TREE_OPERAND (expr, 1) != e1)
1849 changed = true;
1851 if (code == COND_EXPR)
1853 e2 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 2));
1854 if (TREE_OPERAND (expr, 2) != e2)
1855 changed = true;
1857 else
1858 e2 = NULL_TREE;
1860 if (changed)
1862 if (code == COND_EXPR)
1863 expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
1864 else
1865 expr = fold_build2 (code, boolean_type_node, e0, e1);
1868 return expr;
1871 e = instantiate_parameters (loop, expr);
1872 if (is_gimple_min_invariant (e))
1873 return e;
1875 return expr;
1878 /* Returns true if EXIT is the only possible exit from LOOP. */
1880 bool
1881 loop_only_exit_p (const struct loop *loop, const_edge exit)
1883 basic_block *body;
1884 gimple_stmt_iterator bsi;
1885 unsigned i;
1886 gimple call;
1888 if (exit != single_exit (loop))
1889 return false;
1891 body = get_loop_body (loop);
1892 for (i = 0; i < loop->num_nodes; i++)
1894 for (bsi = gsi_start_bb (body[i]); !gsi_end_p (bsi); gsi_next (&bsi))
1896 call = gsi_stmt (bsi);
1897 if (gimple_code (call) != GIMPLE_CALL)
1898 continue;
1900 if (gimple_has_side_effects (call))
1902 free (body);
1903 return false;
1908 free (body);
1909 return true;
1912 /* Stores description of number of iterations of LOOP derived from
1913 EXIT (an exit edge of the LOOP) in NITER. Returns true if some
1914 useful information could be derived (and fields of NITER has
1915 meaning described in comments at struct tree_niter_desc
1916 declaration), false otherwise. If WARN is true and
1917 -Wunsafe-loop-optimizations was given, warn if the optimizer is going to use
1918 potentially unsafe assumptions.
1919 When EVERY_ITERATION is true, only tests that are known to be executed
1920 every iteration are considered (i.e. only test that alone bounds the loop).
1923 bool
1924 number_of_iterations_exit (struct loop *loop, edge exit,
1925 struct tree_niter_desc *niter,
1926 bool warn, bool every_iteration)
1928 gimple stmt;
1929 tree type;
1930 tree op0, op1;
1931 enum tree_code code;
1932 affine_iv iv0, iv1;
1933 bool safe;
1935 safe = dominated_by_p (CDI_DOMINATORS, loop->latch, exit->src);
1937 if (every_iteration && !safe)
1938 return false;
1940 niter->assumptions = boolean_false_node;
1941 stmt = last_stmt (exit->src);
1942 if (!stmt || gimple_code (stmt) != GIMPLE_COND)
1943 return false;
1945 /* We want the condition for staying inside loop. */
1946 code = gimple_cond_code (stmt);
1947 if (exit->flags & EDGE_TRUE_VALUE)
1948 code = invert_tree_comparison (code, false);
1950 switch (code)
1952 case GT_EXPR:
1953 case GE_EXPR:
1954 case LT_EXPR:
1955 case LE_EXPR:
1956 case NE_EXPR:
1957 break;
1959 default:
1960 return false;
1963 op0 = gimple_cond_lhs (stmt);
1964 op1 = gimple_cond_rhs (stmt);
1965 type = TREE_TYPE (op0);
1967 if (TREE_CODE (type) != INTEGER_TYPE
1968 && !POINTER_TYPE_P (type))
1969 return false;
1971 if (!simple_iv (loop, loop_containing_stmt (stmt), op0, &iv0, false))
1972 return false;
1973 if (!simple_iv (loop, loop_containing_stmt (stmt), op1, &iv1, false))
1974 return false;
1976 /* We don't want to see undefined signed overflow warnings while
1977 computing the number of iterations. */
1978 fold_defer_overflow_warnings ();
1980 iv0.base = expand_simple_operations (iv0.base);
1981 iv1.base = expand_simple_operations (iv1.base);
1982 if (!number_of_iterations_cond (loop, type, &iv0, code, &iv1, niter,
1983 loop_only_exit_p (loop, exit), safe))
1985 fold_undefer_and_ignore_overflow_warnings ();
1986 return false;
1989 if (optimize >= 3)
1991 niter->assumptions = simplify_using_outer_evolutions (loop,
1992 niter->assumptions);
1993 niter->may_be_zero = simplify_using_outer_evolutions (loop,
1994 niter->may_be_zero);
1995 niter->niter = simplify_using_outer_evolutions (loop, niter->niter);
1998 niter->assumptions
1999 = simplify_using_initial_conditions (loop,
2000 niter->assumptions);
2001 niter->may_be_zero
2002 = simplify_using_initial_conditions (loop,
2003 niter->may_be_zero);
2005 fold_undefer_and_ignore_overflow_warnings ();
2007 /* If NITER has simplified into a constant, update MAX. */
2008 if (TREE_CODE (niter->niter) == INTEGER_CST)
2009 niter->max = tree_to_double_int (niter->niter);
2011 if (integer_onep (niter->assumptions))
2012 return true;
2014 /* With -funsafe-loop-optimizations we assume that nothing bad can happen.
2015 But if we can prove that there is overflow or some other source of weird
2016 behavior, ignore the loop even with -funsafe-loop-optimizations. */
2017 if (integer_zerop (niter->assumptions) || !single_exit (loop))
2018 return false;
2020 if (flag_unsafe_loop_optimizations)
2021 niter->assumptions = boolean_true_node;
2023 if (warn)
2025 const char *wording;
2026 location_t loc = gimple_location (stmt);
2028 /* We can provide a more specific warning if one of the operator is
2029 constant and the other advances by +1 or -1. */
2030 if (!integer_zerop (iv1.step)
2031 ? (integer_zerop (iv0.step)
2032 && (integer_onep (iv1.step) || integer_all_onesp (iv1.step)))
2033 : (integer_onep (iv0.step) || integer_all_onesp (iv0.step)))
2034 wording =
2035 flag_unsafe_loop_optimizations
2036 ? N_("assuming that the loop is not infinite")
2037 : N_("cannot optimize possibly infinite loops");
2038 else
2039 wording =
2040 flag_unsafe_loop_optimizations
2041 ? N_("assuming that the loop counter does not overflow")
2042 : N_("cannot optimize loop, the loop counter may overflow");
2044 warning_at ((LOCATION_LINE (loc) > 0) ? loc : input_location,
2045 OPT_Wunsafe_loop_optimizations, "%s", gettext (wording));
2048 return flag_unsafe_loop_optimizations;
2051 /* Try to determine the number of iterations of LOOP. If we succeed,
2052 expression giving number of iterations is returned and *EXIT is
2053 set to the edge from that the information is obtained. Otherwise
2054 chrec_dont_know is returned. */
2056 tree
2057 find_loop_niter (struct loop *loop, edge *exit)
2059 unsigned i;
2060 vec<edge> exits = get_loop_exit_edges (loop);
2061 edge ex;
2062 tree niter = NULL_TREE, aniter;
2063 struct tree_niter_desc desc;
2065 *exit = NULL;
2066 FOR_EACH_VEC_ELT (exits, i, ex)
2068 if (!number_of_iterations_exit (loop, ex, &desc, false))
2069 continue;
2071 if (integer_nonzerop (desc.may_be_zero))
2073 /* We exit in the first iteration through this exit.
2074 We won't find anything better. */
2075 niter = build_int_cst (unsigned_type_node, 0);
2076 *exit = ex;
2077 break;
2080 if (!integer_zerop (desc.may_be_zero))
2081 continue;
2083 aniter = desc.niter;
2085 if (!niter)
2087 /* Nothing recorded yet. */
2088 niter = aniter;
2089 *exit = ex;
2090 continue;
2093 /* Prefer constants, the lower the better. */
2094 if (TREE_CODE (aniter) != INTEGER_CST)
2095 continue;
2097 if (TREE_CODE (niter) != INTEGER_CST)
2099 niter = aniter;
2100 *exit = ex;
2101 continue;
2104 if (tree_int_cst_lt (aniter, niter))
2106 niter = aniter;
2107 *exit = ex;
2108 continue;
2111 exits.release ();
2113 return niter ? niter : chrec_dont_know;
2116 /* Return true if loop is known to have bounded number of iterations. */
2118 bool
2119 finite_loop_p (struct loop *loop)
2121 double_int nit;
2122 int flags;
2124 if (flag_unsafe_loop_optimizations)
2125 return true;
2126 flags = flags_from_decl_or_type (current_function_decl);
2127 if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE))
2129 if (dump_file && (dump_flags & TDF_DETAILS))
2130 fprintf (dump_file, "Found loop %i to be finite: it is within pure or const function.\n",
2131 loop->num);
2132 return true;
2135 if (loop->any_upper_bound
2136 || max_loop_iterations (loop, &nit))
2138 if (dump_file && (dump_flags & TDF_DETAILS))
2139 fprintf (dump_file, "Found loop %i to be finite: upper bound found.\n",
2140 loop->num);
2141 return true;
2143 return false;
2148 Analysis of a number of iterations of a loop by a brute-force evaluation.
2152 /* Bound on the number of iterations we try to evaluate. */
2154 #define MAX_ITERATIONS_TO_TRACK \
2155 ((unsigned) PARAM_VALUE (PARAM_MAX_ITERATIONS_TO_TRACK))
2157 /* Returns the loop phi node of LOOP such that ssa name X is derived from its
2158 result by a chain of operations such that all but exactly one of their
2159 operands are constants. */
2161 static gimple
2162 chain_of_csts_start (struct loop *loop, tree x)
2164 gimple stmt = SSA_NAME_DEF_STMT (x);
2165 tree use;
2166 basic_block bb = gimple_bb (stmt);
2167 enum tree_code code;
2169 if (!bb
2170 || !flow_bb_inside_loop_p (loop, bb))
2171 return NULL;
2173 if (gimple_code (stmt) == GIMPLE_PHI)
2175 if (bb == loop->header)
2176 return stmt;
2178 return NULL;
2181 if (gimple_code (stmt) != GIMPLE_ASSIGN
2182 || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
2183 return NULL;
2185 code = gimple_assign_rhs_code (stmt);
2186 if (gimple_references_memory_p (stmt)
2187 || TREE_CODE_CLASS (code) == tcc_reference
2188 || (code == ADDR_EXPR
2189 && !is_gimple_min_invariant (gimple_assign_rhs1 (stmt))))
2190 return NULL;
2192 use = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
2193 if (use == NULL_TREE)
2194 return NULL;
2196 return chain_of_csts_start (loop, use);
2199 /* Determines whether the expression X is derived from a result of a phi node
2200 in header of LOOP such that
2202 * the derivation of X consists only from operations with constants
2203 * the initial value of the phi node is constant
2204 * the value of the phi node in the next iteration can be derived from the
2205 value in the current iteration by a chain of operations with constants.
2207 If such phi node exists, it is returned, otherwise NULL is returned. */
2209 static gimple
2210 get_base_for (struct loop *loop, tree x)
2212 gimple phi;
2213 tree init, next;
2215 if (is_gimple_min_invariant (x))
2216 return NULL;
2218 phi = chain_of_csts_start (loop, x);
2219 if (!phi)
2220 return NULL;
2222 init = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
2223 next = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
2225 if (TREE_CODE (next) != SSA_NAME)
2226 return NULL;
2228 if (!is_gimple_min_invariant (init))
2229 return NULL;
2231 if (chain_of_csts_start (loop, next) != phi)
2232 return NULL;
2234 return phi;
2237 /* Given an expression X, then
2239 * if X is NULL_TREE, we return the constant BASE.
2240 * otherwise X is a SSA name, whose value in the considered loop is derived
2241 by a chain of operations with constant from a result of a phi node in
2242 the header of the loop. Then we return value of X when the value of the
2243 result of this phi node is given by the constant BASE. */
2245 static tree
2246 get_val_for (tree x, tree base)
2248 gimple stmt;
2250 gcc_checking_assert (is_gimple_min_invariant (base));
2252 if (!x)
2253 return base;
2255 stmt = SSA_NAME_DEF_STMT (x);
2256 if (gimple_code (stmt) == GIMPLE_PHI)
2257 return base;
2259 gcc_checking_assert (is_gimple_assign (stmt));
2261 /* STMT must be either an assignment of a single SSA name or an
2262 expression involving an SSA name and a constant. Try to fold that
2263 expression using the value for the SSA name. */
2264 if (gimple_assign_ssa_name_copy_p (stmt))
2265 return get_val_for (gimple_assign_rhs1 (stmt), base);
2266 else if (gimple_assign_rhs_class (stmt) == GIMPLE_UNARY_RHS
2267 && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
2269 return fold_build1 (gimple_assign_rhs_code (stmt),
2270 gimple_expr_type (stmt),
2271 get_val_for (gimple_assign_rhs1 (stmt), base));
2273 else if (gimple_assign_rhs_class (stmt) == GIMPLE_BINARY_RHS)
2275 tree rhs1 = gimple_assign_rhs1 (stmt);
2276 tree rhs2 = gimple_assign_rhs2 (stmt);
2277 if (TREE_CODE (rhs1) == SSA_NAME)
2278 rhs1 = get_val_for (rhs1, base);
2279 else if (TREE_CODE (rhs2) == SSA_NAME)
2280 rhs2 = get_val_for (rhs2, base);
2281 else
2282 gcc_unreachable ();
2283 return fold_build2 (gimple_assign_rhs_code (stmt),
2284 gimple_expr_type (stmt), rhs1, rhs2);
2286 else
2287 gcc_unreachable ();
2291 /* Tries to count the number of iterations of LOOP till it exits by EXIT
2292 by brute force -- i.e. by determining the value of the operands of the
2293 condition at EXIT in first few iterations of the loop (assuming that
2294 these values are constant) and determining the first one in that the
2295 condition is not satisfied. Returns the constant giving the number
2296 of the iterations of LOOP if successful, chrec_dont_know otherwise. */
2298 tree
2299 loop_niter_by_eval (struct loop *loop, edge exit)
2301 tree acnd;
2302 tree op[2], val[2], next[2], aval[2];
2303 gimple phi, cond;
2304 unsigned i, j;
2305 enum tree_code cmp;
2307 cond = last_stmt (exit->src);
2308 if (!cond || gimple_code (cond) != GIMPLE_COND)
2309 return chrec_dont_know;
2311 cmp = gimple_cond_code (cond);
2312 if (exit->flags & EDGE_TRUE_VALUE)
2313 cmp = invert_tree_comparison (cmp, false);
2315 switch (cmp)
2317 case EQ_EXPR:
2318 case NE_EXPR:
2319 case GT_EXPR:
2320 case GE_EXPR:
2321 case LT_EXPR:
2322 case LE_EXPR:
2323 op[0] = gimple_cond_lhs (cond);
2324 op[1] = gimple_cond_rhs (cond);
2325 break;
2327 default:
2328 return chrec_dont_know;
2331 for (j = 0; j < 2; j++)
2333 if (is_gimple_min_invariant (op[j]))
2335 val[j] = op[j];
2336 next[j] = NULL_TREE;
2337 op[j] = NULL_TREE;
2339 else
2341 phi = get_base_for (loop, op[j]);
2342 if (!phi)
2343 return chrec_dont_know;
2344 val[j] = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
2345 next[j] = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
2349 /* Don't issue signed overflow warnings. */
2350 fold_defer_overflow_warnings ();
2352 for (i = 0; i < MAX_ITERATIONS_TO_TRACK; i++)
2354 for (j = 0; j < 2; j++)
2355 aval[j] = get_val_for (op[j], val[j]);
2357 acnd = fold_binary (cmp, boolean_type_node, aval[0], aval[1]);
2358 if (acnd && integer_zerop (acnd))
2360 fold_undefer_and_ignore_overflow_warnings ();
2361 if (dump_file && (dump_flags & TDF_DETAILS))
2362 fprintf (dump_file,
2363 "Proved that loop %d iterates %d times using brute force.\n",
2364 loop->num, i);
2365 return build_int_cst (unsigned_type_node, i);
2368 for (j = 0; j < 2; j++)
2370 val[j] = get_val_for (next[j], val[j]);
2371 if (!is_gimple_min_invariant (val[j]))
2373 fold_undefer_and_ignore_overflow_warnings ();
2374 return chrec_dont_know;
2379 fold_undefer_and_ignore_overflow_warnings ();
2381 return chrec_dont_know;
2384 /* Finds the exit of the LOOP by that the loop exits after a constant
2385 number of iterations and stores the exit edge to *EXIT. The constant
2386 giving the number of iterations of LOOP is returned. The number of
2387 iterations is determined using loop_niter_by_eval (i.e. by brute force
2388 evaluation). If we are unable to find the exit for that loop_niter_by_eval
2389 determines the number of iterations, chrec_dont_know is returned. */
2391 tree
2392 find_loop_niter_by_eval (struct loop *loop, edge *exit)
2394 unsigned i;
2395 vec<edge> exits = get_loop_exit_edges (loop);
2396 edge ex;
2397 tree niter = NULL_TREE, aniter;
2399 *exit = NULL;
2401 /* Loops with multiple exits are expensive to handle and less important. */
2402 if (!flag_expensive_optimizations
2403 && exits.length () > 1)
2405 exits.release ();
2406 return chrec_dont_know;
2409 FOR_EACH_VEC_ELT (exits, i, ex)
2411 if (!just_once_each_iteration_p (loop, ex->src))
2412 continue;
2414 aniter = loop_niter_by_eval (loop, ex);
2415 if (chrec_contains_undetermined (aniter))
2416 continue;
2418 if (niter
2419 && !tree_int_cst_lt (aniter, niter))
2420 continue;
2422 niter = aniter;
2423 *exit = ex;
2425 exits.release ();
2427 return niter ? niter : chrec_dont_know;
2432 Analysis of upper bounds on number of iterations of a loop.
2436 static double_int derive_constant_upper_bound_ops (tree, tree,
2437 enum tree_code, tree);
2439 /* Returns a constant upper bound on the value of the right-hand side of
2440 an assignment statement STMT. */
2442 static double_int
2443 derive_constant_upper_bound_assign (gimple stmt)
2445 enum tree_code code = gimple_assign_rhs_code (stmt);
2446 tree op0 = gimple_assign_rhs1 (stmt);
2447 tree op1 = gimple_assign_rhs2 (stmt);
2449 return derive_constant_upper_bound_ops (TREE_TYPE (gimple_assign_lhs (stmt)),
2450 op0, code, op1);
2453 /* Returns a constant upper bound on the value of expression VAL. VAL
2454 is considered to be unsigned. If its type is signed, its value must
2455 be nonnegative. */
2457 static double_int
2458 derive_constant_upper_bound (tree val)
2460 enum tree_code code;
2461 tree op0, op1;
2463 extract_ops_from_tree (val, &code, &op0, &op1);
2464 return derive_constant_upper_bound_ops (TREE_TYPE (val), op0, code, op1);
2467 /* Returns a constant upper bound on the value of expression OP0 CODE OP1,
2468 whose type is TYPE. The expression is considered to be unsigned. If
2469 its type is signed, its value must be nonnegative. */
2471 static double_int
2472 derive_constant_upper_bound_ops (tree type, tree op0,
2473 enum tree_code code, tree op1)
2475 tree subtype, maxt;
2476 double_int bnd, max, mmax, cst;
2477 gimple stmt;
2479 if (INTEGRAL_TYPE_P (type))
2480 maxt = TYPE_MAX_VALUE (type);
2481 else
2482 maxt = upper_bound_in_type (type, type);
2484 max = tree_to_double_int (maxt);
2486 switch (code)
2488 case INTEGER_CST:
2489 return tree_to_double_int (op0);
2491 CASE_CONVERT:
2492 subtype = TREE_TYPE (op0);
2493 if (!TYPE_UNSIGNED (subtype)
2494 /* If TYPE is also signed, the fact that VAL is nonnegative implies
2495 that OP0 is nonnegative. */
2496 && TYPE_UNSIGNED (type)
2497 && !tree_expr_nonnegative_p (op0))
2499 /* If we cannot prove that the casted expression is nonnegative,
2500 we cannot establish more useful upper bound than the precision
2501 of the type gives us. */
2502 return max;
2505 /* We now know that op0 is an nonnegative value. Try deriving an upper
2506 bound for it. */
2507 bnd = derive_constant_upper_bound (op0);
2509 /* If the bound does not fit in TYPE, max. value of TYPE could be
2510 attained. */
2511 if (max.ult (bnd))
2512 return max;
2514 return bnd;
2516 case PLUS_EXPR:
2517 case POINTER_PLUS_EXPR:
2518 case MINUS_EXPR:
2519 if (TREE_CODE (op1) != INTEGER_CST
2520 || !tree_expr_nonnegative_p (op0))
2521 return max;
2523 /* Canonicalize to OP0 - CST. Consider CST to be signed, in order to
2524 choose the most logical way how to treat this constant regardless
2525 of the signedness of the type. */
2526 cst = tree_to_double_int (op1);
2527 cst = cst.sext (TYPE_PRECISION (type));
2528 if (code != MINUS_EXPR)
2529 cst = -cst;
2531 bnd = derive_constant_upper_bound (op0);
2533 if (cst.is_negative ())
2535 cst = -cst;
2536 /* Avoid CST == 0x80000... */
2537 if (cst.is_negative ())
2538 return max;;
2540 /* OP0 + CST. We need to check that
2541 BND <= MAX (type) - CST. */
2543 mmax -= cst;
2544 if (bnd.ugt (mmax))
2545 return max;
2547 return bnd + cst;
2549 else
2551 /* OP0 - CST, where CST >= 0.
2553 If TYPE is signed, we have already verified that OP0 >= 0, and we
2554 know that the result is nonnegative. This implies that
2555 VAL <= BND - CST.
2557 If TYPE is unsigned, we must additionally know that OP0 >= CST,
2558 otherwise the operation underflows.
2561 /* This should only happen if the type is unsigned; however, for
2562 buggy programs that use overflowing signed arithmetics even with
2563 -fno-wrapv, this condition may also be true for signed values. */
2564 if (bnd.ult (cst))
2565 return max;
2567 if (TYPE_UNSIGNED (type))
2569 tree tem = fold_binary (GE_EXPR, boolean_type_node, op0,
2570 double_int_to_tree (type, cst));
2571 if (!tem || integer_nonzerop (tem))
2572 return max;
2575 bnd -= cst;
2578 return bnd;
2580 case FLOOR_DIV_EXPR:
2581 case EXACT_DIV_EXPR:
2582 if (TREE_CODE (op1) != INTEGER_CST
2583 || tree_int_cst_sign_bit (op1))
2584 return max;
2586 bnd = derive_constant_upper_bound (op0);
2587 return bnd.udiv (tree_to_double_int (op1), FLOOR_DIV_EXPR);
2589 case BIT_AND_EXPR:
2590 if (TREE_CODE (op1) != INTEGER_CST
2591 || tree_int_cst_sign_bit (op1))
2592 return max;
2593 return tree_to_double_int (op1);
2595 case SSA_NAME:
2596 stmt = SSA_NAME_DEF_STMT (op0);
2597 if (gimple_code (stmt) != GIMPLE_ASSIGN
2598 || gimple_assign_lhs (stmt) != op0)
2599 return max;
2600 return derive_constant_upper_bound_assign (stmt);
2602 default:
2603 return max;
2607 /* Emit a -Waggressive-loop-optimizations warning if needed. */
2609 static void
2610 do_warn_aggressive_loop_optimizations (struct loop *loop,
2611 double_int i_bound, gimple stmt)
2613 /* Don't warn if the loop doesn't have known constant bound. */
2614 if (!loop->nb_iterations
2615 || TREE_CODE (loop->nb_iterations) != INTEGER_CST
2616 || !warn_aggressive_loop_optimizations
2617 /* To avoid warning multiple times for the same loop,
2618 only start warning when we preserve loops. */
2619 || (cfun->curr_properties & PROP_loops) == 0
2620 /* Only warn once per loop. */
2621 || loop->warned_aggressive_loop_optimizations
2622 /* Only warn if undefined behavior gives us lower estimate than the
2623 known constant bound. */
2624 || i_bound.ucmp (tree_to_double_int (loop->nb_iterations)) >= 0
2625 /* And undefined behavior happens unconditionally. */
2626 || !dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (stmt)))
2627 return;
2629 edge e = single_exit (loop);
2630 if (e == NULL)
2631 return;
2633 gimple estmt = last_stmt (e->src);
2634 if (warning_at (gimple_location (stmt), OPT_Waggressive_loop_optimizations,
2635 "iteration %E invokes undefined behavior",
2636 double_int_to_tree (TREE_TYPE (loop->nb_iterations),
2637 i_bound)))
2638 inform (gimple_location (estmt), "containing loop");
2639 loop->warned_aggressive_loop_optimizations = true;
2642 /* Records that AT_STMT is executed at most BOUND + 1 times in LOOP. IS_EXIT
2643 is true if the loop is exited immediately after STMT, and this exit
2644 is taken at last when the STMT is executed BOUND + 1 times.
2645 REALISTIC is true if BOUND is expected to be close to the real number
2646 of iterations. UPPER is true if we are sure the loop iterates at most
2647 BOUND times. I_BOUND is an unsigned double_int upper estimate on BOUND. */
2649 static void
2650 record_estimate (struct loop *loop, tree bound, double_int i_bound,
2651 gimple at_stmt, bool is_exit, bool realistic, bool upper)
2653 double_int delta;
2655 if (dump_file && (dump_flags & TDF_DETAILS))
2657 fprintf (dump_file, "Statement %s", is_exit ? "(exit)" : "");
2658 print_gimple_stmt (dump_file, at_stmt, 0, TDF_SLIM);
2659 fprintf (dump_file, " is %sexecuted at most ",
2660 upper ? "" : "probably ");
2661 print_generic_expr (dump_file, bound, TDF_SLIM);
2662 fprintf (dump_file, " (bounded by ");
2663 dump_double_int (dump_file, i_bound, true);
2664 fprintf (dump_file, ") + 1 times in loop %d.\n", loop->num);
2667 /* If the I_BOUND is just an estimate of BOUND, it rarely is close to the
2668 real number of iterations. */
2669 if (TREE_CODE (bound) != INTEGER_CST)
2670 realistic = false;
2671 else
2672 gcc_checking_assert (i_bound == tree_to_double_int (bound));
2673 if (!upper && !realistic)
2674 return;
2676 /* If we have a guaranteed upper bound, record it in the appropriate
2677 list, unless this is an !is_exit bound (i.e. undefined behavior in
2678 at_stmt) in a loop with known constant number of iterations. */
2679 if (upper
2680 && (is_exit
2681 || loop->nb_iterations == NULL_TREE
2682 || TREE_CODE (loop->nb_iterations) != INTEGER_CST))
2684 struct nb_iter_bound *elt = ggc_alloc_nb_iter_bound ();
2686 elt->bound = i_bound;
2687 elt->stmt = at_stmt;
2688 elt->is_exit = is_exit;
2689 elt->next = loop->bounds;
2690 loop->bounds = elt;
2693 /* If statement is executed on every path to the loop latch, we can directly
2694 infer the upper bound on the # of iterations of the loop. */
2695 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (at_stmt)))
2696 return;
2698 /* Update the number of iteration estimates according to the bound.
2699 If at_stmt is an exit then the loop latch is executed at most BOUND times,
2700 otherwise it can be executed BOUND + 1 times. We will lower the estimate
2701 later if such statement must be executed on last iteration */
2702 if (is_exit)
2703 delta = double_int_zero;
2704 else
2705 delta = double_int_one;
2706 i_bound += delta;
2708 /* If an overflow occurred, ignore the result. */
2709 if (i_bound.ult (delta))
2710 return;
2712 if (upper && !is_exit)
2713 do_warn_aggressive_loop_optimizations (loop, i_bound, at_stmt);
2714 record_niter_bound (loop, i_bound, realistic, upper);
2717 /* Record the estimate on number of iterations of LOOP based on the fact that
2718 the induction variable BASE + STEP * i evaluated in STMT does not wrap and
2719 its values belong to the range <LOW, HIGH>. REALISTIC is true if the
2720 estimated number of iterations is expected to be close to the real one.
2721 UPPER is true if we are sure the induction variable does not wrap. */
2723 static void
2724 record_nonwrapping_iv (struct loop *loop, tree base, tree step, gimple stmt,
2725 tree low, tree high, bool realistic, bool upper)
2727 tree niter_bound, extreme, delta;
2728 tree type = TREE_TYPE (base), unsigned_type;
2729 double_int max;
2731 if (TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
2732 return;
2734 if (dump_file && (dump_flags & TDF_DETAILS))
2736 fprintf (dump_file, "Induction variable (");
2737 print_generic_expr (dump_file, TREE_TYPE (base), TDF_SLIM);
2738 fprintf (dump_file, ") ");
2739 print_generic_expr (dump_file, base, TDF_SLIM);
2740 fprintf (dump_file, " + ");
2741 print_generic_expr (dump_file, step, TDF_SLIM);
2742 fprintf (dump_file, " * iteration does not wrap in statement ");
2743 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
2744 fprintf (dump_file, " in loop %d.\n", loop->num);
2747 unsigned_type = unsigned_type_for (type);
2748 base = fold_convert (unsigned_type, base);
2749 step = fold_convert (unsigned_type, step);
2751 if (tree_int_cst_sign_bit (step))
2753 extreme = fold_convert (unsigned_type, low);
2754 if (TREE_CODE (base) != INTEGER_CST)
2755 base = fold_convert (unsigned_type, high);
2756 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
2757 step = fold_build1 (NEGATE_EXPR, unsigned_type, step);
2759 else
2761 extreme = fold_convert (unsigned_type, high);
2762 if (TREE_CODE (base) != INTEGER_CST)
2763 base = fold_convert (unsigned_type, low);
2764 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
2767 /* STMT is executed at most NITER_BOUND + 1 times, since otherwise the value
2768 would get out of the range. */
2769 niter_bound = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step);
2770 max = derive_constant_upper_bound (niter_bound);
2771 record_estimate (loop, niter_bound, max, stmt, false, realistic, upper);
2774 /* Determine information about number of iterations a LOOP from the index
2775 IDX of a data reference accessed in STMT. RELIABLE is true if STMT is
2776 guaranteed to be executed in every iteration of LOOP. Callback for
2777 for_each_index. */
2779 struct ilb_data
2781 struct loop *loop;
2782 gimple stmt;
2785 static bool
2786 idx_infer_loop_bounds (tree base, tree *idx, void *dta)
2788 struct ilb_data *data = (struct ilb_data *) dta;
2789 tree ev, init, step;
2790 tree low, high, type, next;
2791 bool sign, upper = true, at_end = false;
2792 struct loop *loop = data->loop;
2793 bool reliable = true;
2795 if (TREE_CODE (base) != ARRAY_REF)
2796 return true;
2798 /* For arrays at the end of the structure, we are not guaranteed that they
2799 do not really extend over their declared size. However, for arrays of
2800 size greater than one, this is unlikely to be intended. */
2801 if (array_at_struct_end_p (base))
2803 at_end = true;
2804 upper = false;
2807 struct loop *dloop = loop_containing_stmt (data->stmt);
2808 if (!dloop)
2809 return true;
2811 ev = analyze_scalar_evolution (dloop, *idx);
2812 ev = instantiate_parameters (loop, ev);
2813 init = initial_condition (ev);
2814 step = evolution_part_in_loop_num (ev, loop->num);
2816 if (!init
2817 || !step
2818 || TREE_CODE (step) != INTEGER_CST
2819 || integer_zerop (step)
2820 || tree_contains_chrecs (init, NULL)
2821 || chrec_contains_symbols_defined_in_loop (init, loop->num))
2822 return true;
2824 low = array_ref_low_bound (base);
2825 high = array_ref_up_bound (base);
2827 /* The case of nonconstant bounds could be handled, but it would be
2828 complicated. */
2829 if (TREE_CODE (low) != INTEGER_CST
2830 || !high
2831 || TREE_CODE (high) != INTEGER_CST)
2832 return true;
2833 sign = tree_int_cst_sign_bit (step);
2834 type = TREE_TYPE (step);
2836 /* The array of length 1 at the end of a structure most likely extends
2837 beyond its bounds. */
2838 if (at_end
2839 && operand_equal_p (low, high, 0))
2840 return true;
2842 /* In case the relevant bound of the array does not fit in type, or
2843 it does, but bound + step (in type) still belongs into the range of the
2844 array, the index may wrap and still stay within the range of the array
2845 (consider e.g. if the array is indexed by the full range of
2846 unsigned char).
2848 To make things simpler, we require both bounds to fit into type, although
2849 there are cases where this would not be strictly necessary. */
2850 if (!int_fits_type_p (high, type)
2851 || !int_fits_type_p (low, type))
2852 return true;
2853 low = fold_convert (type, low);
2854 high = fold_convert (type, high);
2856 if (sign)
2857 next = fold_binary (PLUS_EXPR, type, low, step);
2858 else
2859 next = fold_binary (PLUS_EXPR, type, high, step);
2861 if (tree_int_cst_compare (low, next) <= 0
2862 && tree_int_cst_compare (next, high) <= 0)
2863 return true;
2865 /* If access is not executed on every iteration, we must ensure that overlow may
2866 not make the access valid later. */
2867 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (data->stmt))
2868 && scev_probably_wraps_p (initial_condition_in_loop_num (ev, loop->num),
2869 step, data->stmt, loop, true))
2870 reliable = false;
2872 record_nonwrapping_iv (loop, init, step, data->stmt, low, high, reliable, upper);
2873 return true;
2876 /* Determine information about number of iterations a LOOP from the bounds
2877 of arrays in the data reference REF accessed in STMT. RELIABLE is true if
2878 STMT is guaranteed to be executed in every iteration of LOOP.*/
2880 static void
2881 infer_loop_bounds_from_ref (struct loop *loop, gimple stmt, tree ref)
2883 struct ilb_data data;
2885 data.loop = loop;
2886 data.stmt = stmt;
2887 for_each_index (&ref, idx_infer_loop_bounds, &data);
2890 /* Determine information about number of iterations of a LOOP from the way
2891 arrays are used in STMT. RELIABLE is true if STMT is guaranteed to be
2892 executed in every iteration of LOOP. */
2894 static void
2895 infer_loop_bounds_from_array (struct loop *loop, gimple stmt)
2897 if (is_gimple_assign (stmt))
2899 tree op0 = gimple_assign_lhs (stmt);
2900 tree op1 = gimple_assign_rhs1 (stmt);
2902 /* For each memory access, analyze its access function
2903 and record a bound on the loop iteration domain. */
2904 if (REFERENCE_CLASS_P (op0))
2905 infer_loop_bounds_from_ref (loop, stmt, op0);
2907 if (REFERENCE_CLASS_P (op1))
2908 infer_loop_bounds_from_ref (loop, stmt, op1);
2910 else if (is_gimple_call (stmt))
2912 tree arg, lhs;
2913 unsigned i, n = gimple_call_num_args (stmt);
2915 lhs = gimple_call_lhs (stmt);
2916 if (lhs && REFERENCE_CLASS_P (lhs))
2917 infer_loop_bounds_from_ref (loop, stmt, lhs);
2919 for (i = 0; i < n; i++)
2921 arg = gimple_call_arg (stmt, i);
2922 if (REFERENCE_CLASS_P (arg))
2923 infer_loop_bounds_from_ref (loop, stmt, arg);
2928 /* Determine information about number of iterations of a LOOP from the fact
2929 that pointer arithmetics in STMT does not overflow. */
2931 static void
2932 infer_loop_bounds_from_pointer_arith (struct loop *loop, gimple stmt)
2934 tree def, base, step, scev, type, low, high;
2935 tree var, ptr;
2937 if (!is_gimple_assign (stmt)
2938 || gimple_assign_rhs_code (stmt) != POINTER_PLUS_EXPR)
2939 return;
2941 def = gimple_assign_lhs (stmt);
2942 if (TREE_CODE (def) != SSA_NAME)
2943 return;
2945 type = TREE_TYPE (def);
2946 if (!nowrap_type_p (type))
2947 return;
2949 ptr = gimple_assign_rhs1 (stmt);
2950 if (!expr_invariant_in_loop_p (loop, ptr))
2951 return;
2953 var = gimple_assign_rhs2 (stmt);
2954 if (TYPE_PRECISION (type) != TYPE_PRECISION (TREE_TYPE (var)))
2955 return;
2957 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
2958 if (chrec_contains_undetermined (scev))
2959 return;
2961 base = initial_condition_in_loop_num (scev, loop->num);
2962 step = evolution_part_in_loop_num (scev, loop->num);
2964 if (!base || !step
2965 || TREE_CODE (step) != INTEGER_CST
2966 || tree_contains_chrecs (base, NULL)
2967 || chrec_contains_symbols_defined_in_loop (base, loop->num))
2968 return;
2970 low = lower_bound_in_type (type, type);
2971 high = upper_bound_in_type (type, type);
2973 /* In C, pointer arithmetic p + 1 cannot use a NULL pointer, and p - 1 cannot
2974 produce a NULL pointer. The contrary would mean NULL points to an object,
2975 while NULL is supposed to compare unequal with the address of all objects.
2976 Furthermore, p + 1 cannot produce a NULL pointer and p - 1 cannot use a
2977 NULL pointer since that would mean wrapping, which we assume here not to
2978 happen. So, we can exclude NULL from the valid range of pointer
2979 arithmetic. */
2980 if (flag_delete_null_pointer_checks && int_cst_value (low) == 0)
2981 low = build_int_cstu (TREE_TYPE (low), TYPE_ALIGN_UNIT (TREE_TYPE (type)));
2983 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
2986 /* Determine information about number of iterations of a LOOP from the fact
2987 that signed arithmetics in STMT does not overflow. */
2989 static void
2990 infer_loop_bounds_from_signedness (struct loop *loop, gimple stmt)
2992 tree def, base, step, scev, type, low, high;
2994 if (gimple_code (stmt) != GIMPLE_ASSIGN)
2995 return;
2997 def = gimple_assign_lhs (stmt);
2999 if (TREE_CODE (def) != SSA_NAME)
3000 return;
3002 type = TREE_TYPE (def);
3003 if (!INTEGRAL_TYPE_P (type)
3004 || !TYPE_OVERFLOW_UNDEFINED (type))
3005 return;
3007 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
3008 if (chrec_contains_undetermined (scev))
3009 return;
3011 base = initial_condition_in_loop_num (scev, loop->num);
3012 step = evolution_part_in_loop_num (scev, loop->num);
3014 if (!base || !step
3015 || TREE_CODE (step) != INTEGER_CST
3016 || tree_contains_chrecs (base, NULL)
3017 || chrec_contains_symbols_defined_in_loop (base, loop->num))
3018 return;
3020 low = lower_bound_in_type (type, type);
3021 high = upper_bound_in_type (type, type);
3023 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
3026 /* The following analyzers are extracting informations on the bounds
3027 of LOOP from the following undefined behaviors:
3029 - data references should not access elements over the statically
3030 allocated size,
3032 - signed variables should not overflow when flag_wrapv is not set.
3035 static void
3036 infer_loop_bounds_from_undefined (struct loop *loop)
3038 unsigned i;
3039 basic_block *bbs;
3040 gimple_stmt_iterator bsi;
3041 basic_block bb;
3042 bool reliable;
3044 bbs = get_loop_body (loop);
3046 for (i = 0; i < loop->num_nodes; i++)
3048 bb = bbs[i];
3050 /* If BB is not executed in each iteration of the loop, we cannot
3051 use the operations in it to infer reliable upper bound on the
3052 # of iterations of the loop. However, we can use it as a guess.
3053 Reliable guesses come only from array bounds. */
3054 reliable = dominated_by_p (CDI_DOMINATORS, loop->latch, bb);
3056 for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
3058 gimple stmt = gsi_stmt (bsi);
3060 infer_loop_bounds_from_array (loop, stmt);
3062 if (reliable)
3064 infer_loop_bounds_from_signedness (loop, stmt);
3065 infer_loop_bounds_from_pointer_arith (loop, stmt);
3071 free (bbs);
3076 /* Compare double ints, callback for qsort. */
3078 static int
3079 double_int_cmp (const void *p1, const void *p2)
3081 const double_int *d1 = (const double_int *)p1;
3082 const double_int *d2 = (const double_int *)p2;
3083 if (*d1 == *d2)
3084 return 0;
3085 if (d1->ult (*d2))
3086 return -1;
3087 return 1;
3090 /* Return index of BOUND in BOUNDS array sorted in increasing order.
3091 Lookup by binary search. */
3093 static int
3094 bound_index (vec<double_int> bounds, double_int bound)
3096 unsigned int end = bounds.length ();
3097 unsigned int begin = 0;
3099 /* Find a matching index by means of a binary search. */
3100 while (begin != end)
3102 unsigned int middle = (begin + end) / 2;
3103 double_int index = bounds[middle];
3105 if (index == bound)
3106 return middle;
3107 else if (index.ult (bound))
3108 begin = middle + 1;
3109 else
3110 end = middle;
3112 gcc_unreachable ();
3115 /* We recorded loop bounds only for statements dominating loop latch (and thus
3116 executed each loop iteration). If there are any bounds on statements not
3117 dominating the loop latch we can improve the estimate by walking the loop
3118 body and seeing if every path from loop header to loop latch contains
3119 some bounded statement. */
3121 static void
3122 discover_iteration_bound_by_body_walk (struct loop *loop)
3124 pointer_map_t *bb_bounds;
3125 struct nb_iter_bound *elt;
3126 vec<double_int> bounds = vNULL;
3127 vec<vec<basic_block> > queues = vNULL;
3128 vec<basic_block> queue = vNULL;
3129 ptrdiff_t queue_index;
3130 ptrdiff_t latch_index = 0;
3131 pointer_map_t *block_priority;
3133 /* Discover what bounds may interest us. */
3134 for (elt = loop->bounds; elt; elt = elt->next)
3136 double_int bound = elt->bound;
3138 /* Exit terminates loop at given iteration, while non-exits produce undefined
3139 effect on the next iteration. */
3140 if (!elt->is_exit)
3142 bound += double_int_one;
3143 /* If an overflow occurred, ignore the result. */
3144 if (bound.is_zero ())
3145 continue;
3148 if (!loop->any_upper_bound
3149 || bound.ult (loop->nb_iterations_upper_bound))
3150 bounds.safe_push (bound);
3153 /* Exit early if there is nothing to do. */
3154 if (!bounds.exists ())
3155 return;
3157 if (dump_file && (dump_flags & TDF_DETAILS))
3158 fprintf (dump_file, " Trying to walk loop body to reduce the bound.\n");
3160 /* Sort the bounds in decreasing order. */
3161 qsort (bounds.address (), bounds.length (),
3162 sizeof (double_int), double_int_cmp);
3164 /* For every basic block record the lowest bound that is guaranteed to
3165 terminate the loop. */
3167 bb_bounds = pointer_map_create ();
3168 for (elt = loop->bounds; elt; elt = elt->next)
3170 double_int bound = elt->bound;
3171 if (!elt->is_exit)
3173 bound += double_int_one;
3174 /* If an overflow occurred, ignore the result. */
3175 if (bound.is_zero ())
3176 continue;
3179 if (!loop->any_upper_bound
3180 || bound.ult (loop->nb_iterations_upper_bound))
3182 ptrdiff_t index = bound_index (bounds, bound);
3183 void **entry = pointer_map_contains (bb_bounds,
3184 gimple_bb (elt->stmt));
3185 if (!entry)
3186 *pointer_map_insert (bb_bounds,
3187 gimple_bb (elt->stmt)) = (void *)index;
3188 else if ((ptrdiff_t)*entry > index)
3189 *entry = (void *)index;
3193 block_priority = pointer_map_create ();
3195 /* Perform shortest path discovery loop->header ... loop->latch.
3197 The "distance" is given by the smallest loop bound of basic block
3198 present in the path and we look for path with largest smallest bound
3199 on it.
3201 To avoid the need for fibonacci heap on double ints we simply compress
3202 double ints into indexes to BOUNDS array and then represent the queue
3203 as arrays of queues for every index.
3204 Index of BOUNDS.length() means that the execution of given BB has
3205 no bounds determined.
3207 VISITED is a pointer map translating basic block into smallest index
3208 it was inserted into the priority queue with. */
3209 latch_index = -1;
3211 /* Start walk in loop header with index set to infinite bound. */
3212 queue_index = bounds.length ();
3213 queues.safe_grow_cleared (queue_index + 1);
3214 queue.safe_push (loop->header);
3215 queues[queue_index] = queue;
3216 *pointer_map_insert (block_priority, loop->header) = (void *)queue_index;
3218 for (; queue_index >= 0; queue_index--)
3220 if (latch_index < queue_index)
3222 while (queues[queue_index].length ())
3224 basic_block bb;
3225 ptrdiff_t bound_index = queue_index;
3226 void **entry;
3227 edge e;
3228 edge_iterator ei;
3230 queue = queues[queue_index];
3231 bb = queue.pop ();
3233 /* OK, we later inserted the BB with lower priority, skip it. */
3234 if ((ptrdiff_t)*pointer_map_contains (block_priority, bb) > queue_index)
3235 continue;
3237 /* See if we can improve the bound. */
3238 entry = pointer_map_contains (bb_bounds, bb);
3239 if (entry && (ptrdiff_t)*entry < bound_index)
3240 bound_index = (ptrdiff_t)*entry;
3242 /* Insert succesors into the queue, watch for latch edge
3243 and record greatest index we saw. */
3244 FOR_EACH_EDGE (e, ei, bb->succs)
3246 bool insert = false;
3247 void **entry;
3249 if (loop_exit_edge_p (loop, e))
3250 continue;
3252 if (e == loop_latch_edge (loop)
3253 && latch_index < bound_index)
3254 latch_index = bound_index;
3255 else if (!(entry = pointer_map_contains (block_priority, e->dest)))
3257 insert = true;
3258 *pointer_map_insert (block_priority, e->dest) = (void *)bound_index;
3260 else if ((ptrdiff_t)*entry < bound_index)
3262 insert = true;
3263 *entry = (void *)bound_index;
3266 if (insert)
3267 queues[bound_index].safe_push (e->dest);
3271 queues[queue_index].release ();
3274 gcc_assert (latch_index >= 0);
3275 if ((unsigned)latch_index < bounds.length ())
3277 if (dump_file && (dump_flags & TDF_DETAILS))
3279 fprintf (dump_file, "Found better loop bound ");
3280 dump_double_int (dump_file, bounds[latch_index], true);
3281 fprintf (dump_file, "\n");
3283 record_niter_bound (loop, bounds[latch_index], false, true);
3286 queues.release ();
3287 bounds.release ();
3288 pointer_map_destroy (bb_bounds);
3289 pointer_map_destroy (block_priority);
3292 /* See if every path cross the loop goes through a statement that is known
3293 to not execute at the last iteration. In that case we can decrese iteration
3294 count by 1. */
3296 static void
3297 maybe_lower_iteration_bound (struct loop *loop)
3299 pointer_set_t *not_executed_last_iteration = NULL;
3300 struct nb_iter_bound *elt;
3301 bool found_exit = false;
3302 vec<basic_block> queue = vNULL;
3303 bitmap visited;
3305 /* Collect all statements with interesting (i.e. lower than
3306 nb_iterations_upper_bound) bound on them.
3308 TODO: Due to the way record_estimate choose estimates to store, the bounds
3309 will be always nb_iterations_upper_bound-1. We can change this to record
3310 also statements not dominating the loop latch and update the walk bellow
3311 to the shortest path algorthm. */
3312 for (elt = loop->bounds; elt; elt = elt->next)
3314 if (!elt->is_exit
3315 && elt->bound.ult (loop->nb_iterations_upper_bound))
3317 if (!not_executed_last_iteration)
3318 not_executed_last_iteration = pointer_set_create ();
3319 pointer_set_insert (not_executed_last_iteration, elt->stmt);
3322 if (!not_executed_last_iteration)
3323 return;
3325 /* Start DFS walk in the loop header and see if we can reach the
3326 loop latch or any of the exits (including statements with side
3327 effects that may terminate the loop otherwise) without visiting
3328 any of the statements known to have undefined effect on the last
3329 iteration. */
3330 queue.safe_push (loop->header);
3331 visited = BITMAP_ALLOC (NULL);
3332 bitmap_set_bit (visited, loop->header->index);
3333 found_exit = false;
3337 basic_block bb = queue.pop ();
3338 gimple_stmt_iterator gsi;
3339 bool stmt_found = false;
3341 /* Loop for possible exits and statements bounding the execution. */
3342 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
3344 gimple stmt = gsi_stmt (gsi);
3345 if (pointer_set_contains (not_executed_last_iteration, stmt))
3347 stmt_found = true;
3348 break;
3350 if (gimple_has_side_effects (stmt))
3352 found_exit = true;
3353 break;
3356 if (found_exit)
3357 break;
3359 /* If no bounding statement is found, continue the walk. */
3360 if (!stmt_found)
3362 edge e;
3363 edge_iterator ei;
3365 FOR_EACH_EDGE (e, ei, bb->succs)
3367 if (loop_exit_edge_p (loop, e)
3368 || e == loop_latch_edge (loop))
3370 found_exit = true;
3371 break;
3373 if (bitmap_set_bit (visited, e->dest->index))
3374 queue.safe_push (e->dest);
3378 while (queue.length () && !found_exit);
3380 /* If every path through the loop reach bounding statement before exit,
3381 then we know the last iteration of the loop will have undefined effect
3382 and we can decrease number of iterations. */
3384 if (!found_exit)
3386 if (dump_file && (dump_flags & TDF_DETAILS))
3387 fprintf (dump_file, "Reducing loop iteration estimate by 1; "
3388 "undefined statement must be executed at the last iteration.\n");
3389 record_niter_bound (loop, loop->nb_iterations_upper_bound - double_int_one,
3390 false, true);
3392 BITMAP_FREE (visited);
3393 queue.release ();
3394 pointer_set_destroy (not_executed_last_iteration);
3397 /* Records estimates on numbers of iterations of LOOP. If USE_UNDEFINED_P
3398 is true also use estimates derived from undefined behavior. */
3400 static void
3401 estimate_numbers_of_iterations_loop (struct loop *loop)
3403 vec<edge> exits;
3404 tree niter, type;
3405 unsigned i;
3406 struct tree_niter_desc niter_desc;
3407 edge ex;
3408 double_int bound;
3409 edge likely_exit;
3411 /* Give up if we already have tried to compute an estimation. */
3412 if (loop->estimate_state != EST_NOT_COMPUTED)
3413 return;
3415 loop->estimate_state = EST_AVAILABLE;
3416 /* Force estimate compuation but leave any existing upper bound in place. */
3417 loop->any_estimate = false;
3419 /* Ensure that loop->nb_iterations is computed if possible. If it turns out
3420 to be constant, we avoid undefined behavior implied bounds and instead
3421 diagnose those loops with -Waggressive-loop-optimizations. */
3422 number_of_latch_executions (loop);
3424 exits = get_loop_exit_edges (loop);
3425 likely_exit = single_likely_exit (loop);
3426 FOR_EACH_VEC_ELT (exits, i, ex)
3428 if (!number_of_iterations_exit (loop, ex, &niter_desc, false, false))
3429 continue;
3431 niter = niter_desc.niter;
3432 type = TREE_TYPE (niter);
3433 if (TREE_CODE (niter_desc.may_be_zero) != INTEGER_CST)
3434 niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
3435 build_int_cst (type, 0),
3436 niter);
3437 record_estimate (loop, niter, niter_desc.max,
3438 last_stmt (ex->src),
3439 true, ex == likely_exit, true);
3441 exits.release ();
3443 if (flag_aggressive_loop_optimizations)
3444 infer_loop_bounds_from_undefined (loop);
3446 discover_iteration_bound_by_body_walk (loop);
3448 maybe_lower_iteration_bound (loop);
3450 /* If we have a measured profile, use it to estimate the number of
3451 iterations. */
3452 if (loop->header->count != 0)
3454 gcov_type nit = expected_loop_iterations_unbounded (loop) + 1;
3455 bound = gcov_type_to_double_int (nit);
3456 record_niter_bound (loop, bound, true, false);
3459 /* If we know the exact number of iterations of this loop, try to
3460 not break code with undefined behavior by not recording smaller
3461 maximum number of iterations. */
3462 if (loop->nb_iterations
3463 && TREE_CODE (loop->nb_iterations) == INTEGER_CST)
3465 loop->any_upper_bound = true;
3466 loop->nb_iterations_upper_bound
3467 = tree_to_double_int (loop->nb_iterations);
3471 /* Sets NIT to the estimated number of executions of the latch of the
3472 LOOP. If CONSERVATIVE is true, we must be sure that NIT is at least as
3473 large as the number of iterations. If we have no reliable estimate,
3474 the function returns false, otherwise returns true. */
3476 bool
3477 estimated_loop_iterations (struct loop *loop, double_int *nit)
3479 /* When SCEV information is available, try to update loop iterations
3480 estimate. Otherwise just return whatever we recorded earlier. */
3481 if (scev_initialized_p ())
3482 estimate_numbers_of_iterations_loop (loop);
3484 return (get_estimated_loop_iterations (loop, nit));
3487 /* Similar to estimated_loop_iterations, but returns the estimate only
3488 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
3489 on the number of iterations of LOOP could not be derived, returns -1. */
3491 HOST_WIDE_INT
3492 estimated_loop_iterations_int (struct loop *loop)
3494 double_int nit;
3495 HOST_WIDE_INT hwi_nit;
3497 if (!estimated_loop_iterations (loop, &nit))
3498 return -1;
3500 if (!nit.fits_shwi ())
3501 return -1;
3502 hwi_nit = nit.to_shwi ();
3504 return hwi_nit < 0 ? -1 : hwi_nit;
3508 /* Sets NIT to an upper bound for the maximum number of executions of the
3509 latch of the LOOP. If we have no reliable estimate, the function returns
3510 false, otherwise returns true. */
3512 bool
3513 max_loop_iterations (struct loop *loop, double_int *nit)
3515 /* When SCEV information is available, try to update loop iterations
3516 estimate. Otherwise just return whatever we recorded earlier. */
3517 if (scev_initialized_p ())
3518 estimate_numbers_of_iterations_loop (loop);
3520 return get_max_loop_iterations (loop, nit);
3523 /* Similar to max_loop_iterations, but returns the estimate only
3524 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
3525 on the number of iterations of LOOP could not be derived, returns -1. */
3527 HOST_WIDE_INT
3528 max_loop_iterations_int (struct loop *loop)
3530 double_int nit;
3531 HOST_WIDE_INT hwi_nit;
3533 if (!max_loop_iterations (loop, &nit))
3534 return -1;
3536 if (!nit.fits_shwi ())
3537 return -1;
3538 hwi_nit = nit.to_shwi ();
3540 return hwi_nit < 0 ? -1 : hwi_nit;
3543 /* Returns an estimate for the number of executions of statements
3544 in the LOOP. For statements before the loop exit, this exceeds
3545 the number of execution of the latch by one. */
3547 HOST_WIDE_INT
3548 estimated_stmt_executions_int (struct loop *loop)
3550 HOST_WIDE_INT nit = estimated_loop_iterations_int (loop);
3551 HOST_WIDE_INT snit;
3553 if (nit == -1)
3554 return -1;
3556 snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
3558 /* If the computation overflows, return -1. */
3559 return snit < 0 ? -1 : snit;
3562 /* Sets NIT to the estimated maximum number of executions of the latch of the
3563 LOOP, plus one. If we have no reliable estimate, the function returns
3564 false, otherwise returns true. */
3566 bool
3567 max_stmt_executions (struct loop *loop, double_int *nit)
3569 double_int nit_minus_one;
3571 if (!max_loop_iterations (loop, nit))
3572 return false;
3574 nit_minus_one = *nit;
3576 *nit += double_int_one;
3578 return (*nit).ugt (nit_minus_one);
3581 /* Sets NIT to the estimated number of executions of the latch of the
3582 LOOP, plus one. If we have no reliable estimate, the function returns
3583 false, otherwise returns true. */
3585 bool
3586 estimated_stmt_executions (struct loop *loop, double_int *nit)
3588 double_int nit_minus_one;
3590 if (!estimated_loop_iterations (loop, nit))
3591 return false;
3593 nit_minus_one = *nit;
3595 *nit += double_int_one;
3597 return (*nit).ugt (nit_minus_one);
3600 /* Records estimates on numbers of iterations of loops. */
3602 void
3603 estimate_numbers_of_iterations (void)
3605 struct loop *loop;
3607 /* We don't want to issue signed overflow warnings while getting
3608 loop iteration estimates. */
3609 fold_defer_overflow_warnings ();
3611 FOR_EACH_LOOP (loop, 0)
3613 estimate_numbers_of_iterations_loop (loop);
3616 fold_undefer_and_ignore_overflow_warnings ();
3619 /* Returns true if statement S1 dominates statement S2. */
3621 bool
3622 stmt_dominates_stmt_p (gimple s1, gimple s2)
3624 basic_block bb1 = gimple_bb (s1), bb2 = gimple_bb (s2);
3626 if (!bb1
3627 || s1 == s2)
3628 return true;
3630 if (bb1 == bb2)
3632 gimple_stmt_iterator bsi;
3634 if (gimple_code (s2) == GIMPLE_PHI)
3635 return false;
3637 if (gimple_code (s1) == GIMPLE_PHI)
3638 return true;
3640 for (bsi = gsi_start_bb (bb1); gsi_stmt (bsi) != s2; gsi_next (&bsi))
3641 if (gsi_stmt (bsi) == s1)
3642 return true;
3644 return false;
3647 return dominated_by_p (CDI_DOMINATORS, bb2, bb1);
3650 /* Returns true when we can prove that the number of executions of
3651 STMT in the loop is at most NITER, according to the bound on
3652 the number of executions of the statement NITER_BOUND->stmt recorded in
3653 NITER_BOUND and fact that NITER_BOUND->stmt dominate STMT.
3655 ??? This code can become quite a CPU hog - we can have many bounds,
3656 and large basic block forcing stmt_dominates_stmt_p to be queried
3657 many times on a large basic blocks, so the whole thing is O(n^2)
3658 for scev_probably_wraps_p invocation (that can be done n times).
3660 It would make more sense (and give better answers) to remember BB
3661 bounds computed by discover_iteration_bound_by_body_walk. */
3663 static bool
3664 n_of_executions_at_most (gimple stmt,
3665 struct nb_iter_bound *niter_bound,
3666 tree niter)
3668 double_int bound = niter_bound->bound;
3669 tree nit_type = TREE_TYPE (niter), e;
3670 enum tree_code cmp;
3672 gcc_assert (TYPE_UNSIGNED (nit_type));
3674 /* If the bound does not even fit into NIT_TYPE, it cannot tell us that
3675 the number of iterations is small. */
3676 if (!double_int_fits_to_tree_p (nit_type, bound))
3677 return false;
3679 /* We know that NITER_BOUND->stmt is executed at most NITER_BOUND->bound + 1
3680 times. This means that:
3682 -- if NITER_BOUND->is_exit is true, then everything after
3683 it at most NITER_BOUND->bound times.
3685 -- If NITER_BOUND->is_exit is false, then if we can prove that when STMT
3686 is executed, then NITER_BOUND->stmt is executed as well in the same
3687 iteration then STMT is executed at most NITER_BOUND->bound + 1 times.
3689 If we can determine that NITER_BOUND->stmt is always executed
3690 after STMT, then STMT is executed at most NITER_BOUND->bound + 2 times.
3691 We conclude that if both statements belong to the same
3692 basic block and STMT is before NITER_BOUND->stmt and there are no
3693 statements with side effects in between. */
3695 if (niter_bound->is_exit)
3697 if (stmt == niter_bound->stmt
3698 || !stmt_dominates_stmt_p (niter_bound->stmt, stmt))
3699 return false;
3700 cmp = GE_EXPR;
3702 else
3704 if (!stmt_dominates_stmt_p (niter_bound->stmt, stmt))
3706 gimple_stmt_iterator bsi;
3707 if (gimple_bb (stmt) != gimple_bb (niter_bound->stmt)
3708 || gimple_code (stmt) == GIMPLE_PHI
3709 || gimple_code (niter_bound->stmt) == GIMPLE_PHI)
3710 return false;
3712 /* By stmt_dominates_stmt_p we already know that STMT appears
3713 before NITER_BOUND->STMT. Still need to test that the loop
3714 can not be terinated by a side effect in between. */
3715 for (bsi = gsi_for_stmt (stmt); gsi_stmt (bsi) != niter_bound->stmt;
3716 gsi_next (&bsi))
3717 if (gimple_has_side_effects (gsi_stmt (bsi)))
3718 return false;
3719 bound += double_int_one;
3720 if (bound.is_zero ()
3721 || !double_int_fits_to_tree_p (nit_type, bound))
3722 return false;
3724 cmp = GT_EXPR;
3727 e = fold_binary (cmp, boolean_type_node,
3728 niter, double_int_to_tree (nit_type, bound));
3729 return e && integer_nonzerop (e);
3732 /* Returns true if the arithmetics in TYPE can be assumed not to wrap. */
3734 bool
3735 nowrap_type_p (tree type)
3737 if (INTEGRAL_TYPE_P (type)
3738 && TYPE_OVERFLOW_UNDEFINED (type))
3739 return true;
3741 if (POINTER_TYPE_P (type))
3742 return true;
3744 return false;
3747 /* Return false only when the induction variable BASE + STEP * I is
3748 known to not overflow: i.e. when the number of iterations is small
3749 enough with respect to the step and initial condition in order to
3750 keep the evolution confined in TYPEs bounds. Return true when the
3751 iv is known to overflow or when the property is not computable.
3753 USE_OVERFLOW_SEMANTICS is true if this function should assume that
3754 the rules for overflow of the given language apply (e.g., that signed
3755 arithmetics in C does not overflow). */
3757 bool
3758 scev_probably_wraps_p (tree base, tree step,
3759 gimple at_stmt, struct loop *loop,
3760 bool use_overflow_semantics)
3762 tree delta, step_abs;
3763 tree unsigned_type, valid_niter;
3764 tree type = TREE_TYPE (step);
3765 tree e;
3766 double_int niter;
3767 struct nb_iter_bound *bound;
3769 /* FIXME: We really need something like
3770 http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html.
3772 We used to test for the following situation that frequently appears
3773 during address arithmetics:
3775 D.1621_13 = (long unsigned intD.4) D.1620_12;
3776 D.1622_14 = D.1621_13 * 8;
3777 D.1623_15 = (doubleD.29 *) D.1622_14;
3779 And derived that the sequence corresponding to D_14
3780 can be proved to not wrap because it is used for computing a
3781 memory access; however, this is not really the case -- for example,
3782 if D_12 = (unsigned char) [254,+,1], then D_14 has values
3783 2032, 2040, 0, 8, ..., but the code is still legal. */
3785 if (chrec_contains_undetermined (base)
3786 || chrec_contains_undetermined (step))
3787 return true;
3789 if (integer_zerop (step))
3790 return false;
3792 /* If we can use the fact that signed and pointer arithmetics does not
3793 wrap, we are done. */
3794 if (use_overflow_semantics && nowrap_type_p (TREE_TYPE (base)))
3795 return false;
3797 /* To be able to use estimates on number of iterations of the loop,
3798 we must have an upper bound on the absolute value of the step. */
3799 if (TREE_CODE (step) != INTEGER_CST)
3800 return true;
3802 /* Don't issue signed overflow warnings. */
3803 fold_defer_overflow_warnings ();
3805 /* Otherwise, compute the number of iterations before we reach the
3806 bound of the type, and verify that the loop is exited before this
3807 occurs. */
3808 unsigned_type = unsigned_type_for (type);
3809 base = fold_convert (unsigned_type, base);
3811 if (tree_int_cst_sign_bit (step))
3813 tree extreme = fold_convert (unsigned_type,
3814 lower_bound_in_type (type, type));
3815 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
3816 step_abs = fold_build1 (NEGATE_EXPR, unsigned_type,
3817 fold_convert (unsigned_type, step));
3819 else
3821 tree extreme = fold_convert (unsigned_type,
3822 upper_bound_in_type (type, type));
3823 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
3824 step_abs = fold_convert (unsigned_type, step);
3827 valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step_abs);
3829 estimate_numbers_of_iterations_loop (loop);
3831 if (max_loop_iterations (loop, &niter)
3832 && double_int_fits_to_tree_p (TREE_TYPE (valid_niter), niter)
3833 && (e = fold_binary (GT_EXPR, boolean_type_node, valid_niter,
3834 double_int_to_tree (TREE_TYPE (valid_niter),
3835 niter))) != NULL
3836 && integer_nonzerop (e))
3838 fold_undefer_and_ignore_overflow_warnings ();
3839 return false;
3841 if (at_stmt)
3842 for (bound = loop->bounds; bound; bound = bound->next)
3844 if (n_of_executions_at_most (at_stmt, bound, valid_niter))
3846 fold_undefer_and_ignore_overflow_warnings ();
3847 return false;
3851 fold_undefer_and_ignore_overflow_warnings ();
3853 /* At this point we still don't have a proof that the iv does not
3854 overflow: give up. */
3855 return true;
3858 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
3860 void
3861 free_numbers_of_iterations_estimates_loop (struct loop *loop)
3863 struct nb_iter_bound *bound, *next;
3865 loop->nb_iterations = NULL;
3866 loop->estimate_state = EST_NOT_COMPUTED;
3867 for (bound = loop->bounds; bound; bound = next)
3869 next = bound->next;
3870 ggc_free (bound);
3873 loop->bounds = NULL;
3876 /* Frees the information on upper bounds on numbers of iterations of loops. */
3878 void
3879 free_numbers_of_iterations_estimates (void)
3881 struct loop *loop;
3883 FOR_EACH_LOOP (loop, 0)
3885 free_numbers_of_iterations_estimates_loop (loop);
3889 /* Substitute value VAL for ssa name NAME inside expressions held
3890 at LOOP. */
3892 void
3893 substitute_in_loop_info (struct loop *loop, tree name, tree val)
3895 loop->nb_iterations = simplify_replace_tree (loop->nb_iterations, name, val);