Merge aosp-toolchain/gcc/gcc-4_9 changes.
[official-gcc.git] / gcc-4_9 / gcc / tree-ssa-loop-niter.c
blob8fb72b6a50cdad6f1b18c8a4739e6107a850d6e1
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;
2730 tree orig_base = base;
2732 if (TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
2733 return;
2735 if (dump_file && (dump_flags & TDF_DETAILS))
2737 fprintf (dump_file, "Induction variable (");
2738 print_generic_expr (dump_file, TREE_TYPE (base), TDF_SLIM);
2739 fprintf (dump_file, ") ");
2740 print_generic_expr (dump_file, base, TDF_SLIM);
2741 fprintf (dump_file, " + ");
2742 print_generic_expr (dump_file, step, TDF_SLIM);
2743 fprintf (dump_file, " * iteration does not wrap in statement ");
2744 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
2745 fprintf (dump_file, " in loop %d.\n", loop->num);
2748 unsigned_type = unsigned_type_for (type);
2749 base = fold_convert (unsigned_type, base);
2750 step = fold_convert (unsigned_type, step);
2752 if (tree_int_cst_sign_bit (step))
2754 double_int min, max;
2755 extreme = fold_convert (unsigned_type, low);
2756 if (TREE_CODE (orig_base) == SSA_NAME
2757 && TREE_CODE (high) == INTEGER_CST
2758 && INTEGRAL_TYPE_P (TREE_TYPE (orig_base))
2759 && get_range_info (orig_base, &min, &max) == VR_RANGE
2760 && max.slt (TREE_INT_CST (high)))
2761 base = double_int_to_tree (unsigned_type, max);
2762 if (TREE_CODE (base) != INTEGER_CST)
2763 base = fold_convert (unsigned_type, high);
2764 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
2765 step = fold_build1 (NEGATE_EXPR, unsigned_type, step);
2767 else
2769 double_int min, max;
2770 extreme = fold_convert (unsigned_type, high);
2771 if (TREE_CODE (orig_base) == SSA_NAME
2772 && TREE_CODE (low) == INTEGER_CST
2773 && INTEGRAL_TYPE_P (TREE_TYPE (orig_base))
2774 && get_range_info (orig_base, &min, &max) == VR_RANGE
2775 && min.sgt (TREE_INT_CST (low)))
2776 base = double_int_to_tree (unsigned_type, min);
2777 else if (TREE_CODE (base) != INTEGER_CST)
2778 base = fold_convert (unsigned_type, low);
2779 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
2782 /* STMT is executed at most NITER_BOUND + 1 times, since otherwise the value
2783 would get out of the range. */
2784 niter_bound = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step);
2785 max = derive_constant_upper_bound (niter_bound);
2786 record_estimate (loop, niter_bound, max, stmt, false, realistic, upper);
2789 /* Determine information about number of iterations a LOOP from the index
2790 IDX of a data reference accessed in STMT. RELIABLE is true if STMT is
2791 guaranteed to be executed in every iteration of LOOP. Callback for
2792 for_each_index. */
2794 struct ilb_data
2796 struct loop *loop;
2797 gimple stmt;
2800 static bool
2801 idx_infer_loop_bounds (tree base, tree *idx, void *dta)
2803 struct ilb_data *data = (struct ilb_data *) dta;
2804 tree ev, init, step;
2805 tree low, high, type, next;
2806 bool sign, upper = true, at_end = false;
2807 struct loop *loop = data->loop;
2808 bool reliable = true;
2810 if (TREE_CODE (base) != ARRAY_REF)
2811 return true;
2813 /* For arrays at the end of the structure, we are not guaranteed that they
2814 do not really extend over their declared size. However, for arrays of
2815 size greater than one, this is unlikely to be intended. */
2816 if (array_at_struct_end_p (base))
2818 at_end = true;
2819 upper = false;
2822 struct loop *dloop = loop_containing_stmt (data->stmt);
2823 if (!dloop)
2824 return true;
2826 ev = analyze_scalar_evolution (dloop, *idx);
2827 ev = instantiate_parameters (loop, ev);
2828 init = initial_condition (ev);
2829 step = evolution_part_in_loop_num (ev, loop->num);
2831 if (!init
2832 || !step
2833 || TREE_CODE (step) != INTEGER_CST
2834 || integer_zerop (step)
2835 || tree_contains_chrecs (init, NULL)
2836 || chrec_contains_symbols_defined_in_loop (init, loop->num))
2837 return true;
2839 low = array_ref_low_bound (base);
2840 high = array_ref_up_bound (base);
2842 /* The case of nonconstant bounds could be handled, but it would be
2843 complicated. */
2844 if (TREE_CODE (low) != INTEGER_CST
2845 || !high
2846 || TREE_CODE (high) != INTEGER_CST)
2847 return true;
2848 sign = tree_int_cst_sign_bit (step);
2849 type = TREE_TYPE (step);
2851 /* The array of length 1 at the end of a structure most likely extends
2852 beyond its bounds. */
2853 if (at_end
2854 && operand_equal_p (low, high, 0))
2855 return true;
2857 /* In case the relevant bound of the array does not fit in type, or
2858 it does, but bound + step (in type) still belongs into the range of the
2859 array, the index may wrap and still stay within the range of the array
2860 (consider e.g. if the array is indexed by the full range of
2861 unsigned char).
2863 To make things simpler, we require both bounds to fit into type, although
2864 there are cases where this would not be strictly necessary. */
2865 if (!int_fits_type_p (high, type)
2866 || !int_fits_type_p (low, type))
2867 return true;
2868 low = fold_convert (type, low);
2869 high = fold_convert (type, high);
2871 if (sign)
2872 next = fold_binary (PLUS_EXPR, type, low, step);
2873 else
2874 next = fold_binary (PLUS_EXPR, type, high, step);
2876 if (tree_int_cst_compare (low, next) <= 0
2877 && tree_int_cst_compare (next, high) <= 0)
2878 return true;
2880 /* If access is not executed on every iteration, we must ensure that overlow may
2881 not make the access valid later. */
2882 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (data->stmt))
2883 && scev_probably_wraps_p (initial_condition_in_loop_num (ev, loop->num),
2884 step, data->stmt, loop, true))
2885 reliable = false;
2887 record_nonwrapping_iv (loop, init, step, data->stmt, low, high, reliable, upper);
2888 return true;
2891 /* Determine information about number of iterations a LOOP from the bounds
2892 of arrays in the data reference REF accessed in STMT. RELIABLE is true if
2893 STMT is guaranteed to be executed in every iteration of LOOP.*/
2895 static void
2896 infer_loop_bounds_from_ref (struct loop *loop, gimple stmt, tree ref)
2898 struct ilb_data data;
2900 data.loop = loop;
2901 data.stmt = stmt;
2902 for_each_index (&ref, idx_infer_loop_bounds, &data);
2905 /* Determine information about number of iterations of a LOOP from the way
2906 arrays are used in STMT. RELIABLE is true if STMT is guaranteed to be
2907 executed in every iteration of LOOP. */
2909 static void
2910 infer_loop_bounds_from_array (struct loop *loop, gimple stmt)
2912 if (is_gimple_assign (stmt))
2914 tree op0 = gimple_assign_lhs (stmt);
2915 tree op1 = gimple_assign_rhs1 (stmt);
2917 /* For each memory access, analyze its access function
2918 and record a bound on the loop iteration domain. */
2919 if (REFERENCE_CLASS_P (op0))
2920 infer_loop_bounds_from_ref (loop, stmt, op0);
2922 if (REFERENCE_CLASS_P (op1))
2923 infer_loop_bounds_from_ref (loop, stmt, op1);
2925 else if (is_gimple_call (stmt))
2927 tree arg, lhs;
2928 unsigned i, n = gimple_call_num_args (stmt);
2930 lhs = gimple_call_lhs (stmt);
2931 if (lhs && REFERENCE_CLASS_P (lhs))
2932 infer_loop_bounds_from_ref (loop, stmt, lhs);
2934 for (i = 0; i < n; i++)
2936 arg = gimple_call_arg (stmt, i);
2937 if (REFERENCE_CLASS_P (arg))
2938 infer_loop_bounds_from_ref (loop, stmt, arg);
2943 /* Determine information about number of iterations of a LOOP from the fact
2944 that pointer arithmetics in STMT does not overflow. */
2946 static void
2947 infer_loop_bounds_from_pointer_arith (struct loop *loop, gimple stmt)
2949 tree def, base, step, scev, type, low, high;
2950 tree var, ptr;
2952 if (!is_gimple_assign (stmt)
2953 || gimple_assign_rhs_code (stmt) != POINTER_PLUS_EXPR)
2954 return;
2956 def = gimple_assign_lhs (stmt);
2957 if (TREE_CODE (def) != SSA_NAME)
2958 return;
2960 type = TREE_TYPE (def);
2961 if (!nowrap_type_p (type))
2962 return;
2964 ptr = gimple_assign_rhs1 (stmt);
2965 if (!expr_invariant_in_loop_p (loop, ptr))
2966 return;
2968 var = gimple_assign_rhs2 (stmt);
2969 if (TYPE_PRECISION (type) != TYPE_PRECISION (TREE_TYPE (var)))
2970 return;
2972 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
2973 if (chrec_contains_undetermined (scev))
2974 return;
2976 base = initial_condition_in_loop_num (scev, loop->num);
2977 step = evolution_part_in_loop_num (scev, loop->num);
2979 if (!base || !step
2980 || TREE_CODE (step) != INTEGER_CST
2981 || tree_contains_chrecs (base, NULL)
2982 || chrec_contains_symbols_defined_in_loop (base, loop->num))
2983 return;
2985 low = lower_bound_in_type (type, type);
2986 high = upper_bound_in_type (type, type);
2988 /* In C, pointer arithmetic p + 1 cannot use a NULL pointer, and p - 1 cannot
2989 produce a NULL pointer. The contrary would mean NULL points to an object,
2990 while NULL is supposed to compare unequal with the address of all objects.
2991 Furthermore, p + 1 cannot produce a NULL pointer and p - 1 cannot use a
2992 NULL pointer since that would mean wrapping, which we assume here not to
2993 happen. So, we can exclude NULL from the valid range of pointer
2994 arithmetic. */
2995 if (flag_delete_null_pointer_checks && int_cst_value (low) == 0)
2996 low = build_int_cstu (TREE_TYPE (low), TYPE_ALIGN_UNIT (TREE_TYPE (type)));
2998 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
3001 /* Determine information about number of iterations of a LOOP from the fact
3002 that signed arithmetics in STMT does not overflow. */
3004 static void
3005 infer_loop_bounds_from_signedness (struct loop *loop, gimple stmt)
3007 tree def, base, step, scev, type, low, high;
3009 if (gimple_code (stmt) != GIMPLE_ASSIGN)
3010 return;
3012 def = gimple_assign_lhs (stmt);
3014 if (TREE_CODE (def) != SSA_NAME)
3015 return;
3017 type = TREE_TYPE (def);
3018 if (!INTEGRAL_TYPE_P (type)
3019 || !TYPE_OVERFLOW_UNDEFINED (type))
3020 return;
3022 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
3023 if (chrec_contains_undetermined (scev))
3024 return;
3026 base = initial_condition_in_loop_num (scev, loop->num);
3027 step = evolution_part_in_loop_num (scev, loop->num);
3029 if (!base || !step
3030 || TREE_CODE (step) != INTEGER_CST
3031 || tree_contains_chrecs (base, NULL)
3032 || chrec_contains_symbols_defined_in_loop (base, loop->num))
3033 return;
3035 low = lower_bound_in_type (type, type);
3036 high = upper_bound_in_type (type, type);
3038 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
3041 /* The following analyzers are extracting informations on the bounds
3042 of LOOP from the following undefined behaviors:
3044 - data references should not access elements over the statically
3045 allocated size,
3047 - signed variables should not overflow when flag_wrapv is not set.
3050 static void
3051 infer_loop_bounds_from_undefined (struct loop *loop)
3053 unsigned i;
3054 basic_block *bbs;
3055 gimple_stmt_iterator bsi;
3056 basic_block bb;
3057 bool reliable;
3059 bbs = get_loop_body (loop);
3061 for (i = 0; i < loop->num_nodes; i++)
3063 bb = bbs[i];
3065 /* If BB is not executed in each iteration of the loop, we cannot
3066 use the operations in it to infer reliable upper bound on the
3067 # of iterations of the loop. However, we can use it as a guess.
3068 Reliable guesses come only from array bounds. */
3069 reliable = dominated_by_p (CDI_DOMINATORS, loop->latch, bb);
3071 for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
3073 gimple stmt = gsi_stmt (bsi);
3075 infer_loop_bounds_from_array (loop, stmt);
3077 if (reliable)
3079 infer_loop_bounds_from_signedness (loop, stmt);
3080 infer_loop_bounds_from_pointer_arith (loop, stmt);
3086 free (bbs);
3091 /* Compare double ints, callback for qsort. */
3093 static int
3094 double_int_cmp (const void *p1, const void *p2)
3096 const double_int *d1 = (const double_int *)p1;
3097 const double_int *d2 = (const double_int *)p2;
3098 if (*d1 == *d2)
3099 return 0;
3100 if (d1->ult (*d2))
3101 return -1;
3102 return 1;
3105 /* Return index of BOUND in BOUNDS array sorted in increasing order.
3106 Lookup by binary search. */
3108 static int
3109 bound_index (vec<double_int> bounds, double_int bound)
3111 unsigned int end = bounds.length ();
3112 unsigned int begin = 0;
3114 /* Find a matching index by means of a binary search. */
3115 while (begin != end)
3117 unsigned int middle = (begin + end) / 2;
3118 double_int index = bounds[middle];
3120 if (index == bound)
3121 return middle;
3122 else if (index.ult (bound))
3123 begin = middle + 1;
3124 else
3125 end = middle;
3127 gcc_unreachable ();
3130 /* We recorded loop bounds only for statements dominating loop latch (and thus
3131 executed each loop iteration). If there are any bounds on statements not
3132 dominating the loop latch we can improve the estimate by walking the loop
3133 body and seeing if every path from loop header to loop latch contains
3134 some bounded statement. */
3136 static void
3137 discover_iteration_bound_by_body_walk (struct loop *loop)
3139 pointer_map_t *bb_bounds;
3140 struct nb_iter_bound *elt;
3141 vec<double_int> bounds = vNULL;
3142 vec<vec<basic_block> > queues = vNULL;
3143 vec<basic_block> queue = vNULL;
3144 ptrdiff_t queue_index;
3145 ptrdiff_t latch_index = 0;
3146 pointer_map_t *block_priority;
3148 /* Discover what bounds may interest us. */
3149 for (elt = loop->bounds; elt; elt = elt->next)
3151 double_int bound = elt->bound;
3153 /* Exit terminates loop at given iteration, while non-exits produce undefined
3154 effect on the next iteration. */
3155 if (!elt->is_exit)
3157 bound += double_int_one;
3158 /* If an overflow occurred, ignore the result. */
3159 if (bound.is_zero ())
3160 continue;
3163 if (!loop->any_upper_bound
3164 || bound.ult (loop->nb_iterations_upper_bound))
3165 bounds.safe_push (bound);
3168 /* Exit early if there is nothing to do. */
3169 if (!bounds.exists ())
3170 return;
3172 if (dump_file && (dump_flags & TDF_DETAILS))
3173 fprintf (dump_file, " Trying to walk loop body to reduce the bound.\n");
3175 /* Sort the bounds in decreasing order. */
3176 qsort (bounds.address (), bounds.length (),
3177 sizeof (double_int), double_int_cmp);
3179 /* For every basic block record the lowest bound that is guaranteed to
3180 terminate the loop. */
3182 bb_bounds = pointer_map_create ();
3183 for (elt = loop->bounds; elt; elt = elt->next)
3185 double_int bound = elt->bound;
3186 if (!elt->is_exit)
3188 bound += double_int_one;
3189 /* If an overflow occurred, ignore the result. */
3190 if (bound.is_zero ())
3191 continue;
3194 if (!loop->any_upper_bound
3195 || bound.ult (loop->nb_iterations_upper_bound))
3197 ptrdiff_t index = bound_index (bounds, bound);
3198 void **entry = pointer_map_contains (bb_bounds,
3199 gimple_bb (elt->stmt));
3200 if (!entry)
3201 *pointer_map_insert (bb_bounds,
3202 gimple_bb (elt->stmt)) = (void *)index;
3203 else if ((ptrdiff_t)*entry > index)
3204 *entry = (void *)index;
3208 block_priority = pointer_map_create ();
3210 /* Perform shortest path discovery loop->header ... loop->latch.
3212 The "distance" is given by the smallest loop bound of basic block
3213 present in the path and we look for path with largest smallest bound
3214 on it.
3216 To avoid the need for fibonacci heap on double ints we simply compress
3217 double ints into indexes to BOUNDS array and then represent the queue
3218 as arrays of queues for every index.
3219 Index of BOUNDS.length() means that the execution of given BB has
3220 no bounds determined.
3222 VISITED is a pointer map translating basic block into smallest index
3223 it was inserted into the priority queue with. */
3224 latch_index = -1;
3226 /* Start walk in loop header with index set to infinite bound. */
3227 queue_index = bounds.length ();
3228 queues.safe_grow_cleared (queue_index + 1);
3229 queue.safe_push (loop->header);
3230 queues[queue_index] = queue;
3231 *pointer_map_insert (block_priority, loop->header) = (void *)queue_index;
3233 for (; queue_index >= 0; queue_index--)
3235 if (latch_index < queue_index)
3237 while (queues[queue_index].length ())
3239 basic_block bb;
3240 ptrdiff_t bound_index = queue_index;
3241 void **entry;
3242 edge e;
3243 edge_iterator ei;
3245 queue = queues[queue_index];
3246 bb = queue.pop ();
3248 /* OK, we later inserted the BB with lower priority, skip it. */
3249 if ((ptrdiff_t)*pointer_map_contains (block_priority, bb) > queue_index)
3250 continue;
3252 /* See if we can improve the bound. */
3253 entry = pointer_map_contains (bb_bounds, bb);
3254 if (entry && (ptrdiff_t)*entry < bound_index)
3255 bound_index = (ptrdiff_t)*entry;
3257 /* Insert succesors into the queue, watch for latch edge
3258 and record greatest index we saw. */
3259 FOR_EACH_EDGE (e, ei, bb->succs)
3261 bool insert = false;
3262 void **entry;
3264 if (loop_exit_edge_p (loop, e))
3265 continue;
3267 if (e == loop_latch_edge (loop)
3268 && latch_index < bound_index)
3269 latch_index = bound_index;
3270 else if (!(entry = pointer_map_contains (block_priority, e->dest)))
3272 insert = true;
3273 *pointer_map_insert (block_priority, e->dest) = (void *)bound_index;
3275 else if ((ptrdiff_t)*entry < bound_index)
3277 insert = true;
3278 *entry = (void *)bound_index;
3281 if (insert)
3282 queues[bound_index].safe_push (e->dest);
3286 queues[queue_index].release ();
3289 gcc_assert (latch_index >= 0);
3290 if ((unsigned)latch_index < bounds.length ())
3292 if (dump_file && (dump_flags & TDF_DETAILS))
3294 fprintf (dump_file, "Found better loop bound ");
3295 dump_double_int (dump_file, bounds[latch_index], true);
3296 fprintf (dump_file, "\n");
3298 record_niter_bound (loop, bounds[latch_index], false, true);
3301 queues.release ();
3302 bounds.release ();
3303 pointer_map_destroy (bb_bounds);
3304 pointer_map_destroy (block_priority);
3307 /* See if every path cross the loop goes through a statement that is known
3308 to not execute at the last iteration. In that case we can decrese iteration
3309 count by 1. */
3311 static void
3312 maybe_lower_iteration_bound (struct loop *loop)
3314 pointer_set_t *not_executed_last_iteration = NULL;
3315 struct nb_iter_bound *elt;
3316 bool found_exit = false;
3317 vec<basic_block> queue = vNULL;
3318 bitmap visited;
3320 /* Collect all statements with interesting (i.e. lower than
3321 nb_iterations_upper_bound) bound on them.
3323 TODO: Due to the way record_estimate choose estimates to store, the bounds
3324 will be always nb_iterations_upper_bound-1. We can change this to record
3325 also statements not dominating the loop latch and update the walk bellow
3326 to the shortest path algorthm. */
3327 for (elt = loop->bounds; elt; elt = elt->next)
3329 if (!elt->is_exit
3330 && elt->bound.ult (loop->nb_iterations_upper_bound))
3332 if (!not_executed_last_iteration)
3333 not_executed_last_iteration = pointer_set_create ();
3334 pointer_set_insert (not_executed_last_iteration, elt->stmt);
3337 if (!not_executed_last_iteration)
3338 return;
3340 /* Start DFS walk in the loop header and see if we can reach the
3341 loop latch or any of the exits (including statements with side
3342 effects that may terminate the loop otherwise) without visiting
3343 any of the statements known to have undefined effect on the last
3344 iteration. */
3345 queue.safe_push (loop->header);
3346 visited = BITMAP_ALLOC (NULL);
3347 bitmap_set_bit (visited, loop->header->index);
3348 found_exit = false;
3352 basic_block bb = queue.pop ();
3353 gimple_stmt_iterator gsi;
3354 bool stmt_found = false;
3356 /* Loop for possible exits and statements bounding the execution. */
3357 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
3359 gimple stmt = gsi_stmt (gsi);
3360 if (pointer_set_contains (not_executed_last_iteration, stmt))
3362 stmt_found = true;
3363 break;
3365 if (gimple_has_side_effects (stmt))
3367 found_exit = true;
3368 break;
3371 if (found_exit)
3372 break;
3374 /* If no bounding statement is found, continue the walk. */
3375 if (!stmt_found)
3377 edge e;
3378 edge_iterator ei;
3380 FOR_EACH_EDGE (e, ei, bb->succs)
3382 if (loop_exit_edge_p (loop, e)
3383 || e == loop_latch_edge (loop))
3385 found_exit = true;
3386 break;
3388 if (bitmap_set_bit (visited, e->dest->index))
3389 queue.safe_push (e->dest);
3393 while (queue.length () && !found_exit);
3395 /* If every path through the loop reach bounding statement before exit,
3396 then we know the last iteration of the loop will have undefined effect
3397 and we can decrease number of iterations. */
3399 if (!found_exit)
3401 if (dump_file && (dump_flags & TDF_DETAILS))
3402 fprintf (dump_file, "Reducing loop iteration estimate by 1; "
3403 "undefined statement must be executed at the last iteration.\n");
3404 record_niter_bound (loop, loop->nb_iterations_upper_bound - double_int_one,
3405 false, true);
3407 BITMAP_FREE (visited);
3408 queue.release ();
3409 pointer_set_destroy (not_executed_last_iteration);
3412 /* Records estimates on numbers of iterations of LOOP. If USE_UNDEFINED_P
3413 is true also use estimates derived from undefined behavior. */
3415 static void
3416 estimate_numbers_of_iterations_loop (struct loop *loop)
3418 vec<edge> exits;
3419 tree niter, type;
3420 unsigned i;
3421 struct tree_niter_desc niter_desc;
3422 edge ex;
3423 double_int bound;
3424 edge likely_exit;
3426 /* Give up if we already have tried to compute an estimation. */
3427 if (loop->estimate_state != EST_NOT_COMPUTED)
3428 return;
3430 loop->estimate_state = EST_AVAILABLE;
3431 /* Force estimate compuation but leave any existing upper bound in place. */
3432 loop->any_estimate = false;
3434 /* Ensure that loop->nb_iterations is computed if possible. If it turns out
3435 to be constant, we avoid undefined behavior implied bounds and instead
3436 diagnose those loops with -Waggressive-loop-optimizations. */
3437 number_of_latch_executions (loop);
3439 exits = get_loop_exit_edges (loop);
3440 likely_exit = single_likely_exit (loop);
3441 FOR_EACH_VEC_ELT (exits, i, ex)
3443 if (!number_of_iterations_exit (loop, ex, &niter_desc, false, false))
3444 continue;
3446 niter = niter_desc.niter;
3447 type = TREE_TYPE (niter);
3448 if (TREE_CODE (niter_desc.may_be_zero) != INTEGER_CST)
3449 niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
3450 build_int_cst (type, 0),
3451 niter);
3452 record_estimate (loop, niter, niter_desc.max,
3453 last_stmt (ex->src),
3454 true, ex == likely_exit, true);
3456 exits.release ();
3458 if (flag_aggressive_loop_optimizations)
3459 infer_loop_bounds_from_undefined (loop);
3461 discover_iteration_bound_by_body_walk (loop);
3463 maybe_lower_iteration_bound (loop);
3465 /* If we have a measured profile, use it to estimate the number of
3466 iterations. */
3467 if (loop->header->count != 0)
3469 gcov_type nit = expected_loop_iterations_unbounded (loop) + 1;
3470 bound = gcov_type_to_double_int (nit);
3471 record_niter_bound (loop, bound, true, false);
3474 /* If we know the exact number of iterations of this loop, try to
3475 not break code with undefined behavior by not recording smaller
3476 maximum number of iterations. */
3477 if (loop->nb_iterations
3478 && TREE_CODE (loop->nb_iterations) == INTEGER_CST)
3480 loop->any_upper_bound = true;
3481 loop->nb_iterations_upper_bound
3482 = tree_to_double_int (loop->nb_iterations);
3486 /* Sets NIT to the estimated number of executions of the latch of the
3487 LOOP. If CONSERVATIVE is true, we must be sure that NIT is at least as
3488 large as the number of iterations. If we have no reliable estimate,
3489 the function returns false, otherwise returns true. */
3491 bool
3492 estimated_loop_iterations (struct loop *loop, double_int *nit)
3494 /* When SCEV information is available, try to update loop iterations
3495 estimate. Otherwise just return whatever we recorded earlier. */
3496 if (scev_initialized_p ())
3497 estimate_numbers_of_iterations_loop (loop);
3499 return (get_estimated_loop_iterations (loop, nit));
3502 /* Similar to estimated_loop_iterations, but returns the estimate only
3503 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
3504 on the number of iterations of LOOP could not be derived, returns -1. */
3506 HOST_WIDE_INT
3507 estimated_loop_iterations_int (struct loop *loop)
3509 double_int nit;
3510 HOST_WIDE_INT hwi_nit;
3512 if (!estimated_loop_iterations (loop, &nit))
3513 return -1;
3515 if (!nit.fits_shwi ())
3516 return -1;
3517 hwi_nit = nit.to_shwi ();
3519 return hwi_nit < 0 ? -1 : hwi_nit;
3523 /* Sets NIT to an upper bound for the maximum number of executions of the
3524 latch of the LOOP. If we have no reliable estimate, the function returns
3525 false, otherwise returns true. */
3527 bool
3528 max_loop_iterations (struct loop *loop, double_int *nit)
3530 /* When SCEV information is available, try to update loop iterations
3531 estimate. Otherwise just return whatever we recorded earlier. */
3532 if (scev_initialized_p ())
3533 estimate_numbers_of_iterations_loop (loop);
3535 return get_max_loop_iterations (loop, nit);
3538 /* Similar to max_loop_iterations, but returns the estimate only
3539 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
3540 on the number of iterations of LOOP could not be derived, returns -1. */
3542 HOST_WIDE_INT
3543 max_loop_iterations_int (struct loop *loop)
3545 double_int nit;
3546 HOST_WIDE_INT hwi_nit;
3548 if (!max_loop_iterations (loop, &nit))
3549 return -1;
3551 if (!nit.fits_shwi ())
3552 return -1;
3553 hwi_nit = nit.to_shwi ();
3555 return hwi_nit < 0 ? -1 : hwi_nit;
3558 /* Returns an estimate for the number of executions of statements
3559 in the LOOP. For statements before the loop exit, this exceeds
3560 the number of execution of the latch by one. */
3562 HOST_WIDE_INT
3563 estimated_stmt_executions_int (struct loop *loop)
3565 HOST_WIDE_INT nit = estimated_loop_iterations_int (loop);
3566 HOST_WIDE_INT snit;
3568 if (nit == -1)
3569 return -1;
3571 snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
3573 /* If the computation overflows, return -1. */
3574 return snit < 0 ? -1 : snit;
3577 /* Sets NIT to the estimated maximum number of executions of the latch of the
3578 LOOP, plus one. If we have no reliable estimate, the function returns
3579 false, otherwise returns true. */
3581 bool
3582 max_stmt_executions (struct loop *loop, double_int *nit)
3584 double_int nit_minus_one;
3586 if (!max_loop_iterations (loop, nit))
3587 return false;
3589 nit_minus_one = *nit;
3591 *nit += double_int_one;
3593 return (*nit).ugt (nit_minus_one);
3596 /* Sets NIT to the estimated number of executions of the latch of the
3597 LOOP, plus one. If we have no reliable estimate, the function returns
3598 false, otherwise returns true. */
3600 bool
3601 estimated_stmt_executions (struct loop *loop, double_int *nit)
3603 double_int nit_minus_one;
3605 if (!estimated_loop_iterations (loop, nit))
3606 return false;
3608 nit_minus_one = *nit;
3610 *nit += double_int_one;
3612 return (*nit).ugt (nit_minus_one);
3615 /* Records estimates on numbers of iterations of loops. */
3617 void
3618 estimate_numbers_of_iterations (void)
3620 struct loop *loop;
3622 /* We don't want to issue signed overflow warnings while getting
3623 loop iteration estimates. */
3624 fold_defer_overflow_warnings ();
3626 FOR_EACH_LOOP (loop, 0)
3628 estimate_numbers_of_iterations_loop (loop);
3631 fold_undefer_and_ignore_overflow_warnings ();
3634 /* Returns true if statement S1 dominates statement S2. */
3636 bool
3637 stmt_dominates_stmt_p (gimple s1, gimple s2)
3639 basic_block bb1 = gimple_bb (s1), bb2 = gimple_bb (s2);
3641 if (!bb1
3642 || s1 == s2)
3643 return true;
3645 if (bb1 == bb2)
3647 gimple_stmt_iterator bsi;
3649 if (gimple_code (s2) == GIMPLE_PHI)
3650 return false;
3652 if (gimple_code (s1) == GIMPLE_PHI)
3653 return true;
3655 for (bsi = gsi_start_bb (bb1); gsi_stmt (bsi) != s2; gsi_next (&bsi))
3656 if (gsi_stmt (bsi) == s1)
3657 return true;
3659 return false;
3662 return dominated_by_p (CDI_DOMINATORS, bb2, bb1);
3665 /* Returns true when we can prove that the number of executions of
3666 STMT in the loop is at most NITER, according to the bound on
3667 the number of executions of the statement NITER_BOUND->stmt recorded in
3668 NITER_BOUND and fact that NITER_BOUND->stmt dominate STMT.
3670 ??? This code can become quite a CPU hog - we can have many bounds,
3671 and large basic block forcing stmt_dominates_stmt_p to be queried
3672 many times on a large basic blocks, so the whole thing is O(n^2)
3673 for scev_probably_wraps_p invocation (that can be done n times).
3675 It would make more sense (and give better answers) to remember BB
3676 bounds computed by discover_iteration_bound_by_body_walk. */
3678 static bool
3679 n_of_executions_at_most (gimple stmt,
3680 struct nb_iter_bound *niter_bound,
3681 tree niter)
3683 double_int bound = niter_bound->bound;
3684 tree nit_type = TREE_TYPE (niter), e;
3685 enum tree_code cmp;
3687 gcc_assert (TYPE_UNSIGNED (nit_type));
3689 /* If the bound does not even fit into NIT_TYPE, it cannot tell us that
3690 the number of iterations is small. */
3691 if (!double_int_fits_to_tree_p (nit_type, bound))
3692 return false;
3694 /* We know that NITER_BOUND->stmt is executed at most NITER_BOUND->bound + 1
3695 times. This means that:
3697 -- if NITER_BOUND->is_exit is true, then everything after
3698 it at most NITER_BOUND->bound times.
3700 -- If NITER_BOUND->is_exit is false, then if we can prove that when STMT
3701 is executed, then NITER_BOUND->stmt is executed as well in the same
3702 iteration then STMT is executed at most NITER_BOUND->bound + 1 times.
3704 If we can determine that NITER_BOUND->stmt is always executed
3705 after STMT, then STMT is executed at most NITER_BOUND->bound + 2 times.
3706 We conclude that if both statements belong to the same
3707 basic block and STMT is before NITER_BOUND->stmt and there are no
3708 statements with side effects in between. */
3710 if (niter_bound->is_exit)
3712 if (stmt == niter_bound->stmt
3713 || !stmt_dominates_stmt_p (niter_bound->stmt, stmt))
3714 return false;
3715 cmp = GE_EXPR;
3717 else
3719 if (!stmt_dominates_stmt_p (niter_bound->stmt, stmt))
3721 gimple_stmt_iterator bsi;
3722 if (gimple_bb (stmt) != gimple_bb (niter_bound->stmt)
3723 || gimple_code (stmt) == GIMPLE_PHI
3724 || gimple_code (niter_bound->stmt) == GIMPLE_PHI)
3725 return false;
3727 /* By stmt_dominates_stmt_p we already know that STMT appears
3728 before NITER_BOUND->STMT. Still need to test that the loop
3729 can not be terinated by a side effect in between. */
3730 for (bsi = gsi_for_stmt (stmt); gsi_stmt (bsi) != niter_bound->stmt;
3731 gsi_next (&bsi))
3732 if (gimple_has_side_effects (gsi_stmt (bsi)))
3733 return false;
3734 bound += double_int_one;
3735 if (bound.is_zero ()
3736 || !double_int_fits_to_tree_p (nit_type, bound))
3737 return false;
3739 cmp = GT_EXPR;
3742 e = fold_binary (cmp, boolean_type_node,
3743 niter, double_int_to_tree (nit_type, bound));
3744 return e && integer_nonzerop (e);
3747 /* Returns true if the arithmetics in TYPE can be assumed not to wrap. */
3749 bool
3750 nowrap_type_p (tree type)
3752 if (INTEGRAL_TYPE_P (type)
3753 && TYPE_OVERFLOW_UNDEFINED (type))
3754 return true;
3756 if (POINTER_TYPE_P (type))
3757 return true;
3759 return false;
3762 /* Return false only when the induction variable BASE + STEP * I is
3763 known to not overflow: i.e. when the number of iterations is small
3764 enough with respect to the step and initial condition in order to
3765 keep the evolution confined in TYPEs bounds. Return true when the
3766 iv is known to overflow or when the property is not computable.
3768 USE_OVERFLOW_SEMANTICS is true if this function should assume that
3769 the rules for overflow of the given language apply (e.g., that signed
3770 arithmetics in C does not overflow). */
3772 bool
3773 scev_probably_wraps_p (tree base, tree step,
3774 gimple at_stmt, struct loop *loop,
3775 bool use_overflow_semantics)
3777 tree delta, step_abs;
3778 tree unsigned_type, valid_niter;
3779 tree type = TREE_TYPE (step);
3780 tree e;
3781 double_int niter;
3782 struct nb_iter_bound *bound;
3784 /* FIXME: We really need something like
3785 http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html.
3787 We used to test for the following situation that frequently appears
3788 during address arithmetics:
3790 D.1621_13 = (long unsigned intD.4) D.1620_12;
3791 D.1622_14 = D.1621_13 * 8;
3792 D.1623_15 = (doubleD.29 *) D.1622_14;
3794 And derived that the sequence corresponding to D_14
3795 can be proved to not wrap because it is used for computing a
3796 memory access; however, this is not really the case -- for example,
3797 if D_12 = (unsigned char) [254,+,1], then D_14 has values
3798 2032, 2040, 0, 8, ..., but the code is still legal. */
3800 if (chrec_contains_undetermined (base)
3801 || chrec_contains_undetermined (step))
3802 return true;
3804 if (integer_zerop (step))
3805 return false;
3807 /* If we can use the fact that signed and pointer arithmetics does not
3808 wrap, we are done. */
3809 if (use_overflow_semantics && nowrap_type_p (TREE_TYPE (base)))
3810 return false;
3812 /* To be able to use estimates on number of iterations of the loop,
3813 we must have an upper bound on the absolute value of the step. */
3814 if (TREE_CODE (step) != INTEGER_CST)
3815 return true;
3817 /* Don't issue signed overflow warnings. */
3818 fold_defer_overflow_warnings ();
3820 /* Otherwise, compute the number of iterations before we reach the
3821 bound of the type, and verify that the loop is exited before this
3822 occurs. */
3823 unsigned_type = unsigned_type_for (type);
3824 base = fold_convert (unsigned_type, base);
3826 if (tree_int_cst_sign_bit (step))
3828 tree extreme = fold_convert (unsigned_type,
3829 lower_bound_in_type (type, type));
3830 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
3831 step_abs = fold_build1 (NEGATE_EXPR, unsigned_type,
3832 fold_convert (unsigned_type, step));
3834 else
3836 tree extreme = fold_convert (unsigned_type,
3837 upper_bound_in_type (type, type));
3838 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
3839 step_abs = fold_convert (unsigned_type, step);
3842 valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step_abs);
3844 estimate_numbers_of_iterations_loop (loop);
3846 if (max_loop_iterations (loop, &niter)
3847 && double_int_fits_to_tree_p (TREE_TYPE (valid_niter), niter)
3848 && (e = fold_binary (GT_EXPR, boolean_type_node, valid_niter,
3849 double_int_to_tree (TREE_TYPE (valid_niter),
3850 niter))) != NULL
3851 && integer_nonzerop (e))
3853 fold_undefer_and_ignore_overflow_warnings ();
3854 return false;
3856 if (at_stmt)
3857 for (bound = loop->bounds; bound; bound = bound->next)
3859 if (n_of_executions_at_most (at_stmt, bound, valid_niter))
3861 fold_undefer_and_ignore_overflow_warnings ();
3862 return false;
3866 fold_undefer_and_ignore_overflow_warnings ();
3868 /* At this point we still don't have a proof that the iv does not
3869 overflow: give up. */
3870 return true;
3873 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
3875 void
3876 free_numbers_of_iterations_estimates_loop (struct loop *loop)
3878 struct nb_iter_bound *bound, *next;
3880 loop->nb_iterations = NULL;
3881 loop->estimate_state = EST_NOT_COMPUTED;
3882 for (bound = loop->bounds; bound; bound = next)
3884 next = bound->next;
3885 ggc_free (bound);
3888 loop->bounds = NULL;
3891 /* Frees the information on upper bounds on numbers of iterations of loops. */
3893 void
3894 free_numbers_of_iterations_estimates (void)
3896 struct loop *loop;
3898 FOR_EACH_LOOP (loop, 0)
3900 free_numbers_of_iterations_estimates_loop (loop);
3904 /* Substitute value VAL for ssa name NAME inside expressions held
3905 at LOOP. */
3907 void
3908 substitute_in_loop_info (struct loop *loop, tree name, tree val)
3910 loop->nb_iterations = simplify_replace_tree (loop->nb_iterations, name, val);