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