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