]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/tree-ssa-loop-niter.c
Merge in trunk.
[thirdparty/gcc.git] / gcc / tree-ssa-loop-niter.c
1 /* Functions to determine/estimate number of iterations of a loop.
2 Copyright (C) 2004-2013 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
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.
10
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.
15
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/>. */
19
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "tm.h"
24 #include "tree.h"
25 #include "tm_p.h"
26 #include "basic-block.h"
27 #include "gimple-pretty-print.h"
28 #include "intl.h"
29 #include "gimple.h"
30 #include "gimple-ssa.h"
31 #include "tree-cfg.h"
32 #include "tree-phinodes.h"
33 #include "ssa-iterators.h"
34 #include "tree-ssa-loop-ivopts.h"
35 #include "tree-ssa-loop-niter.h"
36 #include "tree-ssa-loop.h"
37 #include "dumpfile.h"
38 #include "cfgloop.h"
39 #include "ggc.h"
40 #include "tree-chrec.h"
41 #include "tree-scalar-evolution.h"
42 #include "tree-data-ref.h"
43 #include "params.h"
44 #include "flags.h"
45 #include "diagnostic-core.h"
46 #include "tree-inline.h"
47 #include "tree-pass.h"
48 #include "wide-int-print.h"
49
50
51 #define SWAP(X, Y) do { affine_iv *tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
52
53 /* The maximum number of dominator BBs we search for conditions
54 of loop header copies we use for simplifying a conditional
55 expression. */
56 #define MAX_DOMINATORS_TO_WALK 8
57
58 /*
59
60 Analysis of number of iterations of an affine exit test.
61
62 */
63
64 /* Bounds on some value, BELOW <= X <= UP. */
65
66 typedef struct
67 {
68 mpz_t below, up;
69 } bounds;
70
71
72 /* Splits expression EXPR to a variable part VAR and constant OFFSET. */
73
74 static void
75 split_to_var_and_offset (tree expr, tree *var, mpz_t offset)
76 {
77 tree type = TREE_TYPE (expr);
78 tree op0, op1;
79 bool negate = false;
80
81 *var = expr;
82 mpz_set_ui (offset, 0);
83
84 switch (TREE_CODE (expr))
85 {
86 case MINUS_EXPR:
87 negate = true;
88 /* Fallthru. */
89
90 case PLUS_EXPR:
91 case POINTER_PLUS_EXPR:
92 op0 = TREE_OPERAND (expr, 0);
93 op1 = TREE_OPERAND (expr, 1);
94
95 if (TREE_CODE (op1) != INTEGER_CST)
96 break;
97
98 *var = op0;
99 /* Always sign extend the offset. */
100 wi::to_mpz (op1, offset, SIGNED);
101 if (negate)
102 mpz_neg (offset, offset);
103 break;
104
105 case INTEGER_CST:
106 *var = build_int_cst_type (type, 0);
107 wi::to_mpz (expr, offset, TYPE_SIGN (type));
108 break;
109
110 default:
111 break;
112 }
113 }
114
115 /* Stores estimate on the minimum/maximum value of the expression VAR + OFF
116 in TYPE to MIN and MAX. */
117
118 static void
119 determine_value_range (tree type, tree var, mpz_t off,
120 mpz_t min, mpz_t max)
121 {
122 /* If the expression is a constant, we know its value exactly. */
123 if (integer_zerop (var))
124 {
125 mpz_set (min, off);
126 mpz_set (max, off);
127 return;
128 }
129
130 /* If the computation may wrap, we know nothing about the value, except for
131 the range of the type. */
132 get_type_static_bounds (type, min, max);
133 if (!nowrap_type_p (type))
134 return;
135
136 /* Since the addition of OFF does not wrap, if OFF is positive, then we may
137 add it to MIN, otherwise to MAX. */
138 if (mpz_sgn (off) < 0)
139 mpz_add (max, max, off);
140 else
141 mpz_add (min, min, off);
142 }
143
144 /* Stores the bounds on the difference of the values of the expressions
145 (var + X) and (var + Y), computed in TYPE, to BNDS. */
146
147 static void
148 bound_difference_of_offsetted_base (tree type, mpz_t x, mpz_t y,
149 bounds *bnds)
150 {
151 int rel = mpz_cmp (x, y);
152 bool may_wrap = !nowrap_type_p (type);
153 mpz_t m;
154
155 /* If X == Y, then the expressions are always equal.
156 If X > Y, there are the following possibilities:
157 a) neither of var + X and var + Y overflow or underflow, or both of
158 them do. Then their difference is X - Y.
159 b) var + X overflows, and var + Y does not. Then the values of the
160 expressions are var + X - M and var + Y, where M is the range of
161 the type, and their difference is X - Y - M.
162 c) var + Y underflows and var + X does not. Their difference again
163 is M - X + Y.
164 Therefore, if the arithmetics in type does not overflow, then the
165 bounds are (X - Y, X - Y), otherwise they are (X - Y - M, X - Y)
166 Similarly, if X < Y, the bounds are either (X - Y, X - Y) or
167 (X - Y, X - Y + M). */
168
169 if (rel == 0)
170 {
171 mpz_set_ui (bnds->below, 0);
172 mpz_set_ui (bnds->up, 0);
173 return;
174 }
175
176 mpz_init (m);
177 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), m, UNSIGNED);
178 mpz_add_ui (m, m, 1);
179 mpz_sub (bnds->up, x, y);
180 mpz_set (bnds->below, bnds->up);
181
182 if (may_wrap)
183 {
184 if (rel > 0)
185 mpz_sub (bnds->below, bnds->below, m);
186 else
187 mpz_add (bnds->up, bnds->up, m);
188 }
189
190 mpz_clear (m);
191 }
192
193 /* From condition C0 CMP C1 derives information regarding the
194 difference of values of VARX + OFFX and VARY + OFFY, computed in TYPE,
195 and stores it to BNDS. */
196
197 static void
198 refine_bounds_using_guard (tree type, tree varx, mpz_t offx,
199 tree vary, mpz_t offy,
200 tree c0, enum tree_code cmp, tree c1,
201 bounds *bnds)
202 {
203 tree varc0, varc1, tmp, ctype;
204 mpz_t offc0, offc1, loffx, loffy, bnd;
205 bool lbound = false;
206 bool no_wrap = nowrap_type_p (type);
207 bool x_ok, y_ok;
208
209 switch (cmp)
210 {
211 case LT_EXPR:
212 case LE_EXPR:
213 case GT_EXPR:
214 case GE_EXPR:
215 STRIP_SIGN_NOPS (c0);
216 STRIP_SIGN_NOPS (c1);
217 ctype = TREE_TYPE (c0);
218 if (!useless_type_conversion_p (ctype, type))
219 return;
220
221 break;
222
223 case EQ_EXPR:
224 /* We could derive quite precise information from EQ_EXPR, however, such
225 a guard is unlikely to appear, so we do not bother with handling
226 it. */
227 return;
228
229 case NE_EXPR:
230 /* NE_EXPR comparisons do not contain much of useful information, except for
231 special case of comparing with the bounds of the type. */
232 if (TREE_CODE (c1) != INTEGER_CST
233 || !INTEGRAL_TYPE_P (type))
234 return;
235
236 /* Ensure that the condition speaks about an expression in the same type
237 as X and Y. */
238 ctype = TREE_TYPE (c0);
239 if (TYPE_PRECISION (ctype) != TYPE_PRECISION (type))
240 return;
241 c0 = fold_convert (type, c0);
242 c1 = fold_convert (type, c1);
243
244 if (TYPE_MIN_VALUE (type)
245 && operand_equal_p (c1, TYPE_MIN_VALUE (type), 0))
246 {
247 cmp = GT_EXPR;
248 break;
249 }
250 if (TYPE_MAX_VALUE (type)
251 && operand_equal_p (c1, TYPE_MAX_VALUE (type), 0))
252 {
253 cmp = LT_EXPR;
254 break;
255 }
256
257 return;
258 default:
259 return;
260 }
261
262 mpz_init (offc0);
263 mpz_init (offc1);
264 split_to_var_and_offset (expand_simple_operations (c0), &varc0, offc0);
265 split_to_var_and_offset (expand_simple_operations (c1), &varc1, offc1);
266
267 /* We are only interested in comparisons of expressions based on VARX and
268 VARY. TODO -- we might also be able to derive some bounds from
269 expressions containing just one of the variables. */
270
271 if (operand_equal_p (varx, varc1, 0))
272 {
273 tmp = varc0; varc0 = varc1; varc1 = tmp;
274 mpz_swap (offc0, offc1);
275 cmp = swap_tree_comparison (cmp);
276 }
277
278 if (!operand_equal_p (varx, varc0, 0)
279 || !operand_equal_p (vary, varc1, 0))
280 goto end;
281
282 mpz_init_set (loffx, offx);
283 mpz_init_set (loffy, offy);
284
285 if (cmp == GT_EXPR || cmp == GE_EXPR)
286 {
287 tmp = varx; varx = vary; vary = tmp;
288 mpz_swap (offc0, offc1);
289 mpz_swap (loffx, loffy);
290 cmp = swap_tree_comparison (cmp);
291 lbound = true;
292 }
293
294 /* If there is no overflow, the condition implies that
295
296 (VARX + OFFX) cmp (VARY + OFFY) + (OFFX - OFFY + OFFC1 - OFFC0).
297
298 The overflows and underflows may complicate things a bit; each
299 overflow decreases the appropriate offset by M, and underflow
300 increases it by M. The above inequality would not necessarily be
301 true if
302
303 -- VARX + OFFX underflows and VARX + OFFC0 does not, or
304 VARX + OFFC0 overflows, but VARX + OFFX does not.
305 This may only happen if OFFX < OFFC0.
306 -- VARY + OFFY overflows and VARY + OFFC1 does not, or
307 VARY + OFFC1 underflows and VARY + OFFY does not.
308 This may only happen if OFFY > OFFC1. */
309
310 if (no_wrap)
311 {
312 x_ok = true;
313 y_ok = true;
314 }
315 else
316 {
317 x_ok = (integer_zerop (varx)
318 || mpz_cmp (loffx, offc0) >= 0);
319 y_ok = (integer_zerop (vary)
320 || mpz_cmp (loffy, offc1) <= 0);
321 }
322
323 if (x_ok && y_ok)
324 {
325 mpz_init (bnd);
326 mpz_sub (bnd, loffx, loffy);
327 mpz_add (bnd, bnd, offc1);
328 mpz_sub (bnd, bnd, offc0);
329
330 if (cmp == LT_EXPR)
331 mpz_sub_ui (bnd, bnd, 1);
332
333 if (lbound)
334 {
335 mpz_neg (bnd, bnd);
336 if (mpz_cmp (bnds->below, bnd) < 0)
337 mpz_set (bnds->below, bnd);
338 }
339 else
340 {
341 if (mpz_cmp (bnd, bnds->up) < 0)
342 mpz_set (bnds->up, bnd);
343 }
344 mpz_clear (bnd);
345 }
346
347 mpz_clear (loffx);
348 mpz_clear (loffy);
349 end:
350 mpz_clear (offc0);
351 mpz_clear (offc1);
352 }
353
354 /* Stores the bounds on the value of the expression X - Y in LOOP to BNDS.
355 The subtraction is considered to be performed in arbitrary precision,
356 without overflows.
357
358 We do not attempt to be too clever regarding the value ranges of X and
359 Y; most of the time, they are just integers or ssa names offsetted by
360 integer. However, we try to use the information contained in the
361 comparisons before the loop (usually created by loop header copying). */
362
363 static void
364 bound_difference (struct loop *loop, tree x, tree y, bounds *bnds)
365 {
366 tree type = TREE_TYPE (x);
367 tree varx, vary;
368 mpz_t offx, offy;
369 mpz_t minx, maxx, miny, maxy;
370 int cnt = 0;
371 edge e;
372 basic_block bb;
373 tree c0, c1;
374 gimple cond;
375 enum tree_code cmp;
376
377 /* Get rid of unnecessary casts, but preserve the value of
378 the expressions. */
379 STRIP_SIGN_NOPS (x);
380 STRIP_SIGN_NOPS (y);
381
382 mpz_init (bnds->below);
383 mpz_init (bnds->up);
384 mpz_init (offx);
385 mpz_init (offy);
386 split_to_var_and_offset (x, &varx, offx);
387 split_to_var_and_offset (y, &vary, offy);
388
389 if (!integer_zerop (varx)
390 && operand_equal_p (varx, vary, 0))
391 {
392 /* Special case VARX == VARY -- we just need to compare the
393 offsets. The matters are a bit more complicated in the
394 case addition of offsets may wrap. */
395 bound_difference_of_offsetted_base (type, offx, offy, bnds);
396 }
397 else
398 {
399 /* Otherwise, use the value ranges to determine the initial
400 estimates on below and up. */
401 mpz_init (minx);
402 mpz_init (maxx);
403 mpz_init (miny);
404 mpz_init (maxy);
405 determine_value_range (type, varx, offx, minx, maxx);
406 determine_value_range (type, vary, offy, miny, maxy);
407
408 mpz_sub (bnds->below, minx, maxy);
409 mpz_sub (bnds->up, maxx, miny);
410 mpz_clear (minx);
411 mpz_clear (maxx);
412 mpz_clear (miny);
413 mpz_clear (maxy);
414 }
415
416 /* If both X and Y are constants, we cannot get any more precise. */
417 if (integer_zerop (varx) && integer_zerop (vary))
418 goto end;
419
420 /* Now walk the dominators of the loop header and use the entry
421 guards to refine the estimates. */
422 for (bb = loop->header;
423 bb != ENTRY_BLOCK_PTR && cnt < MAX_DOMINATORS_TO_WALK;
424 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
425 {
426 if (!single_pred_p (bb))
427 continue;
428 e = single_pred_edge (bb);
429
430 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
431 continue;
432
433 cond = last_stmt (e->src);
434 c0 = gimple_cond_lhs (cond);
435 cmp = gimple_cond_code (cond);
436 c1 = gimple_cond_rhs (cond);
437
438 if (e->flags & EDGE_FALSE_VALUE)
439 cmp = invert_tree_comparison (cmp, false);
440
441 refine_bounds_using_guard (type, varx, offx, vary, offy,
442 c0, cmp, c1, bnds);
443 ++cnt;
444 }
445
446 end:
447 mpz_clear (offx);
448 mpz_clear (offy);
449 }
450
451 /* Update the bounds in BNDS that restrict the value of X to the bounds
452 that restrict the value of X + DELTA. X can be obtained as a
453 difference of two values in TYPE. */
454
455 static void
456 bounds_add (bounds *bnds, widest_int delta, tree type)
457 {
458 mpz_t mdelta, max;
459
460 mpz_init (mdelta);
461 wi::to_mpz (delta, mdelta, SIGNED);
462
463 mpz_init (max);
464 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), max, UNSIGNED);
465
466 mpz_add (bnds->up, bnds->up, mdelta);
467 mpz_add (bnds->below, bnds->below, mdelta);
468
469 if (mpz_cmp (bnds->up, max) > 0)
470 mpz_set (bnds->up, max);
471
472 mpz_neg (max, max);
473 if (mpz_cmp (bnds->below, max) < 0)
474 mpz_set (bnds->below, max);
475
476 mpz_clear (mdelta);
477 mpz_clear (max);
478 }
479
480 /* Update the bounds in BNDS that restrict the value of X to the bounds
481 that restrict the value of -X. */
482
483 static void
484 bounds_negate (bounds *bnds)
485 {
486 mpz_t tmp;
487
488 mpz_init_set (tmp, bnds->up);
489 mpz_neg (bnds->up, bnds->below);
490 mpz_neg (bnds->below, tmp);
491 mpz_clear (tmp);
492 }
493
494 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
495
496 static tree
497 inverse (tree x, tree mask)
498 {
499 tree type = TREE_TYPE (x);
500 tree rslt;
501 unsigned ctr = tree_floor_log2 (mask);
502
503 if (TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
504 {
505 unsigned HOST_WIDE_INT ix;
506 unsigned HOST_WIDE_INT imask;
507 unsigned HOST_WIDE_INT irslt = 1;
508
509 gcc_assert (cst_fits_shwi_p (x));
510 gcc_assert (cst_fits_shwi_p (mask));
511
512 ix = int_cst_value (x);
513 imask = int_cst_value (mask);
514
515 for (; ctr; ctr--)
516 {
517 irslt *= ix;
518 ix *= ix;
519 }
520 irslt &= imask;
521
522 rslt = build_int_cst_type (type, irslt);
523 }
524 else
525 {
526 rslt = build_int_cst (type, 1);
527 for (; ctr; ctr--)
528 {
529 rslt = int_const_binop (MULT_EXPR, rslt, x);
530 x = int_const_binop (MULT_EXPR, x, x);
531 }
532 rslt = int_const_binop (BIT_AND_EXPR, rslt, mask);
533 }
534
535 return rslt;
536 }
537
538 /* Derives the upper bound BND on the number of executions of loop with exit
539 condition S * i <> C. If NO_OVERFLOW is true, then the control variable of
540 the loop does not overflow. EXIT_MUST_BE_TAKEN is true if we are guaranteed
541 that the loop ends through this exit, i.e., the induction variable ever
542 reaches the value of C.
543
544 The value C is equal to final - base, where final and base are the final and
545 initial value of the actual induction variable in the analysed loop. BNDS
546 bounds the value of this difference when computed in signed type with
547 unbounded range, while the computation of C is performed in an unsigned
548 type with the range matching the range of the type of the induction variable.
549 In particular, BNDS.up contains an upper bound on C in the following cases:
550 -- if the iv must reach its final value without overflow, i.e., if
551 NO_OVERFLOW && EXIT_MUST_BE_TAKEN is true, or
552 -- if final >= base, which we know to hold when BNDS.below >= 0. */
553
554 static void
555 number_of_iterations_ne_max (mpz_t bnd, bool no_overflow, tree c, tree s,
556 bounds *bnds, bool exit_must_be_taken)
557 {
558 widest_int max;
559 mpz_t d;
560 tree type = TREE_TYPE (c);
561 bool bnds_u_valid = ((no_overflow && exit_must_be_taken)
562 || mpz_sgn (bnds->below) >= 0);
563
564 if (integer_onep (s)
565 || (TREE_CODE (c) == INTEGER_CST
566 && TREE_CODE (s) == INTEGER_CST
567 && wi::mod_trunc (c, s, TYPE_SIGN (type)) == 0)
568 || (TYPE_OVERFLOW_UNDEFINED (type)
569 && multiple_of_p (type, c, s)))
570 {
571 /* If C is an exact multiple of S, then its value will be reached before
572 the induction variable overflows (unless the loop is exited in some
573 other way before). Note that the actual induction variable in the
574 loop (which ranges from base to final instead of from 0 to C) may
575 overflow, in which case BNDS.up will not be giving a correct upper
576 bound on C; thus, BNDS_U_VALID had to be computed in advance. */
577 no_overflow = true;
578 exit_must_be_taken = true;
579 }
580
581 /* If the induction variable can overflow, the number of iterations is at
582 most the period of the control variable (or infinite, but in that case
583 the whole # of iterations analysis will fail). */
584 if (!no_overflow)
585 {
586 max = wi::mask <widest_int> (TYPE_PRECISION (type) - wi::ctz (s), false);
587 wi::to_mpz (max, bnd, UNSIGNED);
588 return;
589 }
590
591 /* Now we know that the induction variable does not overflow, so the loop
592 iterates at most (range of type / S) times. */
593 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), bnd, UNSIGNED);
594
595 /* If the induction variable is guaranteed to reach the value of C before
596 overflow, ... */
597 if (exit_must_be_taken)
598 {
599 /* ... then we can strengthen this to C / S, and possibly we can use
600 the upper bound on C given by BNDS. */
601 if (TREE_CODE (c) == INTEGER_CST)
602 wi::to_mpz (c, bnd, UNSIGNED);
603 else if (bnds_u_valid)
604 mpz_set (bnd, bnds->up);
605 }
606
607 mpz_init (d);
608 wi::to_mpz (s, d, UNSIGNED);
609 mpz_fdiv_q (bnd, bnd, d);
610 mpz_clear (d);
611 }
612
613 /* Determines number of iterations of loop whose ending condition
614 is IV <> FINAL. TYPE is the type of the iv. The number of
615 iterations is stored to NITER. EXIT_MUST_BE_TAKEN is true if
616 we know that the exit must be taken eventually, i.e., that the IV
617 ever reaches the value FINAL (we derived this earlier, and possibly set
618 NITER->assumptions to make sure this is the case). BNDS contains the
619 bounds on the difference FINAL - IV->base. */
620
621 static bool
622 number_of_iterations_ne (tree type, affine_iv *iv, tree final,
623 struct tree_niter_desc *niter, bool exit_must_be_taken,
624 bounds *bnds)
625 {
626 tree niter_type = unsigned_type_for (type);
627 tree s, c, d, bits, assumption, tmp, bound;
628 mpz_t max;
629
630 niter->control = *iv;
631 niter->bound = final;
632 niter->cmp = NE_EXPR;
633
634 /* Rearrange the terms so that we get inequality S * i <> C, with S
635 positive. Also cast everything to the unsigned type. If IV does
636 not overflow, BNDS bounds the value of C. Also, this is the
637 case if the computation |FINAL - IV->base| does not overflow, i.e.,
638 if BNDS->below in the result is nonnegative. */
639 if (tree_int_cst_sign_bit (iv->step))
640 {
641 s = fold_convert (niter_type,
642 fold_build1 (NEGATE_EXPR, type, iv->step));
643 c = fold_build2 (MINUS_EXPR, niter_type,
644 fold_convert (niter_type, iv->base),
645 fold_convert (niter_type, final));
646 bounds_negate (bnds);
647 }
648 else
649 {
650 s = fold_convert (niter_type, iv->step);
651 c = fold_build2 (MINUS_EXPR, niter_type,
652 fold_convert (niter_type, final),
653 fold_convert (niter_type, iv->base));
654 }
655
656 mpz_init (max);
657 number_of_iterations_ne_max (max, iv->no_overflow, c, s, bnds,
658 exit_must_be_taken);
659 niter->max = widest_int::from (wi::from_mpz (niter_type, max, false),
660 TYPE_SIGN (niter_type));
661 mpz_clear (max);
662
663 /* First the trivial cases -- when the step is 1. */
664 if (integer_onep (s))
665 {
666 niter->niter = c;
667 return true;
668 }
669
670 /* Let nsd (step, size of mode) = d. If d does not divide c, the loop
671 is infinite. Otherwise, the number of iterations is
672 (inverse(s/d) * (c/d)) mod (size of mode/d). */
673 bits = num_ending_zeros (s);
674 bound = build_low_bits_mask (niter_type,
675 (TYPE_PRECISION (niter_type)
676 - tree_to_uhwi (bits)));
677
678 d = fold_binary_to_constant (LSHIFT_EXPR, niter_type,
679 build_int_cst (niter_type, 1), bits);
680 s = fold_binary_to_constant (RSHIFT_EXPR, niter_type, s, bits);
681
682 if (!exit_must_be_taken)
683 {
684 /* If we cannot assume that the exit is taken eventually, record the
685 assumptions for divisibility of c. */
686 assumption = fold_build2 (FLOOR_MOD_EXPR, niter_type, c, d);
687 assumption = fold_build2 (EQ_EXPR, boolean_type_node,
688 assumption, build_int_cst (niter_type, 0));
689 if (!integer_nonzerop (assumption))
690 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
691 niter->assumptions, assumption);
692 }
693
694 c = fold_build2 (EXACT_DIV_EXPR, niter_type, c, d);
695 tmp = fold_build2 (MULT_EXPR, niter_type, c, inverse (s, bound));
696 niter->niter = fold_build2 (BIT_AND_EXPR, niter_type, tmp, bound);
697 return true;
698 }
699
700 /* Checks whether we can determine the final value of the control variable
701 of the loop with ending condition IV0 < IV1 (computed in TYPE).
702 DELTA is the difference IV1->base - IV0->base, STEP is the absolute value
703 of the step. The assumptions necessary to ensure that the computation
704 of the final value does not overflow are recorded in NITER. If we
705 find the final value, we adjust DELTA and return TRUE. Otherwise
706 we return false. BNDS bounds the value of IV1->base - IV0->base,
707 and will be updated by the same amount as DELTA. EXIT_MUST_BE_TAKEN is
708 true if we know that the exit must be taken eventually. */
709
710 static bool
711 number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
712 struct tree_niter_desc *niter,
713 tree *delta, tree step,
714 bool exit_must_be_taken, bounds *bnds)
715 {
716 tree niter_type = TREE_TYPE (step);
717 tree mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
718 tree tmod;
719 mpz_t mmod;
720 tree assumption = boolean_true_node, bound, noloop;
721 bool ret = false, fv_comp_no_overflow;
722 tree type1 = type;
723 if (POINTER_TYPE_P (type))
724 type1 = sizetype;
725
726 if (TREE_CODE (mod) != INTEGER_CST)
727 return false;
728 if (integer_nonzerop (mod))
729 mod = fold_build2 (MINUS_EXPR, niter_type, step, mod);
730 tmod = fold_convert (type1, mod);
731
732 mpz_init (mmod);
733 wi::to_mpz (mod, mmod, UNSIGNED);
734 mpz_neg (mmod, mmod);
735
736 /* If the induction variable does not overflow and the exit is taken,
737 then the computation of the final value does not overflow. This is
738 also obviously the case if the new final value is equal to the
739 current one. Finally, we postulate this for pointer type variables,
740 as the code cannot rely on the object to that the pointer points being
741 placed at the end of the address space (and more pragmatically,
742 TYPE_{MIN,MAX}_VALUE is not defined for pointers). */
743 if (integer_zerop (mod) || POINTER_TYPE_P (type))
744 fv_comp_no_overflow = true;
745 else if (!exit_must_be_taken)
746 fv_comp_no_overflow = false;
747 else
748 fv_comp_no_overflow =
749 (iv0->no_overflow && integer_nonzerop (iv0->step))
750 || (iv1->no_overflow && integer_nonzerop (iv1->step));
751
752 if (integer_nonzerop (iv0->step))
753 {
754 /* The final value of the iv is iv1->base + MOD, assuming that this
755 computation does not overflow, and that
756 iv0->base <= iv1->base + MOD. */
757 if (!fv_comp_no_overflow)
758 {
759 bound = fold_build2 (MINUS_EXPR, type1,
760 TYPE_MAX_VALUE (type1), tmod);
761 assumption = fold_build2 (LE_EXPR, boolean_type_node,
762 iv1->base, bound);
763 if (integer_zerop (assumption))
764 goto end;
765 }
766 if (mpz_cmp (mmod, bnds->below) < 0)
767 noloop = boolean_false_node;
768 else if (POINTER_TYPE_P (type))
769 noloop = fold_build2 (GT_EXPR, boolean_type_node,
770 iv0->base,
771 fold_build_pointer_plus (iv1->base, tmod));
772 else
773 noloop = fold_build2 (GT_EXPR, boolean_type_node,
774 iv0->base,
775 fold_build2 (PLUS_EXPR, type1,
776 iv1->base, tmod));
777 }
778 else
779 {
780 /* The final value of the iv is iv0->base - MOD, assuming that this
781 computation does not overflow, and that
782 iv0->base - MOD <= iv1->base. */
783 if (!fv_comp_no_overflow)
784 {
785 bound = fold_build2 (PLUS_EXPR, type1,
786 TYPE_MIN_VALUE (type1), tmod);
787 assumption = fold_build2 (GE_EXPR, boolean_type_node,
788 iv0->base, bound);
789 if (integer_zerop (assumption))
790 goto end;
791 }
792 if (mpz_cmp (mmod, bnds->below) < 0)
793 noloop = boolean_false_node;
794 else if (POINTER_TYPE_P (type))
795 noloop = fold_build2 (GT_EXPR, boolean_type_node,
796 fold_build_pointer_plus (iv0->base,
797 fold_build1 (NEGATE_EXPR,
798 type1, tmod)),
799 iv1->base);
800 else
801 noloop = fold_build2 (GT_EXPR, boolean_type_node,
802 fold_build2 (MINUS_EXPR, type1,
803 iv0->base, tmod),
804 iv1->base);
805 }
806
807 if (!integer_nonzerop (assumption))
808 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
809 niter->assumptions,
810 assumption);
811 if (!integer_zerop (noloop))
812 niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
813 niter->may_be_zero,
814 noloop);
815 bounds_add (bnds, wi::to_widest (mod), type);
816 *delta = fold_build2 (PLUS_EXPR, niter_type, *delta, mod);
817
818 ret = true;
819 end:
820 mpz_clear (mmod);
821 return ret;
822 }
823
824 /* Add assertions to NITER that ensure that the control variable of the loop
825 with ending condition IV0 < IV1 does not overflow. Types of IV0 and IV1
826 are TYPE. Returns false if we can prove that there is an overflow, true
827 otherwise. STEP is the absolute value of the step. */
828
829 static bool
830 assert_no_overflow_lt (tree type, affine_iv *iv0, affine_iv *iv1,
831 struct tree_niter_desc *niter, tree step)
832 {
833 tree bound, d, assumption, diff;
834 tree niter_type = TREE_TYPE (step);
835
836 if (integer_nonzerop (iv0->step))
837 {
838 /* for (i = iv0->base; i < iv1->base; i += iv0->step) */
839 if (iv0->no_overflow)
840 return true;
841
842 /* If iv0->base is a constant, we can determine the last value before
843 overflow precisely; otherwise we conservatively assume
844 MAX - STEP + 1. */
845
846 if (TREE_CODE (iv0->base) == INTEGER_CST)
847 {
848 d = fold_build2 (MINUS_EXPR, niter_type,
849 fold_convert (niter_type, TYPE_MAX_VALUE (type)),
850 fold_convert (niter_type, iv0->base));
851 diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
852 }
853 else
854 diff = fold_build2 (MINUS_EXPR, niter_type, step,
855 build_int_cst (niter_type, 1));
856 bound = fold_build2 (MINUS_EXPR, type,
857 TYPE_MAX_VALUE (type), fold_convert (type, diff));
858 assumption = fold_build2 (LE_EXPR, boolean_type_node,
859 iv1->base, bound);
860 }
861 else
862 {
863 /* for (i = iv1->base; i > iv0->base; i += iv1->step) */
864 if (iv1->no_overflow)
865 return true;
866
867 if (TREE_CODE (iv1->base) == INTEGER_CST)
868 {
869 d = fold_build2 (MINUS_EXPR, niter_type,
870 fold_convert (niter_type, iv1->base),
871 fold_convert (niter_type, TYPE_MIN_VALUE (type)));
872 diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
873 }
874 else
875 diff = fold_build2 (MINUS_EXPR, niter_type, step,
876 build_int_cst (niter_type, 1));
877 bound = fold_build2 (PLUS_EXPR, type,
878 TYPE_MIN_VALUE (type), fold_convert (type, diff));
879 assumption = fold_build2 (GE_EXPR, boolean_type_node,
880 iv0->base, bound);
881 }
882
883 if (integer_zerop (assumption))
884 return false;
885 if (!integer_nonzerop (assumption))
886 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
887 niter->assumptions, assumption);
888
889 iv0->no_overflow = true;
890 iv1->no_overflow = true;
891 return true;
892 }
893
894 /* Add an assumption to NITER that a loop whose ending condition
895 is IV0 < IV1 rolls. TYPE is the type of the control iv. BNDS
896 bounds the value of IV1->base - IV0->base. */
897
898 static void
899 assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
900 struct tree_niter_desc *niter, bounds *bnds)
901 {
902 tree assumption = boolean_true_node, bound, diff;
903 tree mbz, mbzl, mbzr, type1;
904 bool rolls_p, no_overflow_p;
905 widest_int dstep;
906 mpz_t mstep, max;
907
908 /* We are going to compute the number of iterations as
909 (iv1->base - iv0->base + step - 1) / step, computed in the unsigned
910 variant of TYPE. This formula only works if
911
912 -step + 1 <= (iv1->base - iv0->base) <= MAX - step + 1
913
914 (where MAX is the maximum value of the unsigned variant of TYPE, and
915 the computations in this formula are performed in full precision,
916 i.e., without overflows).
917
918 Usually, for loops with exit condition iv0->base + step * i < iv1->base,
919 we have a condition of the form iv0->base - step < iv1->base before the loop,
920 and for loops iv0->base < iv1->base - step * i the condition
921 iv0->base < iv1->base + step, due to loop header copying, which enable us
922 to prove the lower bound.
923
924 The upper bound is more complicated. Unless the expressions for initial
925 and final value themselves contain enough information, we usually cannot
926 derive it from the context. */
927
928 /* First check whether the answer does not follow from the bounds we gathered
929 before. */
930 if (integer_nonzerop (iv0->step))
931 dstep = wi::to_widest (iv0->step);
932 else
933 {
934 dstep = wi::sext (wi::to_widest (iv1->step), TYPE_PRECISION (type));
935 dstep = -dstep;
936 }
937
938 mpz_init (mstep);
939 wi::to_mpz (dstep, mstep, UNSIGNED);
940 mpz_neg (mstep, mstep);
941 mpz_add_ui (mstep, mstep, 1);
942
943 rolls_p = mpz_cmp (mstep, bnds->below) <= 0;
944
945 mpz_init (max);
946 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), max, UNSIGNED);
947 mpz_add (max, max, mstep);
948 no_overflow_p = (mpz_cmp (bnds->up, max) <= 0
949 /* For pointers, only values lying inside a single object
950 can be compared or manipulated by pointer arithmetics.
951 Gcc in general does not allow or handle objects larger
952 than half of the address space, hence the upper bound
953 is satisfied for pointers. */
954 || POINTER_TYPE_P (type));
955 mpz_clear (mstep);
956 mpz_clear (max);
957
958 if (rolls_p && no_overflow_p)
959 return;
960
961 type1 = type;
962 if (POINTER_TYPE_P (type))
963 type1 = sizetype;
964
965 /* Now the hard part; we must formulate the assumption(s) as expressions, and
966 we must be careful not to introduce overflow. */
967
968 if (integer_nonzerop (iv0->step))
969 {
970 diff = fold_build2 (MINUS_EXPR, type1,
971 iv0->step, build_int_cst (type1, 1));
972
973 /* We need to know that iv0->base >= MIN + iv0->step - 1. Since
974 0 address never belongs to any object, we can assume this for
975 pointers. */
976 if (!POINTER_TYPE_P (type))
977 {
978 bound = fold_build2 (PLUS_EXPR, type1,
979 TYPE_MIN_VALUE (type), diff);
980 assumption = fold_build2 (GE_EXPR, boolean_type_node,
981 iv0->base, bound);
982 }
983
984 /* And then we can compute iv0->base - diff, and compare it with
985 iv1->base. */
986 mbzl = fold_build2 (MINUS_EXPR, type1,
987 fold_convert (type1, iv0->base), diff);
988 mbzr = fold_convert (type1, iv1->base);
989 }
990 else
991 {
992 diff = fold_build2 (PLUS_EXPR, type1,
993 iv1->step, build_int_cst (type1, 1));
994
995 if (!POINTER_TYPE_P (type))
996 {
997 bound = fold_build2 (PLUS_EXPR, type1,
998 TYPE_MAX_VALUE (type), diff);
999 assumption = fold_build2 (LE_EXPR, boolean_type_node,
1000 iv1->base, bound);
1001 }
1002
1003 mbzl = fold_convert (type1, iv0->base);
1004 mbzr = fold_build2 (MINUS_EXPR, type1,
1005 fold_convert (type1, iv1->base), diff);
1006 }
1007
1008 if (!integer_nonzerop (assumption))
1009 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1010 niter->assumptions, assumption);
1011 if (!rolls_p)
1012 {
1013 mbz = fold_build2 (GT_EXPR, boolean_type_node, mbzl, mbzr);
1014 niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
1015 niter->may_be_zero, mbz);
1016 }
1017 }
1018
1019 /* Determines number of iterations of loop whose ending condition
1020 is IV0 < IV1. TYPE is the type of the iv. The number of
1021 iterations is stored to NITER. BNDS bounds the difference
1022 IV1->base - IV0->base. EXIT_MUST_BE_TAKEN is true if we know
1023 that the exit must be taken eventually. */
1024
1025 static bool
1026 number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
1027 struct tree_niter_desc *niter,
1028 bool exit_must_be_taken, bounds *bnds)
1029 {
1030 tree niter_type = unsigned_type_for (type);
1031 tree delta, step, s;
1032 mpz_t mstep, tmp;
1033
1034 if (integer_nonzerop (iv0->step))
1035 {
1036 niter->control = *iv0;
1037 niter->cmp = LT_EXPR;
1038 niter->bound = iv1->base;
1039 }
1040 else
1041 {
1042 niter->control = *iv1;
1043 niter->cmp = GT_EXPR;
1044 niter->bound = iv0->base;
1045 }
1046
1047 delta = fold_build2 (MINUS_EXPR, niter_type,
1048 fold_convert (niter_type, iv1->base),
1049 fold_convert (niter_type, iv0->base));
1050
1051 /* First handle the special case that the step is +-1. */
1052 if ((integer_onep (iv0->step) && integer_zerop (iv1->step))
1053 || (integer_all_onesp (iv1->step) && integer_zerop (iv0->step)))
1054 {
1055 /* for (i = iv0->base; i < iv1->base; i++)
1056
1057 or
1058
1059 for (i = iv1->base; i > iv0->base; i--).
1060
1061 In both cases # of iterations is iv1->base - iv0->base, assuming that
1062 iv1->base >= iv0->base.
1063
1064 First try to derive a lower bound on the value of
1065 iv1->base - iv0->base, computed in full precision. If the difference
1066 is nonnegative, we are done, otherwise we must record the
1067 condition. */
1068
1069 if (mpz_sgn (bnds->below) < 0)
1070 niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
1071 iv1->base, iv0->base);
1072 niter->niter = delta;
1073 niter->max = widest_int::from (wi::from_mpz (niter_type, bnds->up, false),
1074 TYPE_SIGN (niter_type));
1075 return true;
1076 }
1077
1078 if (integer_nonzerop (iv0->step))
1079 step = fold_convert (niter_type, iv0->step);
1080 else
1081 step = fold_convert (niter_type,
1082 fold_build1 (NEGATE_EXPR, type, iv1->step));
1083
1084 /* If we can determine the final value of the control iv exactly, we can
1085 transform the condition to != comparison. In particular, this will be
1086 the case if DELTA is constant. */
1087 if (number_of_iterations_lt_to_ne (type, iv0, iv1, niter, &delta, step,
1088 exit_must_be_taken, bnds))
1089 {
1090 affine_iv zps;
1091
1092 zps.base = build_int_cst (niter_type, 0);
1093 zps.step = step;
1094 /* number_of_iterations_lt_to_ne will add assumptions that ensure that
1095 zps does not overflow. */
1096 zps.no_overflow = true;
1097
1098 return number_of_iterations_ne (type, &zps, delta, niter, true, bnds);
1099 }
1100
1101 /* Make sure that the control iv does not overflow. */
1102 if (!assert_no_overflow_lt (type, iv0, iv1, niter, step))
1103 return false;
1104
1105 /* We determine the number of iterations as (delta + step - 1) / step. For
1106 this to work, we must know that iv1->base >= iv0->base - step + 1,
1107 otherwise the loop does not roll. */
1108 assert_loop_rolls_lt (type, iv0, iv1, niter, bnds);
1109
1110 s = fold_build2 (MINUS_EXPR, niter_type,
1111 step, build_int_cst (niter_type, 1));
1112 delta = fold_build2 (PLUS_EXPR, niter_type, delta, s);
1113 niter->niter = fold_build2 (FLOOR_DIV_EXPR, niter_type, delta, step);
1114
1115 mpz_init (mstep);
1116 mpz_init (tmp);
1117 wi::to_mpz (step, mstep, UNSIGNED);
1118 mpz_add (tmp, bnds->up, mstep);
1119 mpz_sub_ui (tmp, tmp, 1);
1120 mpz_fdiv_q (tmp, tmp, mstep);
1121 niter->max = widest_int::from (wi::from_mpz (niter_type, tmp, false),
1122 TYPE_SIGN (niter_type));
1123 mpz_clear (mstep);
1124 mpz_clear (tmp);
1125
1126 return true;
1127 }
1128
1129 /* Determines number of iterations of loop whose ending condition
1130 is IV0 <= IV1. TYPE is the type of the iv. The number of
1131 iterations is stored to NITER. EXIT_MUST_BE_TAKEN is true if
1132 we know that this condition must eventually become false (we derived this
1133 earlier, and possibly set NITER->assumptions to make sure this
1134 is the case). BNDS bounds the difference IV1->base - IV0->base. */
1135
1136 static bool
1137 number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
1138 struct tree_niter_desc *niter, bool exit_must_be_taken,
1139 bounds *bnds)
1140 {
1141 tree assumption;
1142 tree type1 = type;
1143 if (POINTER_TYPE_P (type))
1144 type1 = sizetype;
1145
1146 /* Say that IV0 is the control variable. Then IV0 <= IV1 iff
1147 IV0 < IV1 + 1, assuming that IV1 is not equal to the greatest
1148 value of the type. This we must know anyway, since if it is
1149 equal to this value, the loop rolls forever. We do not check
1150 this condition for pointer type ivs, as the code cannot rely on
1151 the object to that the pointer points being placed at the end of
1152 the address space (and more pragmatically, TYPE_{MIN,MAX}_VALUE is
1153 not defined for pointers). */
1154
1155 if (!exit_must_be_taken && !POINTER_TYPE_P (type))
1156 {
1157 if (integer_nonzerop (iv0->step))
1158 assumption = fold_build2 (NE_EXPR, boolean_type_node,
1159 iv1->base, TYPE_MAX_VALUE (type));
1160 else
1161 assumption = fold_build2 (NE_EXPR, boolean_type_node,
1162 iv0->base, TYPE_MIN_VALUE (type));
1163
1164 if (integer_zerop (assumption))
1165 return false;
1166 if (!integer_nonzerop (assumption))
1167 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1168 niter->assumptions, assumption);
1169 }
1170
1171 if (integer_nonzerop (iv0->step))
1172 {
1173 if (POINTER_TYPE_P (type))
1174 iv1->base = fold_build_pointer_plus_hwi (iv1->base, 1);
1175 else
1176 iv1->base = fold_build2 (PLUS_EXPR, type1, iv1->base,
1177 build_int_cst (type1, 1));
1178 }
1179 else if (POINTER_TYPE_P (type))
1180 iv0->base = fold_build_pointer_plus_hwi (iv0->base, -1);
1181 else
1182 iv0->base = fold_build2 (MINUS_EXPR, type1,
1183 iv0->base, build_int_cst (type1, 1));
1184
1185 bounds_add (bnds, 1, type1);
1186
1187 return number_of_iterations_lt (type, iv0, iv1, niter, exit_must_be_taken,
1188 bnds);
1189 }
1190
1191 /* Dumps description of affine induction variable IV to FILE. */
1192
1193 static void
1194 dump_affine_iv (FILE *file, affine_iv *iv)
1195 {
1196 if (!integer_zerop (iv->step))
1197 fprintf (file, "[");
1198
1199 print_generic_expr (dump_file, iv->base, TDF_SLIM);
1200
1201 if (!integer_zerop (iv->step))
1202 {
1203 fprintf (file, ", + , ");
1204 print_generic_expr (dump_file, iv->step, TDF_SLIM);
1205 fprintf (file, "]%s", iv->no_overflow ? "(no_overflow)" : "");
1206 }
1207 }
1208
1209 /* Determine the number of iterations according to condition (for staying
1210 inside loop) which compares two induction variables using comparison
1211 operator CODE. The induction variable on left side of the comparison
1212 is IV0, the right-hand side is IV1. Both induction variables must have
1213 type TYPE, which must be an integer or pointer type. The steps of the
1214 ivs must be constants (or NULL_TREE, which is interpreted as constant zero).
1215
1216 LOOP is the loop whose number of iterations we are determining.
1217
1218 ONLY_EXIT is true if we are sure this is the only way the loop could be
1219 exited (including possibly non-returning function calls, exceptions, etc.)
1220 -- in this case we can use the information whether the control induction
1221 variables can overflow or not in a more efficient way.
1222
1223 if EVERY_ITERATION is true, we know the test is executed on every iteration.
1224
1225 The results (number of iterations and assumptions as described in
1226 comments at struct tree_niter_desc in tree-flow.h) are stored to NITER.
1227 Returns false if it fails to determine number of iterations, true if it
1228 was determined (possibly with some assumptions). */
1229
1230 static bool
1231 number_of_iterations_cond (struct loop *loop,
1232 tree type, affine_iv *iv0, enum tree_code code,
1233 affine_iv *iv1, struct tree_niter_desc *niter,
1234 bool only_exit, bool every_iteration)
1235 {
1236 bool exit_must_be_taken = false, ret;
1237 bounds bnds;
1238
1239 /* If the test is not executed every iteration, wrapping may make the test
1240 to pass again.
1241 TODO: the overflow case can be still used as unreliable estimate of upper
1242 bound. But we have no API to pass it down to number of iterations code
1243 and, at present, it will not use it anyway. */
1244 if (!every_iteration
1245 && (!iv0->no_overflow || !iv1->no_overflow
1246 || code == NE_EXPR || code == EQ_EXPR))
1247 return false;
1248
1249 /* The meaning of these assumptions is this:
1250 if !assumptions
1251 then the rest of information does not have to be valid
1252 if may_be_zero then the loop does not roll, even if
1253 niter != 0. */
1254 niter->assumptions = boolean_true_node;
1255 niter->may_be_zero = boolean_false_node;
1256 niter->niter = NULL_TREE;
1257 niter->max = 0;
1258 niter->bound = NULL_TREE;
1259 niter->cmp = ERROR_MARK;
1260
1261 /* Make < comparison from > ones, and for NE_EXPR comparisons, ensure that
1262 the control variable is on lhs. */
1263 if (code == GE_EXPR || code == GT_EXPR
1264 || (code == NE_EXPR && integer_zerop (iv0->step)))
1265 {
1266 SWAP (iv0, iv1);
1267 code = swap_tree_comparison (code);
1268 }
1269
1270 if (POINTER_TYPE_P (type))
1271 {
1272 /* Comparison of pointers is undefined unless both iv0 and iv1 point
1273 to the same object. If they do, the control variable cannot wrap
1274 (as wrap around the bounds of memory will never return a pointer
1275 that would be guaranteed to point to the same object, even if we
1276 avoid undefined behavior by casting to size_t and back). */
1277 iv0->no_overflow = true;
1278 iv1->no_overflow = true;
1279 }
1280
1281 /* If the control induction variable does not overflow and the only exit
1282 from the loop is the one that we analyze, we know it must be taken
1283 eventually. */
1284 if (only_exit)
1285 {
1286 if (!integer_zerop (iv0->step) && iv0->no_overflow)
1287 exit_must_be_taken = true;
1288 else if (!integer_zerop (iv1->step) && iv1->no_overflow)
1289 exit_must_be_taken = true;
1290 }
1291
1292 /* We can handle the case when neither of the sides of the comparison is
1293 invariant, provided that the test is NE_EXPR. This rarely occurs in
1294 practice, but it is simple enough to manage. */
1295 if (!integer_zerop (iv0->step) && !integer_zerop (iv1->step))
1296 {
1297 tree step_type = POINTER_TYPE_P (type) ? sizetype : type;
1298 if (code != NE_EXPR)
1299 return false;
1300
1301 iv0->step = fold_binary_to_constant (MINUS_EXPR, step_type,
1302 iv0->step, iv1->step);
1303 iv0->no_overflow = false;
1304 iv1->step = build_int_cst (step_type, 0);
1305 iv1->no_overflow = true;
1306 }
1307
1308 /* If the result of the comparison is a constant, the loop is weird. More
1309 precise handling would be possible, but the situation is not common enough
1310 to waste time on it. */
1311 if (integer_zerop (iv0->step) && integer_zerop (iv1->step))
1312 return false;
1313
1314 /* Ignore loops of while (i-- < 10) type. */
1315 if (code != NE_EXPR)
1316 {
1317 if (iv0->step && tree_int_cst_sign_bit (iv0->step))
1318 return false;
1319
1320 if (!integer_zerop (iv1->step) && !tree_int_cst_sign_bit (iv1->step))
1321 return false;
1322 }
1323
1324 /* If the loop exits immediately, there is nothing to do. */
1325 tree tem = fold_binary (code, boolean_type_node, iv0->base, iv1->base);
1326 if (tem && integer_zerop (tem))
1327 {
1328 niter->niter = build_int_cst (unsigned_type_for (type), 0);
1329 niter->max = 0;
1330 return true;
1331 }
1332
1333 /* OK, now we know we have a senseful loop. Handle several cases, depending
1334 on what comparison operator is used. */
1335 bound_difference (loop, iv1->base, iv0->base, &bnds);
1336
1337 if (dump_file && (dump_flags & TDF_DETAILS))
1338 {
1339 fprintf (dump_file,
1340 "Analyzing # of iterations of loop %d\n", loop->num);
1341
1342 fprintf (dump_file, " exit condition ");
1343 dump_affine_iv (dump_file, iv0);
1344 fprintf (dump_file, " %s ",
1345 code == NE_EXPR ? "!="
1346 : code == LT_EXPR ? "<"
1347 : "<=");
1348 dump_affine_iv (dump_file, iv1);
1349 fprintf (dump_file, "\n");
1350
1351 fprintf (dump_file, " bounds on difference of bases: ");
1352 mpz_out_str (dump_file, 10, bnds.below);
1353 fprintf (dump_file, " ... ");
1354 mpz_out_str (dump_file, 10, bnds.up);
1355 fprintf (dump_file, "\n");
1356 }
1357
1358 switch (code)
1359 {
1360 case NE_EXPR:
1361 gcc_assert (integer_zerop (iv1->step));
1362 ret = number_of_iterations_ne (type, iv0, iv1->base, niter,
1363 exit_must_be_taken, &bnds);
1364 break;
1365
1366 case LT_EXPR:
1367 ret = number_of_iterations_lt (type, iv0, iv1, niter, exit_must_be_taken,
1368 &bnds);
1369 break;
1370
1371 case LE_EXPR:
1372 ret = number_of_iterations_le (type, iv0, iv1, niter, exit_must_be_taken,
1373 &bnds);
1374 break;
1375
1376 default:
1377 gcc_unreachable ();
1378 }
1379
1380 mpz_clear (bnds.up);
1381 mpz_clear (bnds.below);
1382
1383 if (dump_file && (dump_flags & TDF_DETAILS))
1384 {
1385 if (ret)
1386 {
1387 fprintf (dump_file, " result:\n");
1388 if (!integer_nonzerop (niter->assumptions))
1389 {
1390 fprintf (dump_file, " under assumptions ");
1391 print_generic_expr (dump_file, niter->assumptions, TDF_SLIM);
1392 fprintf (dump_file, "\n");
1393 }
1394
1395 if (!integer_zerop (niter->may_be_zero))
1396 {
1397 fprintf (dump_file, " zero if ");
1398 print_generic_expr (dump_file, niter->may_be_zero, TDF_SLIM);
1399 fprintf (dump_file, "\n");
1400 }
1401
1402 fprintf (dump_file, " # of iterations ");
1403 print_generic_expr (dump_file, niter->niter, TDF_SLIM);
1404 fprintf (dump_file, ", bounded by ");
1405 print_decu (niter->max, dump_file);
1406 fprintf (dump_file, "\n");
1407 }
1408 else
1409 fprintf (dump_file, " failed\n\n");
1410 }
1411 return ret;
1412 }
1413
1414 /* Substitute NEW for OLD in EXPR and fold the result. */
1415
1416 static tree
1417 simplify_replace_tree (tree expr, tree old, tree new_tree)
1418 {
1419 unsigned i, n;
1420 tree ret = NULL_TREE, e, se;
1421
1422 if (!expr)
1423 return NULL_TREE;
1424
1425 /* Do not bother to replace constants. */
1426 if (CONSTANT_CLASS_P (old))
1427 return expr;
1428
1429 if (expr == old
1430 || operand_equal_p (expr, old, 0))
1431 return unshare_expr (new_tree);
1432
1433 if (!EXPR_P (expr))
1434 return expr;
1435
1436 n = TREE_OPERAND_LENGTH (expr);
1437 for (i = 0; i < n; i++)
1438 {
1439 e = TREE_OPERAND (expr, i);
1440 se = simplify_replace_tree (e, old, new_tree);
1441 if (e == se)
1442 continue;
1443
1444 if (!ret)
1445 ret = copy_node (expr);
1446
1447 TREE_OPERAND (ret, i) = se;
1448 }
1449
1450 return (ret ? fold (ret) : expr);
1451 }
1452
1453 /* Expand definitions of ssa names in EXPR as long as they are simple
1454 enough, and return the new expression. */
1455
1456 tree
1457 expand_simple_operations (tree expr)
1458 {
1459 unsigned i, n;
1460 tree ret = NULL_TREE, e, ee, e1;
1461 enum tree_code code;
1462 gimple stmt;
1463
1464 if (expr == NULL_TREE)
1465 return expr;
1466
1467 if (is_gimple_min_invariant (expr))
1468 return expr;
1469
1470 code = TREE_CODE (expr);
1471 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
1472 {
1473 n = TREE_OPERAND_LENGTH (expr);
1474 for (i = 0; i < n; i++)
1475 {
1476 e = TREE_OPERAND (expr, i);
1477 ee = expand_simple_operations (e);
1478 if (e == ee)
1479 continue;
1480
1481 if (!ret)
1482 ret = copy_node (expr);
1483
1484 TREE_OPERAND (ret, i) = ee;
1485 }
1486
1487 if (!ret)
1488 return expr;
1489
1490 fold_defer_overflow_warnings ();
1491 ret = fold (ret);
1492 fold_undefer_and_ignore_overflow_warnings ();
1493 return ret;
1494 }
1495
1496 if (TREE_CODE (expr) != SSA_NAME)
1497 return expr;
1498
1499 stmt = SSA_NAME_DEF_STMT (expr);
1500 if (gimple_code (stmt) == GIMPLE_PHI)
1501 {
1502 basic_block src, dest;
1503
1504 if (gimple_phi_num_args (stmt) != 1)
1505 return expr;
1506 e = PHI_ARG_DEF (stmt, 0);
1507
1508 /* Avoid propagating through loop exit phi nodes, which
1509 could break loop-closed SSA form restrictions. */
1510 dest = gimple_bb (stmt);
1511 src = single_pred (dest);
1512 if (TREE_CODE (e) == SSA_NAME
1513 && src->loop_father != dest->loop_father)
1514 return expr;
1515
1516 return expand_simple_operations (e);
1517 }
1518 if (gimple_code (stmt) != GIMPLE_ASSIGN)
1519 return expr;
1520
1521 /* Avoid expanding to expressions that contain SSA names that need
1522 to take part in abnormal coalescing. */
1523 ssa_op_iter iter;
1524 FOR_EACH_SSA_TREE_OPERAND (e, stmt, iter, SSA_OP_USE)
1525 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (e))
1526 return expr;
1527
1528 e = gimple_assign_rhs1 (stmt);
1529 code = gimple_assign_rhs_code (stmt);
1530 if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
1531 {
1532 if (is_gimple_min_invariant (e))
1533 return e;
1534
1535 if (code == SSA_NAME)
1536 return expand_simple_operations (e);
1537
1538 return expr;
1539 }
1540
1541 switch (code)
1542 {
1543 CASE_CONVERT:
1544 /* Casts are simple. */
1545 ee = expand_simple_operations (e);
1546 return fold_build1 (code, TREE_TYPE (expr), ee);
1547
1548 case PLUS_EXPR:
1549 case MINUS_EXPR:
1550 case POINTER_PLUS_EXPR:
1551 /* And increments and decrements by a constant are simple. */
1552 e1 = gimple_assign_rhs2 (stmt);
1553 if (!is_gimple_min_invariant (e1))
1554 return expr;
1555
1556 ee = expand_simple_operations (e);
1557 return fold_build2 (code, TREE_TYPE (expr), ee, e1);
1558
1559 default:
1560 return expr;
1561 }
1562 }
1563
1564 /* Tries to simplify EXPR using the condition COND. Returns the simplified
1565 expression (or EXPR unchanged, if no simplification was possible). */
1566
1567 static tree
1568 tree_simplify_using_condition_1 (tree cond, tree expr)
1569 {
1570 bool changed;
1571 tree e, te, e0, e1, e2, notcond;
1572 enum tree_code code = TREE_CODE (expr);
1573
1574 if (code == INTEGER_CST)
1575 return expr;
1576
1577 if (code == TRUTH_OR_EXPR
1578 || code == TRUTH_AND_EXPR
1579 || code == COND_EXPR)
1580 {
1581 changed = false;
1582
1583 e0 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 0));
1584 if (TREE_OPERAND (expr, 0) != e0)
1585 changed = true;
1586
1587 e1 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 1));
1588 if (TREE_OPERAND (expr, 1) != e1)
1589 changed = true;
1590
1591 if (code == COND_EXPR)
1592 {
1593 e2 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 2));
1594 if (TREE_OPERAND (expr, 2) != e2)
1595 changed = true;
1596 }
1597 else
1598 e2 = NULL_TREE;
1599
1600 if (changed)
1601 {
1602 if (code == COND_EXPR)
1603 expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
1604 else
1605 expr = fold_build2 (code, boolean_type_node, e0, e1);
1606 }
1607
1608 return expr;
1609 }
1610
1611 /* In case COND is equality, we may be able to simplify EXPR by copy/constant
1612 propagation, and vice versa. Fold does not handle this, since it is
1613 considered too expensive. */
1614 if (TREE_CODE (cond) == EQ_EXPR)
1615 {
1616 e0 = TREE_OPERAND (cond, 0);
1617 e1 = TREE_OPERAND (cond, 1);
1618
1619 /* We know that e0 == e1. Check whether we cannot simplify expr
1620 using this fact. */
1621 e = simplify_replace_tree (expr, e0, e1);
1622 if (integer_zerop (e) || integer_nonzerop (e))
1623 return e;
1624
1625 e = simplify_replace_tree (expr, e1, e0);
1626 if (integer_zerop (e) || integer_nonzerop (e))
1627 return e;
1628 }
1629 if (TREE_CODE (expr) == EQ_EXPR)
1630 {
1631 e0 = TREE_OPERAND (expr, 0);
1632 e1 = TREE_OPERAND (expr, 1);
1633
1634 /* If e0 == e1 (EXPR) implies !COND, then EXPR cannot be true. */
1635 e = simplify_replace_tree (cond, e0, e1);
1636 if (integer_zerop (e))
1637 return e;
1638 e = simplify_replace_tree (cond, e1, e0);
1639 if (integer_zerop (e))
1640 return e;
1641 }
1642 if (TREE_CODE (expr) == NE_EXPR)
1643 {
1644 e0 = TREE_OPERAND (expr, 0);
1645 e1 = TREE_OPERAND (expr, 1);
1646
1647 /* If e0 == e1 (!EXPR) implies !COND, then EXPR must be true. */
1648 e = simplify_replace_tree (cond, e0, e1);
1649 if (integer_zerop (e))
1650 return boolean_true_node;
1651 e = simplify_replace_tree (cond, e1, e0);
1652 if (integer_zerop (e))
1653 return boolean_true_node;
1654 }
1655
1656 te = expand_simple_operations (expr);
1657
1658 /* Check whether COND ==> EXPR. */
1659 notcond = invert_truthvalue (cond);
1660 e = fold_binary (TRUTH_OR_EXPR, boolean_type_node, notcond, te);
1661 if (e && integer_nonzerop (e))
1662 return e;
1663
1664 /* Check whether COND ==> not EXPR. */
1665 e = fold_binary (TRUTH_AND_EXPR, boolean_type_node, cond, te);
1666 if (e && integer_zerop (e))
1667 return e;
1668
1669 return expr;
1670 }
1671
1672 /* Tries to simplify EXPR using the condition COND. Returns the simplified
1673 expression (or EXPR unchanged, if no simplification was possible).
1674 Wrapper around tree_simplify_using_condition_1 that ensures that chains
1675 of simple operations in definitions of ssa names in COND are expanded,
1676 so that things like casts or incrementing the value of the bound before
1677 the loop do not cause us to fail. */
1678
1679 static tree
1680 tree_simplify_using_condition (tree cond, tree expr)
1681 {
1682 cond = expand_simple_operations (cond);
1683
1684 return tree_simplify_using_condition_1 (cond, expr);
1685 }
1686
1687 /* Tries to simplify EXPR using the conditions on entry to LOOP.
1688 Returns the simplified expression (or EXPR unchanged, if no
1689 simplification was possible).*/
1690
1691 static tree
1692 simplify_using_initial_conditions (struct loop *loop, tree expr)
1693 {
1694 edge e;
1695 basic_block bb;
1696 gimple stmt;
1697 tree cond;
1698 int cnt = 0;
1699
1700 if (TREE_CODE (expr) == INTEGER_CST)
1701 return expr;
1702
1703 /* Limit walking the dominators to avoid quadraticness in
1704 the number of BBs times the number of loops in degenerate
1705 cases. */
1706 for (bb = loop->header;
1707 bb != ENTRY_BLOCK_PTR && cnt < MAX_DOMINATORS_TO_WALK;
1708 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
1709 {
1710 if (!single_pred_p (bb))
1711 continue;
1712 e = single_pred_edge (bb);
1713
1714 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
1715 continue;
1716
1717 stmt = last_stmt (e->src);
1718 cond = fold_build2 (gimple_cond_code (stmt),
1719 boolean_type_node,
1720 gimple_cond_lhs (stmt),
1721 gimple_cond_rhs (stmt));
1722 if (e->flags & EDGE_FALSE_VALUE)
1723 cond = invert_truthvalue (cond);
1724 expr = tree_simplify_using_condition (cond, expr);
1725 ++cnt;
1726 }
1727
1728 return expr;
1729 }
1730
1731 /* Tries to simplify EXPR using the evolutions of the loop invariants
1732 in the superloops of LOOP. Returns the simplified expression
1733 (or EXPR unchanged, if no simplification was possible). */
1734
1735 static tree
1736 simplify_using_outer_evolutions (struct loop *loop, tree expr)
1737 {
1738 enum tree_code code = TREE_CODE (expr);
1739 bool changed;
1740 tree e, e0, e1, e2;
1741
1742 if (is_gimple_min_invariant (expr))
1743 return expr;
1744
1745 if (code == TRUTH_OR_EXPR
1746 || code == TRUTH_AND_EXPR
1747 || code == COND_EXPR)
1748 {
1749 changed = false;
1750
1751 e0 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 0));
1752 if (TREE_OPERAND (expr, 0) != e0)
1753 changed = true;
1754
1755 e1 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 1));
1756 if (TREE_OPERAND (expr, 1) != e1)
1757 changed = true;
1758
1759 if (code == COND_EXPR)
1760 {
1761 e2 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 2));
1762 if (TREE_OPERAND (expr, 2) != e2)
1763 changed = true;
1764 }
1765 else
1766 e2 = NULL_TREE;
1767
1768 if (changed)
1769 {
1770 if (code == COND_EXPR)
1771 expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
1772 else
1773 expr = fold_build2 (code, boolean_type_node, e0, e1);
1774 }
1775
1776 return expr;
1777 }
1778
1779 e = instantiate_parameters (loop, expr);
1780 if (is_gimple_min_invariant (e))
1781 return e;
1782
1783 return expr;
1784 }
1785
1786 /* Returns true if EXIT is the only possible exit from LOOP. */
1787
1788 bool
1789 loop_only_exit_p (const struct loop *loop, const_edge exit)
1790 {
1791 basic_block *body;
1792 gimple_stmt_iterator bsi;
1793 unsigned i;
1794 gimple call;
1795
1796 if (exit != single_exit (loop))
1797 return false;
1798
1799 body = get_loop_body (loop);
1800 for (i = 0; i < loop->num_nodes; i++)
1801 {
1802 for (bsi = gsi_start_bb (body[i]); !gsi_end_p (bsi); gsi_next (&bsi))
1803 {
1804 call = gsi_stmt (bsi);
1805 if (gimple_code (call) != GIMPLE_CALL)
1806 continue;
1807
1808 if (gimple_has_side_effects (call))
1809 {
1810 free (body);
1811 return false;
1812 }
1813 }
1814 }
1815
1816 free (body);
1817 return true;
1818 }
1819
1820 /* Stores description of number of iterations of LOOP derived from
1821 EXIT (an exit edge of the LOOP) in NITER. Returns true if some
1822 useful information could be derived (and fields of NITER has
1823 meaning described in comments at struct tree_niter_desc
1824 declaration), false otherwise. If WARN is true and
1825 -Wunsafe-loop-optimizations was given, warn if the optimizer is going to use
1826 potentially unsafe assumptions.
1827 When EVERY_ITERATION is true, only tests that are known to be executed
1828 every iteration are considered (i.e. only test that alone bounds the loop).
1829 */
1830
1831 bool
1832 number_of_iterations_exit (struct loop *loop, edge exit,
1833 struct tree_niter_desc *niter,
1834 bool warn, bool every_iteration)
1835 {
1836 gimple stmt;
1837 tree type;
1838 tree op0, op1;
1839 enum tree_code code;
1840 affine_iv iv0, iv1;
1841 bool safe;
1842
1843 safe = dominated_by_p (CDI_DOMINATORS, loop->latch, exit->src);
1844
1845 if (every_iteration && !safe)
1846 return false;
1847
1848 niter->assumptions = boolean_false_node;
1849 stmt = last_stmt (exit->src);
1850 if (!stmt || gimple_code (stmt) != GIMPLE_COND)
1851 return false;
1852
1853 /* We want the condition for staying inside loop. */
1854 code = gimple_cond_code (stmt);
1855 if (exit->flags & EDGE_TRUE_VALUE)
1856 code = invert_tree_comparison (code, false);
1857
1858 switch (code)
1859 {
1860 case GT_EXPR:
1861 case GE_EXPR:
1862 case LT_EXPR:
1863 case LE_EXPR:
1864 case NE_EXPR:
1865 break;
1866
1867 default:
1868 return false;
1869 }
1870
1871 op0 = gimple_cond_lhs (stmt);
1872 op1 = gimple_cond_rhs (stmt);
1873 type = TREE_TYPE (op0);
1874
1875 if (TREE_CODE (type) != INTEGER_TYPE
1876 && !POINTER_TYPE_P (type))
1877 return false;
1878
1879 if (!simple_iv (loop, loop_containing_stmt (stmt), op0, &iv0, false))
1880 return false;
1881 if (!simple_iv (loop, loop_containing_stmt (stmt), op1, &iv1, false))
1882 return false;
1883
1884 /* We don't want to see undefined signed overflow warnings while
1885 computing the number of iterations. */
1886 fold_defer_overflow_warnings ();
1887
1888 iv0.base = expand_simple_operations (iv0.base);
1889 iv1.base = expand_simple_operations (iv1.base);
1890 if (!number_of_iterations_cond (loop, type, &iv0, code, &iv1, niter,
1891 loop_only_exit_p (loop, exit), safe))
1892 {
1893 fold_undefer_and_ignore_overflow_warnings ();
1894 return false;
1895 }
1896
1897 if (optimize >= 3)
1898 {
1899 niter->assumptions = simplify_using_outer_evolutions (loop,
1900 niter->assumptions);
1901 niter->may_be_zero = simplify_using_outer_evolutions (loop,
1902 niter->may_be_zero);
1903 niter->niter = simplify_using_outer_evolutions (loop, niter->niter);
1904 }
1905
1906 niter->assumptions
1907 = simplify_using_initial_conditions (loop,
1908 niter->assumptions);
1909 niter->may_be_zero
1910 = simplify_using_initial_conditions (loop,
1911 niter->may_be_zero);
1912
1913 fold_undefer_and_ignore_overflow_warnings ();
1914
1915 /* If NITER has simplified into a constant, update MAX. */
1916 if (TREE_CODE (niter->niter) == INTEGER_CST)
1917 niter->max = wi::to_widest (niter->niter);
1918
1919 if (integer_onep (niter->assumptions))
1920 return true;
1921
1922 /* With -funsafe-loop-optimizations we assume that nothing bad can happen.
1923 But if we can prove that there is overflow or some other source of weird
1924 behavior, ignore the loop even with -funsafe-loop-optimizations. */
1925 if (integer_zerop (niter->assumptions) || !single_exit (loop))
1926 return false;
1927
1928 if (flag_unsafe_loop_optimizations)
1929 niter->assumptions = boolean_true_node;
1930
1931 if (warn)
1932 {
1933 const char *wording;
1934 location_t loc = gimple_location (stmt);
1935
1936 /* We can provide a more specific warning if one of the operator is
1937 constant and the other advances by +1 or -1. */
1938 if (!integer_zerop (iv1.step)
1939 ? (integer_zerop (iv0.step)
1940 && (integer_onep (iv1.step) || integer_all_onesp (iv1.step)))
1941 : (integer_onep (iv0.step) || integer_all_onesp (iv0.step)))
1942 wording =
1943 flag_unsafe_loop_optimizations
1944 ? N_("assuming that the loop is not infinite")
1945 : N_("cannot optimize possibly infinite loops");
1946 else
1947 wording =
1948 flag_unsafe_loop_optimizations
1949 ? N_("assuming that the loop counter does not overflow")
1950 : N_("cannot optimize loop, the loop counter may overflow");
1951
1952 warning_at ((LOCATION_LINE (loc) > 0) ? loc : input_location,
1953 OPT_Wunsafe_loop_optimizations, "%s", gettext (wording));
1954 }
1955
1956 return flag_unsafe_loop_optimizations;
1957 }
1958
1959 /* Try to determine the number of iterations of LOOP. If we succeed,
1960 expression giving number of iterations is returned and *EXIT is
1961 set to the edge from that the information is obtained. Otherwise
1962 chrec_dont_know is returned. */
1963
1964 tree
1965 find_loop_niter (struct loop *loop, edge *exit)
1966 {
1967 unsigned i;
1968 vec<edge> exits = get_loop_exit_edges (loop);
1969 edge ex;
1970 tree niter = NULL_TREE, aniter;
1971 struct tree_niter_desc desc;
1972
1973 *exit = NULL;
1974 FOR_EACH_VEC_ELT (exits, i, ex)
1975 {
1976 if (!number_of_iterations_exit (loop, ex, &desc, false))
1977 continue;
1978
1979 if (integer_nonzerop (desc.may_be_zero))
1980 {
1981 /* We exit in the first iteration through this exit.
1982 We won't find anything better. */
1983 niter = build_int_cst (unsigned_type_node, 0);
1984 *exit = ex;
1985 break;
1986 }
1987
1988 if (!integer_zerop (desc.may_be_zero))
1989 continue;
1990
1991 aniter = desc.niter;
1992
1993 if (!niter)
1994 {
1995 /* Nothing recorded yet. */
1996 niter = aniter;
1997 *exit = ex;
1998 continue;
1999 }
2000
2001 /* Prefer constants, the lower the better. */
2002 if (TREE_CODE (aniter) != INTEGER_CST)
2003 continue;
2004
2005 if (TREE_CODE (niter) != INTEGER_CST)
2006 {
2007 niter = aniter;
2008 *exit = ex;
2009 continue;
2010 }
2011
2012 if (tree_int_cst_lt (aniter, niter))
2013 {
2014 niter = aniter;
2015 *exit = ex;
2016 continue;
2017 }
2018 }
2019 exits.release ();
2020
2021 return niter ? niter : chrec_dont_know;
2022 }
2023
2024 /* Return true if loop is known to have bounded number of iterations. */
2025
2026 bool
2027 finite_loop_p (struct loop *loop)
2028 {
2029 widest_int nit;
2030 int flags;
2031
2032 if (flag_unsafe_loop_optimizations)
2033 return true;
2034 flags = flags_from_decl_or_type (current_function_decl);
2035 if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE))
2036 {
2037 if (dump_file && (dump_flags & TDF_DETAILS))
2038 fprintf (dump_file, "Found loop %i to be finite: it is within pure or const function.\n",
2039 loop->num);
2040 return true;
2041 }
2042
2043 if (loop->any_upper_bound
2044 || max_loop_iterations (loop, &nit))
2045 {
2046 if (dump_file && (dump_flags & TDF_DETAILS))
2047 fprintf (dump_file, "Found loop %i to be finite: upper bound found.\n",
2048 loop->num);
2049 return true;
2050 }
2051 return false;
2052 }
2053
2054 /*
2055
2056 Analysis of a number of iterations of a loop by a brute-force evaluation.
2057
2058 */
2059
2060 /* Bound on the number of iterations we try to evaluate. */
2061
2062 #define MAX_ITERATIONS_TO_TRACK \
2063 ((unsigned) PARAM_VALUE (PARAM_MAX_ITERATIONS_TO_TRACK))
2064
2065 /* Returns the loop phi node of LOOP such that ssa name X is derived from its
2066 result by a chain of operations such that all but exactly one of their
2067 operands are constants. */
2068
2069 static gimple
2070 chain_of_csts_start (struct loop *loop, tree x)
2071 {
2072 gimple stmt = SSA_NAME_DEF_STMT (x);
2073 tree use;
2074 basic_block bb = gimple_bb (stmt);
2075 enum tree_code code;
2076
2077 if (!bb
2078 || !flow_bb_inside_loop_p (loop, bb))
2079 return NULL;
2080
2081 if (gimple_code (stmt) == GIMPLE_PHI)
2082 {
2083 if (bb == loop->header)
2084 return stmt;
2085
2086 return NULL;
2087 }
2088
2089 if (gimple_code (stmt) != GIMPLE_ASSIGN)
2090 return NULL;
2091
2092 code = gimple_assign_rhs_code (stmt);
2093 if (gimple_references_memory_p (stmt)
2094 || TREE_CODE_CLASS (code) == tcc_reference
2095 || (code == ADDR_EXPR
2096 && !is_gimple_min_invariant (gimple_assign_rhs1 (stmt))))
2097 return NULL;
2098
2099 use = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
2100 if (use == NULL_TREE)
2101 return NULL;
2102
2103 return chain_of_csts_start (loop, use);
2104 }
2105
2106 /* Determines whether the expression X is derived from a result of a phi node
2107 in header of LOOP such that
2108
2109 * the derivation of X consists only from operations with constants
2110 * the initial value of the phi node is constant
2111 * the value of the phi node in the next iteration can be derived from the
2112 value in the current iteration by a chain of operations with constants.
2113
2114 If such phi node exists, it is returned, otherwise NULL is returned. */
2115
2116 static gimple
2117 get_base_for (struct loop *loop, tree x)
2118 {
2119 gimple phi;
2120 tree init, next;
2121
2122 if (is_gimple_min_invariant (x))
2123 return NULL;
2124
2125 phi = chain_of_csts_start (loop, x);
2126 if (!phi)
2127 return NULL;
2128
2129 init = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
2130 next = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
2131
2132 if (TREE_CODE (next) != SSA_NAME)
2133 return NULL;
2134
2135 if (!is_gimple_min_invariant (init))
2136 return NULL;
2137
2138 if (chain_of_csts_start (loop, next) != phi)
2139 return NULL;
2140
2141 return phi;
2142 }
2143
2144 /* Given an expression X, then
2145
2146 * if X is NULL_TREE, we return the constant BASE.
2147 * otherwise X is a SSA name, whose value in the considered loop is derived
2148 by a chain of operations with constant from a result of a phi node in
2149 the header of the loop. Then we return value of X when the value of the
2150 result of this phi node is given by the constant BASE. */
2151
2152 static tree
2153 get_val_for (tree x, tree base)
2154 {
2155 gimple stmt;
2156
2157 gcc_assert (is_gimple_min_invariant (base));
2158
2159 if (!x)
2160 return base;
2161
2162 stmt = SSA_NAME_DEF_STMT (x);
2163 if (gimple_code (stmt) == GIMPLE_PHI)
2164 return base;
2165
2166 gcc_assert (is_gimple_assign (stmt));
2167
2168 /* STMT must be either an assignment of a single SSA name or an
2169 expression involving an SSA name and a constant. Try to fold that
2170 expression using the value for the SSA name. */
2171 if (gimple_assign_ssa_name_copy_p (stmt))
2172 return get_val_for (gimple_assign_rhs1 (stmt), base);
2173 else if (gimple_assign_rhs_class (stmt) == GIMPLE_UNARY_RHS
2174 && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
2175 {
2176 return fold_build1 (gimple_assign_rhs_code (stmt),
2177 gimple_expr_type (stmt),
2178 get_val_for (gimple_assign_rhs1 (stmt), base));
2179 }
2180 else if (gimple_assign_rhs_class (stmt) == GIMPLE_BINARY_RHS)
2181 {
2182 tree rhs1 = gimple_assign_rhs1 (stmt);
2183 tree rhs2 = gimple_assign_rhs2 (stmt);
2184 if (TREE_CODE (rhs1) == SSA_NAME)
2185 rhs1 = get_val_for (rhs1, base);
2186 else if (TREE_CODE (rhs2) == SSA_NAME)
2187 rhs2 = get_val_for (rhs2, base);
2188 else
2189 gcc_unreachable ();
2190 return fold_build2 (gimple_assign_rhs_code (stmt),
2191 gimple_expr_type (stmt), rhs1, rhs2);
2192 }
2193 else
2194 gcc_unreachable ();
2195 }
2196
2197
2198 /* Tries to count the number of iterations of LOOP till it exits by EXIT
2199 by brute force -- i.e. by determining the value of the operands of the
2200 condition at EXIT in first few iterations of the loop (assuming that
2201 these values are constant) and determining the first one in that the
2202 condition is not satisfied. Returns the constant giving the number
2203 of the iterations of LOOP if successful, chrec_dont_know otherwise. */
2204
2205 tree
2206 loop_niter_by_eval (struct loop *loop, edge exit)
2207 {
2208 tree acnd;
2209 tree op[2], val[2], next[2], aval[2];
2210 gimple phi, cond;
2211 unsigned i, j;
2212 enum tree_code cmp;
2213
2214 cond = last_stmt (exit->src);
2215 if (!cond || gimple_code (cond) != GIMPLE_COND)
2216 return chrec_dont_know;
2217
2218 cmp = gimple_cond_code (cond);
2219 if (exit->flags & EDGE_TRUE_VALUE)
2220 cmp = invert_tree_comparison (cmp, false);
2221
2222 switch (cmp)
2223 {
2224 case EQ_EXPR:
2225 case NE_EXPR:
2226 case GT_EXPR:
2227 case GE_EXPR:
2228 case LT_EXPR:
2229 case LE_EXPR:
2230 op[0] = gimple_cond_lhs (cond);
2231 op[1] = gimple_cond_rhs (cond);
2232 break;
2233
2234 default:
2235 return chrec_dont_know;
2236 }
2237
2238 for (j = 0; j < 2; j++)
2239 {
2240 if (is_gimple_min_invariant (op[j]))
2241 {
2242 val[j] = op[j];
2243 next[j] = NULL_TREE;
2244 op[j] = NULL_TREE;
2245 }
2246 else
2247 {
2248 phi = get_base_for (loop, op[j]);
2249 if (!phi)
2250 return chrec_dont_know;
2251 val[j] = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
2252 next[j] = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
2253 }
2254 }
2255
2256 /* Don't issue signed overflow warnings. */
2257 fold_defer_overflow_warnings ();
2258
2259 for (i = 0; i < MAX_ITERATIONS_TO_TRACK; i++)
2260 {
2261 for (j = 0; j < 2; j++)
2262 aval[j] = get_val_for (op[j], val[j]);
2263
2264 acnd = fold_binary (cmp, boolean_type_node, aval[0], aval[1]);
2265 if (acnd && integer_zerop (acnd))
2266 {
2267 fold_undefer_and_ignore_overflow_warnings ();
2268 if (dump_file && (dump_flags & TDF_DETAILS))
2269 fprintf (dump_file,
2270 "Proved that loop %d iterates %d times using brute force.\n",
2271 loop->num, i);
2272 return build_int_cst (unsigned_type_node, i);
2273 }
2274
2275 for (j = 0; j < 2; j++)
2276 {
2277 val[j] = get_val_for (next[j], val[j]);
2278 if (!is_gimple_min_invariant (val[j]))
2279 {
2280 fold_undefer_and_ignore_overflow_warnings ();
2281 return chrec_dont_know;
2282 }
2283 }
2284 }
2285
2286 fold_undefer_and_ignore_overflow_warnings ();
2287
2288 return chrec_dont_know;
2289 }
2290
2291 /* Finds the exit of the LOOP by that the loop exits after a constant
2292 number of iterations and stores the exit edge to *EXIT. The constant
2293 giving the number of iterations of LOOP is returned. The number of
2294 iterations is determined using loop_niter_by_eval (i.e. by brute force
2295 evaluation). If we are unable to find the exit for that loop_niter_by_eval
2296 determines the number of iterations, chrec_dont_know is returned. */
2297
2298 tree
2299 find_loop_niter_by_eval (struct loop *loop, edge *exit)
2300 {
2301 unsigned i;
2302 vec<edge> exits = get_loop_exit_edges (loop);
2303 edge ex;
2304 tree niter = NULL_TREE, aniter;
2305
2306 *exit = NULL;
2307
2308 /* Loops with multiple exits are expensive to handle and less important. */
2309 if (!flag_expensive_optimizations
2310 && exits.length () > 1)
2311 {
2312 exits.release ();
2313 return chrec_dont_know;
2314 }
2315
2316 FOR_EACH_VEC_ELT (exits, i, ex)
2317 {
2318 if (!just_once_each_iteration_p (loop, ex->src))
2319 continue;
2320
2321 aniter = loop_niter_by_eval (loop, ex);
2322 if (chrec_contains_undetermined (aniter))
2323 continue;
2324
2325 if (niter
2326 && !tree_int_cst_lt (aniter, niter))
2327 continue;
2328
2329 niter = aniter;
2330 *exit = ex;
2331 }
2332 exits.release ();
2333
2334 return niter ? niter : chrec_dont_know;
2335 }
2336
2337 /*
2338
2339 Analysis of upper bounds on number of iterations of a loop.
2340
2341 */
2342
2343 static widest_int derive_constant_upper_bound_ops (tree, tree,
2344 enum tree_code, tree);
2345
2346 /* Returns a constant upper bound on the value of the right-hand side of
2347 an assignment statement STMT. */
2348
2349 static widest_int
2350 derive_constant_upper_bound_assign (gimple stmt)
2351 {
2352 enum tree_code code = gimple_assign_rhs_code (stmt);
2353 tree op0 = gimple_assign_rhs1 (stmt);
2354 tree op1 = gimple_assign_rhs2 (stmt);
2355
2356 return derive_constant_upper_bound_ops (TREE_TYPE (gimple_assign_lhs (stmt)),
2357 op0, code, op1);
2358 }
2359
2360 /* Returns a constant upper bound on the value of expression VAL. VAL
2361 is considered to be unsigned. If its type is signed, its value must
2362 be nonnegative. */
2363
2364 static widest_int
2365 derive_constant_upper_bound (tree val)
2366 {
2367 enum tree_code code;
2368 tree op0, op1;
2369
2370 extract_ops_from_tree (val, &code, &op0, &op1);
2371 return derive_constant_upper_bound_ops (TREE_TYPE (val), op0, code, op1);
2372 }
2373
2374 /* Returns a constant upper bound on the value of expression OP0 CODE OP1,
2375 whose type is TYPE. The expression is considered to be unsigned. If
2376 its type is signed, its value must be nonnegative. */
2377
2378 static widest_int
2379 derive_constant_upper_bound_ops (tree type, tree op0,
2380 enum tree_code code, tree op1)
2381 {
2382 tree subtype, maxt;
2383 widest_int bnd, max, mmax, cst;
2384 gimple stmt;
2385
2386 if (INTEGRAL_TYPE_P (type))
2387 maxt = TYPE_MAX_VALUE (type);
2388 else
2389 maxt = upper_bound_in_type (type, type);
2390
2391 max = wi::to_widest (maxt);
2392
2393 switch (code)
2394 {
2395 case INTEGER_CST:
2396 return wi::to_widest (op0);
2397
2398 CASE_CONVERT:
2399 subtype = TREE_TYPE (op0);
2400 if (!TYPE_UNSIGNED (subtype)
2401 /* If TYPE is also signed, the fact that VAL is nonnegative implies
2402 that OP0 is nonnegative. */
2403 && TYPE_UNSIGNED (type)
2404 && !tree_expr_nonnegative_p (op0))
2405 {
2406 /* If we cannot prove that the casted expression is nonnegative,
2407 we cannot establish more useful upper bound than the precision
2408 of the type gives us. */
2409 return max;
2410 }
2411
2412 /* We now know that op0 is an nonnegative value. Try deriving an upper
2413 bound for it. */
2414 bnd = derive_constant_upper_bound (op0);
2415
2416 /* If the bound does not fit in TYPE, max. value of TYPE could be
2417 attained. */
2418 if (wi::ltu_p (max, bnd))
2419 return max;
2420
2421 return bnd;
2422
2423 case PLUS_EXPR:
2424 case POINTER_PLUS_EXPR:
2425 case MINUS_EXPR:
2426 if (TREE_CODE (op1) != INTEGER_CST
2427 || !tree_expr_nonnegative_p (op0))
2428 return max;
2429
2430 /* Canonicalize to OP0 - CST. Consider CST to be signed, in order to
2431 choose the most logical way how to treat this constant regardless
2432 of the signedness of the type. */
2433 cst = wi::sext (wi::to_widest (op1), TYPE_PRECISION (type));
2434 if (code != MINUS_EXPR)
2435 cst = -cst;
2436
2437 bnd = derive_constant_upper_bound (op0);
2438
2439 if (wi::neg_p (cst))
2440 {
2441 cst = -cst;
2442 /* Avoid CST == 0x80000... */
2443 if (wi::neg_p (cst))
2444 return max;;
2445
2446 /* OP0 + CST. We need to check that
2447 BND <= MAX (type) - CST. */
2448
2449 mmax -= cst;
2450 if (wi::ltu_p (bnd, max))
2451 return max;
2452
2453 return bnd + cst;
2454 }
2455 else
2456 {
2457 /* OP0 - CST, where CST >= 0.
2458
2459 If TYPE is signed, we have already verified that OP0 >= 0, and we
2460 know that the result is nonnegative. This implies that
2461 VAL <= BND - CST.
2462
2463 If TYPE is unsigned, we must additionally know that OP0 >= CST,
2464 otherwise the operation underflows.
2465 */
2466
2467 /* This should only happen if the type is unsigned; however, for
2468 buggy programs that use overflowing signed arithmetics even with
2469 -fno-wrapv, this condition may also be true for signed values. */
2470 if (wi::ltu_p (bnd, cst))
2471 return max;
2472
2473 if (TYPE_UNSIGNED (type))
2474 {
2475 tree tem = fold_binary (GE_EXPR, boolean_type_node, op0,
2476 wide_int_to_tree (type, cst));
2477 if (!tem || integer_nonzerop (tem))
2478 return max;
2479 }
2480
2481 bnd -= cst;
2482 }
2483
2484 return bnd;
2485
2486 case FLOOR_DIV_EXPR:
2487 case EXACT_DIV_EXPR:
2488 if (TREE_CODE (op1) != INTEGER_CST
2489 || tree_int_cst_sign_bit (op1))
2490 return max;
2491
2492 bnd = derive_constant_upper_bound (op0);
2493 return wi::udiv_floor (bnd, wi::to_widest (op1));
2494
2495 case BIT_AND_EXPR:
2496 if (TREE_CODE (op1) != INTEGER_CST
2497 || tree_int_cst_sign_bit (op1))
2498 return max;
2499 return wi::to_widest (op1);
2500
2501 case SSA_NAME:
2502 stmt = SSA_NAME_DEF_STMT (op0);
2503 if (gimple_code (stmt) != GIMPLE_ASSIGN
2504 || gimple_assign_lhs (stmt) != op0)
2505 return max;
2506 return derive_constant_upper_bound_assign (stmt);
2507
2508 default:
2509 return max;
2510 }
2511 }
2512
2513 /* Emit a -Waggressive-loop-optimizations warning if needed. */
2514
2515 static void
2516 do_warn_aggressive_loop_optimizations (struct loop *loop,
2517 widest_int i_bound, gimple stmt)
2518 {
2519 /* Don't warn if the loop doesn't have known constant bound. */
2520 if (!loop->nb_iterations
2521 || TREE_CODE (loop->nb_iterations) != INTEGER_CST
2522 || !warn_aggressive_loop_optimizations
2523 /* To avoid warning multiple times for the same loop,
2524 only start warning when we preserve loops. */
2525 || (cfun->curr_properties & PROP_loops) == 0
2526 /* Only warn once per loop. */
2527 || loop->warned_aggressive_loop_optimizations
2528 /* Only warn if undefined behavior gives us lower estimate than the
2529 known constant bound. */
2530 || wi::cmpu (i_bound, wi::to_widest (loop->nb_iterations)) >= 0
2531 /* And undefined behavior happens unconditionally. */
2532 || !dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (stmt)))
2533 return;
2534
2535 edge e = single_exit (loop);
2536 if (e == NULL)
2537 return;
2538
2539 gimple estmt = last_stmt (e->src);
2540 if (warning_at (gimple_location (stmt), OPT_Waggressive_loop_optimizations,
2541 "iteration %E invokes undefined behavior",
2542 wide_int_to_tree (TREE_TYPE (loop->nb_iterations),
2543 i_bound)))
2544 inform (gimple_location (estmt), "containing loop");
2545 loop->warned_aggressive_loop_optimizations = true;
2546 }
2547
2548 /* Records that AT_STMT is executed at most BOUND + 1 times in LOOP. IS_EXIT
2549 is true if the loop is exited immediately after STMT, and this exit
2550 is taken at last when the STMT is executed BOUND + 1 times.
2551 REALISTIC is true if BOUND is expected to be close to the real number
2552 of iterations. UPPER is true if we are sure the loop iterates at most
2553 BOUND times. I_BOUND is an unsigned wide_int upper estimate on BOUND. */
2554
2555 static void
2556 record_estimate (struct loop *loop, tree bound, widest_int i_bound,
2557 gimple at_stmt, bool is_exit, bool realistic, bool upper)
2558 {
2559 widest_int delta;
2560
2561 if (dump_file && (dump_flags & TDF_DETAILS))
2562 {
2563 fprintf (dump_file, "Statement %s", is_exit ? "(exit)" : "");
2564 print_gimple_stmt (dump_file, at_stmt, 0, TDF_SLIM);
2565 fprintf (dump_file, " is %sexecuted at most ",
2566 upper ? "" : "probably ");
2567 print_generic_expr (dump_file, bound, TDF_SLIM);
2568 fprintf (dump_file, " (bounded by ");
2569 print_decu (i_bound, dump_file);
2570 fprintf (dump_file, ") + 1 times in loop %d.\n", loop->num);
2571 }
2572
2573 /* If the I_BOUND is just an estimate of BOUND, it rarely is close to the
2574 real number of iterations. */
2575 if (TREE_CODE (bound) != INTEGER_CST)
2576 realistic = false;
2577 else
2578 gcc_checking_assert (i_bound == wi::to_widest (bound));
2579 if (!upper && !realistic)
2580 return;
2581
2582 /* If we have a guaranteed upper bound, record it in the appropriate
2583 list, unless this is an !is_exit bound (i.e. undefined behavior in
2584 at_stmt) in a loop with known constant number of iterations. */
2585 if (upper
2586 && (is_exit
2587 || loop->nb_iterations == NULL_TREE
2588 || TREE_CODE (loop->nb_iterations) != INTEGER_CST))
2589 {
2590 struct nb_iter_bound *elt = ggc_alloc_nb_iter_bound ();
2591
2592 elt->bound = i_bound;
2593 elt->stmt = at_stmt;
2594 elt->is_exit = is_exit;
2595 elt->next = loop->bounds;
2596 loop->bounds = elt;
2597 }
2598
2599 /* If statement is executed on every path to the loop latch, we can directly
2600 infer the upper bound on the # of iterations of the loop. */
2601 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (at_stmt)))
2602 return;
2603
2604 /* Update the number of iteration estimates according to the bound.
2605 If at_stmt is an exit then the loop latch is executed at most BOUND times,
2606 otherwise it can be executed BOUND + 1 times. We will lower the estimate
2607 later if such statement must be executed on last iteration */
2608 if (is_exit)
2609 delta = 0;
2610 else
2611 delta = 1;
2612 i_bound += delta;
2613
2614 /* If an overflow occurred, ignore the result. */
2615 if (wi::ltu_p (i_bound, delta))
2616 return;
2617
2618 if (upper && !is_exit)
2619 do_warn_aggressive_loop_optimizations (loop, i_bound, at_stmt);
2620 record_niter_bound (loop, i_bound, realistic, upper);
2621 }
2622
2623 /* Record the estimate on number of iterations of LOOP based on the fact that
2624 the induction variable BASE + STEP * i evaluated in STMT does not wrap and
2625 its values belong to the range <LOW, HIGH>. REALISTIC is true if the
2626 estimated number of iterations is expected to be close to the real one.
2627 UPPER is true if we are sure the induction variable does not wrap. */
2628
2629 static void
2630 record_nonwrapping_iv (struct loop *loop, tree base, tree step, gimple stmt,
2631 tree low, tree high, bool realistic, bool upper)
2632 {
2633 tree niter_bound, extreme, delta;
2634 tree type = TREE_TYPE (base), unsigned_type;
2635
2636 if (TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
2637 return;
2638
2639 if (dump_file && (dump_flags & TDF_DETAILS))
2640 {
2641 fprintf (dump_file, "Induction variable (");
2642 print_generic_expr (dump_file, TREE_TYPE (base), TDF_SLIM);
2643 fprintf (dump_file, ") ");
2644 print_generic_expr (dump_file, base, TDF_SLIM);
2645 fprintf (dump_file, " + ");
2646 print_generic_expr (dump_file, step, TDF_SLIM);
2647 fprintf (dump_file, " * iteration does not wrap in statement ");
2648 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
2649 fprintf (dump_file, " in loop %d.\n", loop->num);
2650 }
2651
2652 unsigned_type = unsigned_type_for (type);
2653 base = fold_convert (unsigned_type, base);
2654 step = fold_convert (unsigned_type, step);
2655
2656 if (tree_int_cst_sign_bit (step))
2657 {
2658 extreme = fold_convert (unsigned_type, low);
2659 if (TREE_CODE (base) != INTEGER_CST)
2660 base = fold_convert (unsigned_type, high);
2661 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
2662 step = fold_build1 (NEGATE_EXPR, unsigned_type, step);
2663 }
2664 else
2665 {
2666 extreme = fold_convert (unsigned_type, high);
2667 if (TREE_CODE (base) != INTEGER_CST)
2668 base = fold_convert (unsigned_type, low);
2669 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
2670 }
2671
2672 /* STMT is executed at most NITER_BOUND + 1 times, since otherwise the value
2673 would get out of the range. */
2674 niter_bound = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step);
2675 widest_int max = derive_constant_upper_bound (niter_bound);
2676 record_estimate (loop, niter_bound, max, stmt, false, realistic, upper);
2677 }
2678
2679 /* Determine information about number of iterations a LOOP from the index
2680 IDX of a data reference accessed in STMT. RELIABLE is true if STMT is
2681 guaranteed to be executed in every iteration of LOOP. Callback for
2682 for_each_index. */
2683
2684 struct ilb_data
2685 {
2686 struct loop *loop;
2687 gimple stmt;
2688 };
2689
2690 static bool
2691 idx_infer_loop_bounds (tree base, tree *idx, void *dta)
2692 {
2693 struct ilb_data *data = (struct ilb_data *) dta;
2694 tree ev, init, step;
2695 tree low, high, type, next;
2696 bool sign, upper = true, at_end = false;
2697 struct loop *loop = data->loop;
2698 bool reliable = true;
2699
2700 if (TREE_CODE (base) != ARRAY_REF)
2701 return true;
2702
2703 /* For arrays at the end of the structure, we are not guaranteed that they
2704 do not really extend over their declared size. However, for arrays of
2705 size greater than one, this is unlikely to be intended. */
2706 if (array_at_struct_end_p (base))
2707 {
2708 at_end = true;
2709 upper = false;
2710 }
2711
2712 struct loop *dloop = loop_containing_stmt (data->stmt);
2713 if (!dloop)
2714 return true;
2715
2716 ev = analyze_scalar_evolution (dloop, *idx);
2717 ev = instantiate_parameters (loop, ev);
2718 init = initial_condition (ev);
2719 step = evolution_part_in_loop_num (ev, loop->num);
2720
2721 if (!init
2722 || !step
2723 || TREE_CODE (step) != INTEGER_CST
2724 || integer_zerop (step)
2725 || tree_contains_chrecs (init, NULL)
2726 || chrec_contains_symbols_defined_in_loop (init, loop->num))
2727 return true;
2728
2729 low = array_ref_low_bound (base);
2730 high = array_ref_up_bound (base);
2731
2732 /* The case of nonconstant bounds could be handled, but it would be
2733 complicated. */
2734 if (TREE_CODE (low) != INTEGER_CST
2735 || !high
2736 || TREE_CODE (high) != INTEGER_CST)
2737 return true;
2738 sign = tree_int_cst_sign_bit (step);
2739 type = TREE_TYPE (step);
2740
2741 /* The array of length 1 at the end of a structure most likely extends
2742 beyond its bounds. */
2743 if (at_end
2744 && operand_equal_p (low, high, 0))
2745 return true;
2746
2747 /* In case the relevant bound of the array does not fit in type, or
2748 it does, but bound + step (in type) still belongs into the range of the
2749 array, the index may wrap and still stay within the range of the array
2750 (consider e.g. if the array is indexed by the full range of
2751 unsigned char).
2752
2753 To make things simpler, we require both bounds to fit into type, although
2754 there are cases where this would not be strictly necessary. */
2755 if (!int_fits_type_p (high, type)
2756 || !int_fits_type_p (low, type))
2757 return true;
2758 low = fold_convert (type, low);
2759 high = fold_convert (type, high);
2760
2761 if (sign)
2762 next = fold_binary (PLUS_EXPR, type, low, step);
2763 else
2764 next = fold_binary (PLUS_EXPR, type, high, step);
2765
2766 if (tree_int_cst_compare (low, next) <= 0
2767 && tree_int_cst_compare (next, high) <= 0)
2768 return true;
2769
2770 /* If access is not executed on every iteration, we must ensure that overlow may
2771 not make the access valid later. */
2772 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (data->stmt))
2773 && scev_probably_wraps_p (initial_condition_in_loop_num (ev, loop->num),
2774 step, data->stmt, loop, true))
2775 reliable = false;
2776
2777 record_nonwrapping_iv (loop, init, step, data->stmt, low, high, reliable, upper);
2778 return true;
2779 }
2780
2781 /* Determine information about number of iterations a LOOP from the bounds
2782 of arrays in the data reference REF accessed in STMT. RELIABLE is true if
2783 STMT is guaranteed to be executed in every iteration of LOOP.*/
2784
2785 static void
2786 infer_loop_bounds_from_ref (struct loop *loop, gimple stmt, tree ref)
2787 {
2788 struct ilb_data data;
2789
2790 data.loop = loop;
2791 data.stmt = stmt;
2792 for_each_index (&ref, idx_infer_loop_bounds, &data);
2793 }
2794
2795 /* Determine information about number of iterations of a LOOP from the way
2796 arrays are used in STMT. RELIABLE is true if STMT is guaranteed to be
2797 executed in every iteration of LOOP. */
2798
2799 static void
2800 infer_loop_bounds_from_array (struct loop *loop, gimple stmt)
2801 {
2802 if (is_gimple_assign (stmt))
2803 {
2804 tree op0 = gimple_assign_lhs (stmt);
2805 tree op1 = gimple_assign_rhs1 (stmt);
2806
2807 /* For each memory access, analyze its access function
2808 and record a bound on the loop iteration domain. */
2809 if (REFERENCE_CLASS_P (op0))
2810 infer_loop_bounds_from_ref (loop, stmt, op0);
2811
2812 if (REFERENCE_CLASS_P (op1))
2813 infer_loop_bounds_from_ref (loop, stmt, op1);
2814 }
2815 else if (is_gimple_call (stmt))
2816 {
2817 tree arg, lhs;
2818 unsigned i, n = gimple_call_num_args (stmt);
2819
2820 lhs = gimple_call_lhs (stmt);
2821 if (lhs && REFERENCE_CLASS_P (lhs))
2822 infer_loop_bounds_from_ref (loop, stmt, lhs);
2823
2824 for (i = 0; i < n; i++)
2825 {
2826 arg = gimple_call_arg (stmt, i);
2827 if (REFERENCE_CLASS_P (arg))
2828 infer_loop_bounds_from_ref (loop, stmt, arg);
2829 }
2830 }
2831 }
2832
2833 /* Determine information about number of iterations of a LOOP from the fact
2834 that pointer arithmetics in STMT does not overflow. */
2835
2836 static void
2837 infer_loop_bounds_from_pointer_arith (struct loop *loop, gimple stmt)
2838 {
2839 tree def, base, step, scev, type, low, high;
2840 tree var, ptr;
2841
2842 if (!is_gimple_assign (stmt)
2843 || gimple_assign_rhs_code (stmt) != POINTER_PLUS_EXPR)
2844 return;
2845
2846 def = gimple_assign_lhs (stmt);
2847 if (TREE_CODE (def) != SSA_NAME)
2848 return;
2849
2850 type = TREE_TYPE (def);
2851 if (!nowrap_type_p (type))
2852 return;
2853
2854 ptr = gimple_assign_rhs1 (stmt);
2855 if (!expr_invariant_in_loop_p (loop, ptr))
2856 return;
2857
2858 var = gimple_assign_rhs2 (stmt);
2859 if (TYPE_PRECISION (type) != TYPE_PRECISION (TREE_TYPE (var)))
2860 return;
2861
2862 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
2863 if (chrec_contains_undetermined (scev))
2864 return;
2865
2866 base = initial_condition_in_loop_num (scev, loop->num);
2867 step = evolution_part_in_loop_num (scev, loop->num);
2868
2869 if (!base || !step
2870 || TREE_CODE (step) != INTEGER_CST
2871 || tree_contains_chrecs (base, NULL)
2872 || chrec_contains_symbols_defined_in_loop (base, loop->num))
2873 return;
2874
2875 low = lower_bound_in_type (type, type);
2876 high = upper_bound_in_type (type, type);
2877
2878 /* In C, pointer arithmetic p + 1 cannot use a NULL pointer, and p - 1 cannot
2879 produce a NULL pointer. The contrary would mean NULL points to an object,
2880 while NULL is supposed to compare unequal with the address of all objects.
2881 Furthermore, p + 1 cannot produce a NULL pointer and p - 1 cannot use a
2882 NULL pointer since that would mean wrapping, which we assume here not to
2883 happen. So, we can exclude NULL from the valid range of pointer
2884 arithmetic. */
2885 if (flag_delete_null_pointer_checks && int_cst_value (low) == 0)
2886 low = build_int_cstu (TREE_TYPE (low), TYPE_ALIGN_UNIT (TREE_TYPE (type)));
2887
2888 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
2889 }
2890
2891 /* Determine information about number of iterations of a LOOP from the fact
2892 that signed arithmetics in STMT does not overflow. */
2893
2894 static void
2895 infer_loop_bounds_from_signedness (struct loop *loop, gimple stmt)
2896 {
2897 tree def, base, step, scev, type, low, high;
2898
2899 if (gimple_code (stmt) != GIMPLE_ASSIGN)
2900 return;
2901
2902 def = gimple_assign_lhs (stmt);
2903
2904 if (TREE_CODE (def) != SSA_NAME)
2905 return;
2906
2907 type = TREE_TYPE (def);
2908 if (!INTEGRAL_TYPE_P (type)
2909 || !TYPE_OVERFLOW_UNDEFINED (type))
2910 return;
2911
2912 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
2913 if (chrec_contains_undetermined (scev))
2914 return;
2915
2916 base = initial_condition_in_loop_num (scev, loop->num);
2917 step = evolution_part_in_loop_num (scev, loop->num);
2918
2919 if (!base || !step
2920 || TREE_CODE (step) != INTEGER_CST
2921 || tree_contains_chrecs (base, NULL)
2922 || chrec_contains_symbols_defined_in_loop (base, loop->num))
2923 return;
2924
2925 low = lower_bound_in_type (type, type);
2926 high = upper_bound_in_type (type, type);
2927
2928 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
2929 }
2930
2931 /* The following analyzers are extracting informations on the bounds
2932 of LOOP from the following undefined behaviors:
2933
2934 - data references should not access elements over the statically
2935 allocated size,
2936
2937 - signed variables should not overflow when flag_wrapv is not set.
2938 */
2939
2940 static void
2941 infer_loop_bounds_from_undefined (struct loop *loop)
2942 {
2943 unsigned i;
2944 basic_block *bbs;
2945 gimple_stmt_iterator bsi;
2946 basic_block bb;
2947 bool reliable;
2948
2949 bbs = get_loop_body (loop);
2950
2951 for (i = 0; i < loop->num_nodes; i++)
2952 {
2953 bb = bbs[i];
2954
2955 /* If BB is not executed in each iteration of the loop, we cannot
2956 use the operations in it to infer reliable upper bound on the
2957 # of iterations of the loop. However, we can use it as a guess.
2958 Reliable guesses come only from array bounds. */
2959 reliable = dominated_by_p (CDI_DOMINATORS, loop->latch, bb);
2960
2961 for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
2962 {
2963 gimple stmt = gsi_stmt (bsi);
2964
2965 infer_loop_bounds_from_array (loop, stmt);
2966
2967 if (reliable)
2968 {
2969 infer_loop_bounds_from_signedness (loop, stmt);
2970 infer_loop_bounds_from_pointer_arith (loop, stmt);
2971 }
2972 }
2973
2974 }
2975
2976 free (bbs);
2977 }
2978
2979 /* Compare wide ints, callback for qsort. */
2980
2981 static int
2982 wide_int_cmp (const void *p1, const void *p2)
2983 {
2984 const widest_int *d1 = (const widest_int *) p1;
2985 const widest_int *d2 = (const widest_int *) p2;
2986 return wi::cmpu (*d1, *d2);
2987 }
2988
2989 /* Return index of BOUND in BOUNDS array sorted in increasing order.
2990 Lookup by binary search. */
2991
2992 static int
2993 bound_index (vec<widest_int> bounds, const widest_int &bound)
2994 {
2995 unsigned int end = bounds.length ();
2996 unsigned int begin = 0;
2997
2998 /* Find a matching index by means of a binary search. */
2999 while (begin != end)
3000 {
3001 unsigned int middle = (begin + end) / 2;
3002 widest_int index = bounds[middle];
3003
3004 if (index == bound)
3005 return middle;
3006 else if (wi::ltu_p (index, bound))
3007 begin = middle + 1;
3008 else
3009 end = middle;
3010 }
3011 gcc_unreachable ();
3012 }
3013
3014 /* We recorded loop bounds only for statements dominating loop latch (and thus
3015 executed each loop iteration). If there are any bounds on statements not
3016 dominating the loop latch we can improve the estimate by walking the loop
3017 body and seeing if every path from loop header to loop latch contains
3018 some bounded statement. */
3019
3020 static void
3021 discover_iteration_bound_by_body_walk (struct loop *loop)
3022 {
3023 pointer_map_t *bb_bounds;
3024 struct nb_iter_bound *elt;
3025 vec<widest_int> bounds = vNULL;
3026 vec<vec<basic_block> > queues = vNULL;
3027 vec<basic_block> queue = vNULL;
3028 ptrdiff_t queue_index;
3029 ptrdiff_t latch_index = 0;
3030 pointer_map_t *block_priority;
3031
3032 /* Discover what bounds may interest us. */
3033 for (elt = loop->bounds; elt; elt = elt->next)
3034 {
3035 widest_int bound = elt->bound;
3036
3037 /* Exit terminates loop at given iteration, while non-exits produce undefined
3038 effect on the next iteration. */
3039 if (!elt->is_exit)
3040 {
3041 bound += 1;
3042 /* If an overflow occurred, ignore the result. */
3043 if (bound == 0)
3044 continue;
3045 }
3046
3047 if (!loop->any_upper_bound
3048 || wi::ltu_p (bound, loop->nb_iterations_upper_bound))
3049 bounds.safe_push (bound);
3050 }
3051
3052 /* Exit early if there is nothing to do. */
3053 if (!bounds.exists ())
3054 return;
3055
3056 if (dump_file && (dump_flags & TDF_DETAILS))
3057 fprintf (dump_file, " Trying to walk loop body to reduce the bound.\n");
3058
3059 /* Sort the bounds in decreasing order. */
3060 qsort (bounds.address (), bounds.length (),
3061 sizeof (widest_int), wide_int_cmp);
3062
3063 /* For every basic block record the lowest bound that is guaranteed to
3064 terminate the loop. */
3065
3066 bb_bounds = pointer_map_create ();
3067 for (elt = loop->bounds; elt; elt = elt->next)
3068 {
3069 widest_int bound = elt->bound;
3070 if (!elt->is_exit)
3071 {
3072 bound += 1;
3073 /* If an overflow occurred, ignore the result. */
3074 if (bound == 0)
3075 continue;
3076 }
3077
3078 if (!loop->any_upper_bound
3079 || wi::ltu_p (bound, loop->nb_iterations_upper_bound))
3080 {
3081 ptrdiff_t index = bound_index (bounds, bound);
3082 void **entry = pointer_map_contains (bb_bounds,
3083 gimple_bb (elt->stmt));
3084 if (!entry)
3085 *pointer_map_insert (bb_bounds,
3086 gimple_bb (elt->stmt)) = (void *)index;
3087 else if ((ptrdiff_t)*entry > index)
3088 *entry = (void *)index;
3089 }
3090 }
3091
3092 block_priority = pointer_map_create ();
3093
3094 /* Perform shortest path discovery loop->header ... loop->latch.
3095
3096 The "distance" is given by the smallest loop bound of basic block
3097 present in the path and we look for path with largest smallest bound
3098 on it.
3099
3100 To avoid the need for fibonacci heap on double ints we simply compress
3101 double ints into indexes to BOUNDS array and then represent the queue
3102 as arrays of queues for every index.
3103 Index of BOUNDS.length() means that the execution of given BB has
3104 no bounds determined.
3105
3106 VISITED is a pointer map translating basic block into smallest index
3107 it was inserted into the priority queue with. */
3108 latch_index = -1;
3109
3110 /* Start walk in loop header with index set to infinite bound. */
3111 queue_index = bounds.length ();
3112 queues.safe_grow_cleared (queue_index + 1);
3113 queue.safe_push (loop->header);
3114 queues[queue_index] = queue;
3115 *pointer_map_insert (block_priority, loop->header) = (void *)queue_index;
3116
3117 for (; queue_index >= 0; queue_index--)
3118 {
3119 if (latch_index < queue_index)
3120 {
3121 while (queues[queue_index].length ())
3122 {
3123 basic_block bb;
3124 ptrdiff_t bound_index = queue_index;
3125 void **entry;
3126 edge e;
3127 edge_iterator ei;
3128
3129 queue = queues[queue_index];
3130 bb = queue.pop ();
3131
3132 /* OK, we later inserted the BB with lower priority, skip it. */
3133 if ((ptrdiff_t)*pointer_map_contains (block_priority, bb) > queue_index)
3134 continue;
3135
3136 /* See if we can improve the bound. */
3137 entry = pointer_map_contains (bb_bounds, bb);
3138 if (entry && (ptrdiff_t)*entry < bound_index)
3139 bound_index = (ptrdiff_t)*entry;
3140
3141 /* Insert succesors into the queue, watch for latch edge
3142 and record greatest index we saw. */
3143 FOR_EACH_EDGE (e, ei, bb->succs)
3144 {
3145 bool insert = false;
3146 void **entry;
3147
3148 if (loop_exit_edge_p (loop, e))
3149 continue;
3150
3151 if (e == loop_latch_edge (loop)
3152 && latch_index < bound_index)
3153 latch_index = bound_index;
3154 else if (!(entry = pointer_map_contains (block_priority, e->dest)))
3155 {
3156 insert = true;
3157 *pointer_map_insert (block_priority, e->dest) = (void *)bound_index;
3158 }
3159 else if ((ptrdiff_t)*entry < bound_index)
3160 {
3161 insert = true;
3162 *entry = (void *)bound_index;
3163 }
3164
3165 if (insert)
3166 queues[bound_index].safe_push (e->dest);
3167 }
3168 }
3169 }
3170 queues[queue_index].release ();
3171 }
3172
3173 gcc_assert (latch_index >= 0);
3174 if ((unsigned)latch_index < bounds.length ())
3175 {
3176 if (dump_file && (dump_flags & TDF_DETAILS))
3177 {
3178 fprintf (dump_file, "Found better loop bound ");
3179 print_decu (bounds[latch_index], dump_file);
3180 fprintf (dump_file, "\n");
3181 }
3182 record_niter_bound (loop, bounds[latch_index], false, true);
3183 }
3184
3185 queues.release ();
3186 bounds.release ();
3187 pointer_map_destroy (bb_bounds);
3188 pointer_map_destroy (block_priority);
3189 }
3190
3191 /* See if every path cross the loop goes through a statement that is known
3192 to not execute at the last iteration. In that case we can decrese iteration
3193 count by 1. */
3194
3195 static void
3196 maybe_lower_iteration_bound (struct loop *loop)
3197 {
3198 pointer_set_t *not_executed_last_iteration = NULL;
3199 struct nb_iter_bound *elt;
3200 bool found_exit = false;
3201 vec<basic_block> queue = vNULL;
3202 bitmap visited;
3203
3204 /* Collect all statements with interesting (i.e. lower than
3205 nb_iterations_upper_bound) bound on them.
3206
3207 TODO: Due to the way record_estimate choose estimates to store, the bounds
3208 will be always nb_iterations_upper_bound-1. We can change this to record
3209 also statements not dominating the loop latch and update the walk bellow
3210 to the shortest path algorthm. */
3211 for (elt = loop->bounds; elt; elt = elt->next)
3212 {
3213 if (!elt->is_exit
3214 && wi::ltu_p (elt->bound, loop->nb_iterations_upper_bound))
3215 {
3216 if (!not_executed_last_iteration)
3217 not_executed_last_iteration = pointer_set_create ();
3218 pointer_set_insert (not_executed_last_iteration, elt->stmt);
3219 }
3220 }
3221 if (!not_executed_last_iteration)
3222 return;
3223
3224 /* Start DFS walk in the loop header and see if we can reach the
3225 loop latch or any of the exits (including statements with side
3226 effects that may terminate the loop otherwise) without visiting
3227 any of the statements known to have undefined effect on the last
3228 iteration. */
3229 queue.safe_push (loop->header);
3230 visited = BITMAP_ALLOC (NULL);
3231 bitmap_set_bit (visited, loop->header->index);
3232 found_exit = false;
3233
3234 do
3235 {
3236 basic_block bb = queue.pop ();
3237 gimple_stmt_iterator gsi;
3238 bool stmt_found = false;
3239
3240 /* Loop for possible exits and statements bounding the execution. */
3241 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
3242 {
3243 gimple stmt = gsi_stmt (gsi);
3244 if (pointer_set_contains (not_executed_last_iteration, stmt))
3245 {
3246 stmt_found = true;
3247 break;
3248 }
3249 if (gimple_has_side_effects (stmt))
3250 {
3251 found_exit = true;
3252 break;
3253 }
3254 }
3255 if (found_exit)
3256 break;
3257
3258 /* If no bounding statement is found, continue the walk. */
3259 if (!stmt_found)
3260 {
3261 edge e;
3262 edge_iterator ei;
3263
3264 FOR_EACH_EDGE (e, ei, bb->succs)
3265 {
3266 if (loop_exit_edge_p (loop, e)
3267 || e == loop_latch_edge (loop))
3268 {
3269 found_exit = true;
3270 break;
3271 }
3272 if (bitmap_set_bit (visited, e->dest->index))
3273 queue.safe_push (e->dest);
3274 }
3275 }
3276 }
3277 while (queue.length () && !found_exit);
3278
3279 /* If every path through the loop reach bounding statement before exit,
3280 then we know the last iteration of the loop will have undefined effect
3281 and we can decrease number of iterations. */
3282
3283 if (!found_exit)
3284 {
3285 if (dump_file && (dump_flags & TDF_DETAILS))
3286 fprintf (dump_file, "Reducing loop iteration estimate by 1; "
3287 "undefined statement must be executed at the last iteration.\n");
3288 record_niter_bound (loop, loop->nb_iterations_upper_bound - 1,
3289 false, true);
3290 }
3291 BITMAP_FREE (visited);
3292 queue.release ();
3293 pointer_set_destroy (not_executed_last_iteration);
3294 }
3295
3296 /* Records estimates on numbers of iterations of LOOP. If USE_UNDEFINED_P
3297 is true also use estimates derived from undefined behavior. */
3298
3299 static void
3300 estimate_numbers_of_iterations_loop (struct loop *loop)
3301 {
3302 vec<edge> exits;
3303 tree niter, type;
3304 unsigned i;
3305 struct tree_niter_desc niter_desc;
3306 edge ex;
3307 widest_int bound;
3308 edge likely_exit;
3309
3310 /* Give up if we already have tried to compute an estimation. */
3311 if (loop->estimate_state != EST_NOT_COMPUTED)
3312 return;
3313
3314 loop->estimate_state = EST_AVAILABLE;
3315 /* Force estimate compuation but leave any existing upper bound in place. */
3316 loop->any_estimate = false;
3317
3318 /* Ensure that loop->nb_iterations is computed if possible. If it turns out
3319 to be constant, we avoid undefined behavior implied bounds and instead
3320 diagnose those loops with -Waggressive-loop-optimizations. */
3321 number_of_latch_executions (loop);
3322
3323 exits = get_loop_exit_edges (loop);
3324 likely_exit = single_likely_exit (loop);
3325 FOR_EACH_VEC_ELT (exits, i, ex)
3326 {
3327 if (!number_of_iterations_exit (loop, ex, &niter_desc, false, false))
3328 continue;
3329
3330 niter = niter_desc.niter;
3331 type = TREE_TYPE (niter);
3332 if (TREE_CODE (niter_desc.may_be_zero) != INTEGER_CST)
3333 niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
3334 build_int_cst (type, 0),
3335 niter);
3336 record_estimate (loop, niter, niter_desc.max,
3337 last_stmt (ex->src),
3338 true, ex == likely_exit, true);
3339 }
3340 exits.release ();
3341
3342 if (flag_aggressive_loop_optimizations)
3343 infer_loop_bounds_from_undefined (loop);
3344
3345 discover_iteration_bound_by_body_walk (loop);
3346
3347 maybe_lower_iteration_bound (loop);
3348
3349 /* If we have a measured profile, use it to estimate the number of
3350 iterations. */
3351 if (loop->header->count != 0)
3352 {
3353 gcov_type nit = expected_loop_iterations_unbounded (loop) + 1;
3354 bound = gcov_type_to_wide_int (nit);
3355 record_niter_bound (loop, bound, true, false);
3356 }
3357
3358 /* If we know the exact number of iterations of this loop, try to
3359 not break code with undefined behavior by not recording smaller
3360 maximum number of iterations. */
3361 if (loop->nb_iterations
3362 && TREE_CODE (loop->nb_iterations) == INTEGER_CST)
3363 {
3364 loop->any_upper_bound = true;
3365 loop->nb_iterations_upper_bound = wi::to_widest (loop->nb_iterations);
3366 }
3367 }
3368
3369 /* Sets NIT to the estimated number of executions of the latch of the
3370 LOOP. If CONSERVATIVE is true, we must be sure that NIT is at least as
3371 large as the number of iterations. If we have no reliable estimate,
3372 the function returns false, otherwise returns true. */
3373
3374 bool
3375 estimated_loop_iterations (struct loop *loop, widest_int *nit)
3376 {
3377 /* When SCEV information is available, try to update loop iterations
3378 estimate. Otherwise just return whatever we recorded earlier. */
3379 if (scev_initialized_p ())
3380 estimate_numbers_of_iterations_loop (loop);
3381
3382 return (get_estimated_loop_iterations (loop, nit));
3383 }
3384
3385 /* Similar to estimated_loop_iterations, but returns the estimate only
3386 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
3387 on the number of iterations of LOOP could not be derived, returns -1. */
3388
3389 HOST_WIDE_INT
3390 estimated_loop_iterations_int (struct loop *loop)
3391 {
3392 widest_int nit;
3393 HOST_WIDE_INT hwi_nit;
3394
3395 if (!estimated_loop_iterations (loop, &nit))
3396 return -1;
3397
3398 if (!wi::fits_shwi_p (nit))
3399 return -1;
3400 hwi_nit = nit.to_shwi ();
3401
3402 return hwi_nit < 0 ? -1 : hwi_nit;
3403 }
3404
3405
3406 /* Sets NIT to an upper bound for the maximum number of executions of the
3407 latch of the LOOP. If we have no reliable estimate, the function returns
3408 false, otherwise returns true. */
3409
3410 bool
3411 max_loop_iterations (struct loop *loop, widest_int *nit)
3412 {
3413 /* When SCEV information is available, try to update loop iterations
3414 estimate. Otherwise just return whatever we recorded earlier. */
3415 if (scev_initialized_p ())
3416 estimate_numbers_of_iterations_loop (loop);
3417
3418 return get_max_loop_iterations (loop, nit);
3419 }
3420
3421 /* Similar to max_loop_iterations, but returns the estimate only
3422 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
3423 on the number of iterations of LOOP could not be derived, returns -1. */
3424
3425 HOST_WIDE_INT
3426 max_loop_iterations_int (struct loop *loop)
3427 {
3428 widest_int nit;
3429 HOST_WIDE_INT hwi_nit;
3430
3431 if (!max_loop_iterations (loop, &nit))
3432 return -1;
3433
3434 if (!wi::fits_shwi_p (nit))
3435 return -1;
3436 hwi_nit = nit.to_shwi ();
3437
3438 return hwi_nit < 0 ? -1 : hwi_nit;
3439 }
3440
3441 /* Returns an estimate for the number of executions of statements
3442 in the LOOP. For statements before the loop exit, this exceeds
3443 the number of execution of the latch by one. */
3444
3445 HOST_WIDE_INT
3446 estimated_stmt_executions_int (struct loop *loop)
3447 {
3448 HOST_WIDE_INT nit = estimated_loop_iterations_int (loop);
3449 HOST_WIDE_INT snit;
3450
3451 if (nit == -1)
3452 return -1;
3453
3454 snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
3455
3456 /* If the computation overflows, return -1. */
3457 return snit < 0 ? -1 : snit;
3458 }
3459
3460 /* Sets NIT to the estimated maximum number of executions of the latch of the
3461 LOOP, plus one. If we have no reliable estimate, the function returns
3462 false, otherwise returns true. */
3463
3464 bool
3465 max_stmt_executions (struct loop *loop, widest_int *nit)
3466 {
3467 widest_int nit_minus_one;
3468
3469 if (!max_loop_iterations (loop, nit))
3470 return false;
3471
3472 nit_minus_one = *nit;
3473
3474 *nit += 1;
3475
3476 return wi::gtu_p (*nit, nit_minus_one);
3477 }
3478
3479 /* Sets NIT to the estimated number of executions of the latch of the
3480 LOOP, plus one. If we have no reliable estimate, the function returns
3481 false, otherwise returns true. */
3482
3483 bool
3484 estimated_stmt_executions (struct loop *loop, widest_int *nit)
3485 {
3486 widest_int nit_minus_one;
3487
3488 if (!estimated_loop_iterations (loop, nit))
3489 return false;
3490
3491 nit_minus_one = *nit;
3492
3493 *nit += 1;
3494
3495 return wi::gtu_p (*nit, nit_minus_one);
3496 }
3497
3498 /* Records estimates on numbers of iterations of loops. */
3499
3500 void
3501 estimate_numbers_of_iterations (void)
3502 {
3503 loop_iterator li;
3504 struct loop *loop;
3505
3506 /* We don't want to issue signed overflow warnings while getting
3507 loop iteration estimates. */
3508 fold_defer_overflow_warnings ();
3509
3510 FOR_EACH_LOOP (li, loop, 0)
3511 {
3512 estimate_numbers_of_iterations_loop (loop);
3513 }
3514
3515 fold_undefer_and_ignore_overflow_warnings ();
3516 }
3517
3518 /* Returns true if statement S1 dominates statement S2. */
3519
3520 bool
3521 stmt_dominates_stmt_p (gimple s1, gimple s2)
3522 {
3523 basic_block bb1 = gimple_bb (s1), bb2 = gimple_bb (s2);
3524
3525 if (!bb1
3526 || s1 == s2)
3527 return true;
3528
3529 if (bb1 == bb2)
3530 {
3531 gimple_stmt_iterator bsi;
3532
3533 if (gimple_code (s2) == GIMPLE_PHI)
3534 return false;
3535
3536 if (gimple_code (s1) == GIMPLE_PHI)
3537 return true;
3538
3539 for (bsi = gsi_start_bb (bb1); gsi_stmt (bsi) != s2; gsi_next (&bsi))
3540 if (gsi_stmt (bsi) == s1)
3541 return true;
3542
3543 return false;
3544 }
3545
3546 return dominated_by_p (CDI_DOMINATORS, bb2, bb1);
3547 }
3548
3549 /* Returns true when we can prove that the number of executions of
3550 STMT in the loop is at most NITER, according to the bound on
3551 the number of executions of the statement NITER_BOUND->stmt recorded in
3552 NITER_BOUND and fact that NITER_BOUND->stmt dominate STMT.
3553
3554 ??? This code can become quite a CPU hog - we can have many bounds,
3555 and large basic block forcing stmt_dominates_stmt_p to be queried
3556 many times on a large basic blocks, so the whole thing is O(n^2)
3557 for scev_probably_wraps_p invocation (that can be done n times).
3558
3559 It would make more sense (and give better answers) to remember BB
3560 bounds computed by discover_iteration_bound_by_body_walk. */
3561
3562 static bool
3563 n_of_executions_at_most (gimple stmt,
3564 struct nb_iter_bound *niter_bound,
3565 tree niter)
3566 {
3567 widest_int bound = niter_bound->bound;
3568 tree nit_type = TREE_TYPE (niter), e;
3569 enum tree_code cmp;
3570
3571 gcc_assert (TYPE_UNSIGNED (nit_type));
3572
3573 /* If the bound does not even fit into NIT_TYPE, it cannot tell us that
3574 the number of iterations is small. */
3575 if (!wi::fits_to_tree_p (bound, nit_type))
3576 return false;
3577
3578 /* We know that NITER_BOUND->stmt is executed at most NITER_BOUND->bound + 1
3579 times. This means that:
3580
3581 -- if NITER_BOUND->is_exit is true, then everything after
3582 it at most NITER_BOUND->bound times.
3583
3584 -- If NITER_BOUND->is_exit is false, then if we can prove that when STMT
3585 is executed, then NITER_BOUND->stmt is executed as well in the same
3586 iteration then STMT is executed at most NITER_BOUND->bound + 1 times.
3587
3588 If we can determine that NITER_BOUND->stmt is always executed
3589 after STMT, then STMT is executed at most NITER_BOUND->bound + 2 times.
3590 We conclude that if both statements belong to the same
3591 basic block and STMT is before NITER_BOUND->stmt and there are no
3592 statements with side effects in between. */
3593
3594 if (niter_bound->is_exit)
3595 {
3596 if (stmt == niter_bound->stmt
3597 || !stmt_dominates_stmt_p (niter_bound->stmt, stmt))
3598 return false;
3599 cmp = GE_EXPR;
3600 }
3601 else
3602 {
3603 if (!stmt_dominates_stmt_p (niter_bound->stmt, stmt))
3604 {
3605 gimple_stmt_iterator bsi;
3606 if (gimple_bb (stmt) != gimple_bb (niter_bound->stmt)
3607 || gimple_code (stmt) == GIMPLE_PHI
3608 || gimple_code (niter_bound->stmt) == GIMPLE_PHI)
3609 return false;
3610
3611 /* By stmt_dominates_stmt_p we already know that STMT appears
3612 before NITER_BOUND->STMT. Still need to test that the loop
3613 can not be terinated by a side effect in between. */
3614 for (bsi = gsi_for_stmt (stmt); gsi_stmt (bsi) != niter_bound->stmt;
3615 gsi_next (&bsi))
3616 if (gimple_has_side_effects (gsi_stmt (bsi)))
3617 return false;
3618 bound += 1;
3619 if (bound == 0
3620 || !wi::fits_to_tree_p (bound, nit_type))
3621 return false;
3622 }
3623 cmp = GT_EXPR;
3624 }
3625
3626 e = fold_binary (cmp, boolean_type_node,
3627 niter, wide_int_to_tree (nit_type, bound));
3628 return e && integer_nonzerop (e);
3629 }
3630
3631 /* Returns true if the arithmetics in TYPE can be assumed not to wrap. */
3632
3633 bool
3634 nowrap_type_p (tree type)
3635 {
3636 if (INTEGRAL_TYPE_P (type)
3637 && TYPE_OVERFLOW_UNDEFINED (type))
3638 return true;
3639
3640 if (POINTER_TYPE_P (type))
3641 return true;
3642
3643 return false;
3644 }
3645
3646 /* Return false only when the induction variable BASE + STEP * I is
3647 known to not overflow: i.e. when the number of iterations is small
3648 enough with respect to the step and initial condition in order to
3649 keep the evolution confined in TYPEs bounds. Return true when the
3650 iv is known to overflow or when the property is not computable.
3651
3652 USE_OVERFLOW_SEMANTICS is true if this function should assume that
3653 the rules for overflow of the given language apply (e.g., that signed
3654 arithmetics in C does not overflow). */
3655
3656 bool
3657 scev_probably_wraps_p (tree base, tree step,
3658 gimple at_stmt, struct loop *loop,
3659 bool use_overflow_semantics)
3660 {
3661 tree delta, step_abs;
3662 tree unsigned_type, valid_niter;
3663 tree type = TREE_TYPE (step);
3664 tree e;
3665 widest_int niter;
3666 struct nb_iter_bound *bound;
3667
3668 /* FIXME: We really need something like
3669 http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html.
3670
3671 We used to test for the following situation that frequently appears
3672 during address arithmetics:
3673
3674 D.1621_13 = (long unsigned intD.4) D.1620_12;
3675 D.1622_14 = D.1621_13 * 8;
3676 D.1623_15 = (doubleD.29 *) D.1622_14;
3677
3678 And derived that the sequence corresponding to D_14
3679 can be proved to not wrap because it is used for computing a
3680 memory access; however, this is not really the case -- for example,
3681 if D_12 = (unsigned char) [254,+,1], then D_14 has values
3682 2032, 2040, 0, 8, ..., but the code is still legal. */
3683
3684 if (chrec_contains_undetermined (base)
3685 || chrec_contains_undetermined (step))
3686 return true;
3687
3688 if (integer_zerop (step))
3689 return false;
3690
3691 /* If we can use the fact that signed and pointer arithmetics does not
3692 wrap, we are done. */
3693 if (use_overflow_semantics && nowrap_type_p (TREE_TYPE (base)))
3694 return false;
3695
3696 /* To be able to use estimates on number of iterations of the loop,
3697 we must have an upper bound on the absolute value of the step. */
3698 if (TREE_CODE (step) != INTEGER_CST)
3699 return true;
3700
3701 /* Don't issue signed overflow warnings. */
3702 fold_defer_overflow_warnings ();
3703
3704 /* Otherwise, compute the number of iterations before we reach the
3705 bound of the type, and verify that the loop is exited before this
3706 occurs. */
3707 unsigned_type = unsigned_type_for (type);
3708 base = fold_convert (unsigned_type, base);
3709
3710 if (tree_int_cst_sign_bit (step))
3711 {
3712 tree extreme = fold_convert (unsigned_type,
3713 lower_bound_in_type (type, type));
3714 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
3715 step_abs = fold_build1 (NEGATE_EXPR, unsigned_type,
3716 fold_convert (unsigned_type, step));
3717 }
3718 else
3719 {
3720 tree extreme = fold_convert (unsigned_type,
3721 upper_bound_in_type (type, type));
3722 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
3723 step_abs = fold_convert (unsigned_type, step);
3724 }
3725
3726 valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step_abs);
3727
3728 estimate_numbers_of_iterations_loop (loop);
3729
3730 if (max_loop_iterations (loop, &niter)
3731 && wi::fits_to_tree_p (niter, TREE_TYPE (valid_niter))
3732 && (e = fold_binary (GT_EXPR, boolean_type_node, valid_niter,
3733 wide_int_to_tree (TREE_TYPE (valid_niter),
3734 niter))) != NULL
3735 && integer_nonzerop (e))
3736 {
3737 fold_undefer_and_ignore_overflow_warnings ();
3738 return false;
3739 }
3740 if (at_stmt)
3741 for (bound = loop->bounds; bound; bound = bound->next)
3742 {
3743 if (n_of_executions_at_most (at_stmt, bound, valid_niter))
3744 {
3745 fold_undefer_and_ignore_overflow_warnings ();
3746 return false;
3747 }
3748 }
3749
3750 fold_undefer_and_ignore_overflow_warnings ();
3751
3752 /* At this point we still don't have a proof that the iv does not
3753 overflow: give up. */
3754 return true;
3755 }
3756
3757 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
3758
3759 void
3760 free_numbers_of_iterations_estimates_loop (struct loop *loop)
3761 {
3762 struct nb_iter_bound *bound, *next;
3763
3764 loop->nb_iterations = NULL;
3765 loop->estimate_state = EST_NOT_COMPUTED;
3766 for (bound = loop->bounds; bound; bound = next)
3767 {
3768 next = bound->next;
3769 ggc_free (bound);
3770 }
3771
3772 loop->bounds = NULL;
3773 }
3774
3775 /* Frees the information on upper bounds on numbers of iterations of loops. */
3776
3777 void
3778 free_numbers_of_iterations_estimates (void)
3779 {
3780 loop_iterator li;
3781 struct loop *loop;
3782
3783 FOR_EACH_LOOP (li, loop, 0)
3784 {
3785 free_numbers_of_iterations_estimates_loop (loop);
3786 }
3787 }
3788
3789 /* Substitute value VAL for ssa name NAME inside expressions held
3790 at LOOP. */
3791
3792 void
3793 substitute_in_loop_info (struct loop *loop, tree name, tree val)
3794 {
3795 loop->nb_iterations = simplify_replace_tree (loop->nb_iterations, name, val);
3796 }