x86: Add a test for PR rtl-optimization/111673
[official-gcc.git] / gcc / tree-ssa-loop-niter.cc
blob9ce88134414203b5160ccf1524d17e5812bc7abc
1 /* Functions to determine/estimate number of iterations of a loop.
2 Copyright (C) 2004-2025 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 3, or (at your option) any
9 later version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "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 "tree-data-ref.h"
45 #include "tree-dfa.h"
46 #include "internal-fn.h"
47 #include "gimple-range.h"
48 #include "sreal.h"
51 /* The maximum number of dominator BBs we search for conditions
52 of loop header copies we use for simplifying a conditional
53 expression. */
54 #define MAX_DOMINATORS_TO_WALK 8
58 Analysis of number of iterations of an affine exit test.
62 /* Bounds on some value, BELOW <= X <= UP. */
64 struct bounds
66 mpz_t below, up;
69 /* Splits expression EXPR to a variable part VAR and constant OFFSET. */
71 static void
72 split_to_var_and_offset (tree expr, tree *var, mpz_t offset)
74 tree type = TREE_TYPE (expr);
75 tree op0, op1;
76 bool negate = false;
78 *var = expr;
79 mpz_set_ui (offset, 0);
81 switch (TREE_CODE (expr))
83 case MINUS_EXPR:
84 negate = true;
85 /* Fallthru. */
87 case PLUS_EXPR:
88 case POINTER_PLUS_EXPR:
89 op0 = TREE_OPERAND (expr, 0);
90 op1 = TREE_OPERAND (expr, 1);
92 if (TREE_CODE (op1) != INTEGER_CST)
93 break;
95 *var = op0;
96 /* Always sign extend the offset. */
97 wi::to_mpz (wi::to_wide (op1), offset, SIGNED);
98 if (negate)
99 mpz_neg (offset, offset);
100 break;
102 case INTEGER_CST:
103 *var = build_int_cst_type (type, 0);
104 wi::to_mpz (wi::to_wide (expr), offset, TYPE_SIGN (type));
105 break;
107 default:
108 break;
112 /* From condition C0 CMP C1 derives information regarding the value range
113 of VAR, which is of TYPE. Results are stored in to BELOW and UP. */
115 static void
116 refine_value_range_using_guard (tree type, tree var,
117 tree c0, enum tree_code cmp, tree c1,
118 mpz_t below, mpz_t up)
120 tree varc0, varc1, ctype;
121 mpz_t offc0, offc1;
122 mpz_t mint, maxt, minc1, maxc1;
123 bool no_wrap = nowrap_type_p (type);
124 bool c0_ok, c1_ok;
125 signop sgn = TYPE_SIGN (type);
127 switch (cmp)
129 case LT_EXPR:
130 case LE_EXPR:
131 case GT_EXPR:
132 case GE_EXPR:
133 STRIP_SIGN_NOPS (c0);
134 STRIP_SIGN_NOPS (c1);
135 ctype = TREE_TYPE (c0);
136 if (!useless_type_conversion_p (ctype, type))
137 return;
139 break;
141 case EQ_EXPR:
142 /* We could derive quite precise information from EQ_EXPR, however,
143 such a guard is unlikely to appear, so we do not bother with
144 handling it. */
145 return;
147 case NE_EXPR:
148 /* NE_EXPR comparisons do not contain much of useful information,
149 except for cases of comparing with bounds. */
150 if (TREE_CODE (c1) != INTEGER_CST
151 || !INTEGRAL_TYPE_P (type))
152 return;
154 /* Ensure that the condition speaks about an expression in the same
155 type as X and Y. */
156 ctype = TREE_TYPE (c0);
157 if (TYPE_PRECISION (ctype) != TYPE_PRECISION (type))
158 return;
159 c0 = fold_convert (type, c0);
160 c1 = fold_convert (type, c1);
162 if (operand_equal_p (var, c0, 0))
164 /* Case of comparing VAR with its below/up bounds. */
165 auto_mpz valc1;
166 wi::to_mpz (wi::to_wide (c1), valc1, TYPE_SIGN (type));
167 if (mpz_cmp (valc1, below) == 0)
168 cmp = GT_EXPR;
169 if (mpz_cmp (valc1, up) == 0)
170 cmp = LT_EXPR;
172 else
174 /* Case of comparing with the bounds of the type. */
175 wide_int min = wi::min_value (type);
176 wide_int max = wi::max_value (type);
178 if (wi::to_wide (c1) == min)
179 cmp = GT_EXPR;
180 if (wi::to_wide (c1) == max)
181 cmp = LT_EXPR;
184 /* Quick return if no useful information. */
185 if (cmp == NE_EXPR)
186 return;
188 break;
190 default:
191 return;
194 mpz_init (offc0);
195 mpz_init (offc1);
196 split_to_var_and_offset (expand_simple_operations (c0), &varc0, offc0);
197 split_to_var_and_offset (expand_simple_operations (c1), &varc1, offc1);
199 /* We are only interested in comparisons of expressions based on VAR. */
200 if (operand_equal_p (var, varc1, 0))
202 std::swap (varc0, varc1);
203 mpz_swap (offc0, offc1);
204 cmp = swap_tree_comparison (cmp);
206 else if (!operand_equal_p (var, varc0, 0))
208 mpz_clear (offc0);
209 mpz_clear (offc1);
210 return;
213 mpz_init (mint);
214 mpz_init (maxt);
215 get_type_static_bounds (type, mint, maxt);
216 mpz_init (minc1);
217 mpz_init (maxc1);
218 int_range_max r (TREE_TYPE (varc1));
219 /* Setup range information for varc1. */
220 if (integer_zerop (varc1))
222 wi::to_mpz (0, minc1, TYPE_SIGN (type));
223 wi::to_mpz (0, maxc1, TYPE_SIGN (type));
225 else if (TREE_CODE (varc1) == SSA_NAME
226 && INTEGRAL_TYPE_P (type)
227 && get_range_query (cfun)->range_of_expr (r, varc1)
228 && !r.undefined_p ()
229 && !r.varying_p ())
231 gcc_assert (wi::le_p (r.lower_bound (), r.upper_bound (), sgn));
232 wi::to_mpz (r.lower_bound (), minc1, sgn);
233 wi::to_mpz (r.upper_bound (), maxc1, sgn);
235 else
237 mpz_set (minc1, mint);
238 mpz_set (maxc1, maxt);
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:
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;
256 if (mpz_cmp (minc1, mint) < 0)
257 mpz_set (minc1, mint);
258 if (mpz_cmp (maxc1, maxt) > 0)
259 mpz_set (maxc1, maxt);
261 if (cmp == LT_EXPR)
263 cmp = LE_EXPR;
264 mpz_sub_ui (maxc1, maxc1, 1);
266 if (cmp == GT_EXPR)
268 cmp = GE_EXPR;
269 mpz_add_ui (minc1, minc1, 1);
272 /* Compute range information for varc0. If there is no overflow,
273 the condition implied that
275 (varc0) cmp (varc1 + offc1 - offc0)
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.
280 To prove there is no overflow/underflow, we need to check below
281 four cases:
282 1) cmp == LE_EXPR && offc0 > 0
284 (varc0 + offc0) doesn't overflow
285 && (varc1 + offc1 - offc0) doesn't underflow
287 2) cmp == LE_EXPR && offc0 < 0
289 (varc0 + offc0) doesn't underflow
290 && (varc1 + offc1 - offc0) doesn't overfloe
292 In this case, (varc0 + offc0) will never underflow if we can
293 prove (varc1 + offc1 - offc0) doesn't overflow.
295 3) cmp == GE_EXPR && offc0 < 0
297 (varc0 + offc0) doesn't underflow
298 && (varc1 + offc1 - offc0) doesn't overflow
300 4) cmp == GE_EXPR && offc0 > 0
302 (varc0 + offc0) doesn't overflow
303 && (varc1 + offc1 - offc0) doesn't underflow
305 In this case, (varc0 + offc0) will never overflow if we can
306 prove (varc1 + offc1 - offc0) doesn't underflow.
308 Note we only handle case 2 and 4 in below code. */
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;
321 if (cmp == LE_EXPR)
323 if (mpz_cmp (up, maxc1) > 0)
324 mpz_set (up, maxc1);
326 else
328 if (mpz_cmp (below, minc1) < 0)
329 mpz_set (below, minc1);
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);
341 /* Stores estimate on the minimum/maximum value of the expression VAR + OFF
342 in TYPE to MIN and MAX. */
344 static void
345 determine_value_range (class loop *loop, tree type, tree var, mpz_t off,
346 mpz_t min, mpz_t max)
348 int cnt = 0;
349 mpz_t minm, maxm;
350 basic_block bb;
351 wide_int minv, maxv;
352 enum value_range_kind rtype = VR_VARYING;
354 /* If the expression is a constant, we know its value exactly. */
355 if (integer_zerop (var))
357 mpz_set (min, off);
358 mpz_set (max, off);
359 return;
362 get_type_static_bounds (type, min, max);
364 /* See if we have some range info from VRP. */
365 if (TREE_CODE (var) == SSA_NAME && INTEGRAL_TYPE_P (type))
367 edge e = loop_preheader_edge (loop);
368 signop sgn = TYPE_SIGN (type);
369 gphi_iterator gsi;
371 /* Either for VAR itself... */
372 int_range_max var_range (TREE_TYPE (var));
373 get_range_query (cfun)->range_of_expr (var_range, var);
374 if (var_range.varying_p () || var_range.undefined_p ())
375 rtype = VR_VARYING;
376 else
377 rtype = VR_RANGE;
378 if (!var_range.undefined_p ())
380 minv = var_range.lower_bound ();
381 maxv = var_range.upper_bound ();
384 /* Or for PHI results in loop->header where VAR is used as
385 PHI argument from the loop preheader edge. */
386 int_range_max phi_range (TREE_TYPE (var));
387 for (gsi = gsi_start_phis (loop->header); !gsi_end_p (gsi); gsi_next (&gsi))
389 gphi *phi = gsi.phi ();
390 if (PHI_ARG_DEF_FROM_EDGE (phi, e) == var
391 && get_range_query (cfun)->range_of_expr (phi_range,
392 gimple_phi_result (phi))
393 && !phi_range.varying_p ()
394 && !phi_range.undefined_p ())
396 if (rtype != VR_RANGE)
398 rtype = VR_RANGE;
399 minv = phi_range.lower_bound ();
400 maxv = phi_range.upper_bound ();
402 else
404 minv = wi::max (minv, phi_range.lower_bound (), sgn);
405 maxv = wi::min (maxv, phi_range.upper_bound (), sgn);
406 /* If the PHI result range are inconsistent with
407 the VAR range, give up on looking at the PHI
408 results. This can happen if VR_UNDEFINED is
409 involved. */
410 if (wi::gt_p (minv, maxv, sgn))
412 int_range_max vr (TREE_TYPE (var));
413 get_range_query (cfun)->range_of_expr (vr, var);
414 if (vr.varying_p () || vr.undefined_p ())
415 rtype = VR_VARYING;
416 else
417 rtype = VR_RANGE;
418 if (!vr.undefined_p ())
420 minv = vr.lower_bound ();
421 maxv = vr.upper_bound ();
423 break;
428 mpz_init (minm);
429 mpz_init (maxm);
430 if (rtype != VR_RANGE)
432 mpz_set (minm, min);
433 mpz_set (maxm, max);
435 else
437 gcc_assert (wi::le_p (minv, maxv, sgn));
438 wi::to_mpz (minv, minm, sgn);
439 wi::to_mpz (maxv, maxm, sgn);
441 /* Now walk the dominators of the loop header and use the entry
442 guards to refine the estimates. */
443 for (bb = loop->header;
444 bb != ENTRY_BLOCK_PTR_FOR_FN (cfun) && cnt < MAX_DOMINATORS_TO_WALK;
445 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
447 edge e;
448 tree c0, c1;
449 enum tree_code cmp;
451 if (!single_pred_p (bb))
452 continue;
453 e = single_pred_edge (bb);
455 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
456 continue;
458 gcond *cond = as_a <gcond *> (*gsi_last_bb (e->src));
459 c0 = gimple_cond_lhs (cond);
460 cmp = gimple_cond_code (cond);
461 c1 = gimple_cond_rhs (cond);
463 if (e->flags & EDGE_FALSE_VALUE)
464 cmp = invert_tree_comparison (cmp, false);
466 refine_value_range_using_guard (type, var, c0, cmp, c1, minm, maxm);
467 ++cnt;
470 mpz_add (minm, minm, off);
471 mpz_add (maxm, maxm, off);
472 /* If the computation may not wrap or off is zero, then this
473 is always fine. If off is negative and minv + off isn't
474 smaller than type's minimum, or off is positive and
475 maxv + off isn't bigger than type's maximum, use the more
476 precise range too. */
477 if (nowrap_type_p (type)
478 || mpz_sgn (off) == 0
479 || (mpz_sgn (off) < 0 && mpz_cmp (minm, min) >= 0)
480 || (mpz_sgn (off) > 0 && mpz_cmp (maxm, max) <= 0))
482 mpz_set (min, minm);
483 mpz_set (max, maxm);
484 mpz_clear (minm);
485 mpz_clear (maxm);
486 return;
488 mpz_clear (minm);
489 mpz_clear (maxm);
492 /* If the computation may wrap, we know nothing about the value, except for
493 the range of the type. */
494 if (!nowrap_type_p (type))
495 return;
497 /* Since the addition of OFF does not wrap, if OFF is positive, then we may
498 add it to MIN, otherwise to MAX. */
499 if (mpz_sgn (off) < 0)
500 mpz_add (max, max, off);
501 else
502 mpz_add (min, min, off);
505 /* Stores the bounds on the difference of the values of the expressions
506 (var + X) and (var + Y), computed in TYPE, to BNDS. */
508 static void
509 bound_difference_of_offsetted_base (tree type, mpz_t x, mpz_t y,
510 bounds *bnds)
512 int rel = mpz_cmp (x, y);
513 bool may_wrap = !nowrap_type_p (type);
515 /* If X == Y, then the expressions are always equal.
516 If X > Y, there are the following possibilities:
517 a) neither of var + X and var + Y overflow or underflow, or both of
518 them do. Then their difference is X - Y.
519 b) var + X overflows, and var + Y does not. Then the values of the
520 expressions are var + X - M and var + Y, where M is the range of
521 the type, and their difference is X - Y - M.
522 c) var + Y underflows and var + X does not. Their difference again
523 is M - X + Y.
524 Therefore, if the arithmetics in type does not overflow, then the
525 bounds are (X - Y, X - Y), otherwise they are (X - Y - M, X - Y)
526 Similarly, if X < Y, the bounds are either (X - Y, X - Y) or
527 (X - Y, X - Y + M). */
529 if (rel == 0)
531 mpz_set_ui (bnds->below, 0);
532 mpz_set_ui (bnds->up, 0);
533 return;
536 auto_mpz m;
537 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), m, UNSIGNED);
538 mpz_add_ui (m, m, 1);
539 mpz_sub (bnds->up, x, y);
540 mpz_set (bnds->below, bnds->up);
542 if (may_wrap)
544 if (rel > 0)
545 mpz_sub (bnds->below, bnds->below, m);
546 else
547 mpz_add (bnds->up, bnds->up, m);
551 /* From condition C0 CMP C1 derives information regarding the
552 difference of values of VARX + OFFX and VARY + OFFY, computed in TYPE,
553 and stores it to BNDS. */
555 static void
556 refine_bounds_using_guard (tree type, tree varx, mpz_t offx,
557 tree vary, mpz_t offy,
558 tree c0, enum tree_code cmp, tree c1,
559 bounds *bnds)
561 tree varc0, varc1, ctype;
562 mpz_t offc0, offc1, loffx, loffy, bnd;
563 bool lbound = false;
564 bool no_wrap = nowrap_type_p (type);
565 bool x_ok, y_ok;
567 switch (cmp)
569 case LT_EXPR:
570 case LE_EXPR:
571 case GT_EXPR:
572 case GE_EXPR:
573 STRIP_SIGN_NOPS (c0);
574 STRIP_SIGN_NOPS (c1);
575 ctype = TREE_TYPE (c0);
576 if (!useless_type_conversion_p (ctype, type))
577 return;
579 break;
581 case EQ_EXPR:
582 /* We could derive quite precise information from EQ_EXPR, however, such
583 a guard is unlikely to appear, so we do not bother with handling
584 it. */
585 return;
587 case NE_EXPR:
588 /* NE_EXPR comparisons do not contain much of useful information, except for
589 special case of comparing with the bounds of the type. */
590 if (TREE_CODE (c1) != INTEGER_CST
591 || !INTEGRAL_TYPE_P (type))
592 return;
594 /* Ensure that the condition speaks about an expression in the same type
595 as X and Y. */
596 ctype = TREE_TYPE (c0);
597 if (TYPE_PRECISION (ctype) != TYPE_PRECISION (type))
598 return;
599 c0 = fold_convert (type, c0);
600 c1 = fold_convert (type, c1);
602 if (TYPE_MIN_VALUE (type)
603 && operand_equal_p (c1, TYPE_MIN_VALUE (type), 0))
605 cmp = GT_EXPR;
606 break;
608 if (TYPE_MAX_VALUE (type)
609 && operand_equal_p (c1, TYPE_MAX_VALUE (type), 0))
611 cmp = LT_EXPR;
612 break;
615 return;
616 default:
617 return;
620 mpz_init (offc0);
621 mpz_init (offc1);
622 split_to_var_and_offset (expand_simple_operations (c0), &varc0, offc0);
623 split_to_var_and_offset (expand_simple_operations (c1), &varc1, offc1);
625 /* We are only interested in comparisons of expressions based on VARX and
626 VARY. TODO -- we might also be able to derive some bounds from
627 expressions containing just one of the variables. */
629 if (operand_equal_p (varx, varc1, 0))
631 std::swap (varc0, varc1);
632 mpz_swap (offc0, offc1);
633 cmp = swap_tree_comparison (cmp);
636 if (!operand_equal_p (varx, varc0, 0)
637 || !operand_equal_p (vary, varc1, 0))
638 goto end;
640 mpz_init_set (loffx, offx);
641 mpz_init_set (loffy, offy);
643 if (cmp == GT_EXPR || cmp == GE_EXPR)
645 std::swap (varx, vary);
646 mpz_swap (offc0, offc1);
647 mpz_swap (loffx, loffy);
648 cmp = swap_tree_comparison (cmp);
649 lbound = true;
652 /* If there is no overflow, the condition implies that
654 (VARX + OFFX) cmp (VARY + OFFY) + (OFFX - OFFY + OFFC1 - OFFC0).
656 The overflows and underflows may complicate things a bit; each
657 overflow decreases the appropriate offset by M, and underflow
658 increases it by M. The above inequality would not necessarily be
659 true if
661 -- VARX + OFFX underflows and VARX + OFFC0 does not, or
662 VARX + OFFC0 overflows, but VARX + OFFX does not.
663 This may only happen if OFFX < OFFC0.
664 -- VARY + OFFY overflows and VARY + OFFC1 does not, or
665 VARY + OFFC1 underflows and VARY + OFFY does not.
666 This may only happen if OFFY > OFFC1. */
668 if (no_wrap)
670 x_ok = true;
671 y_ok = true;
673 else
675 x_ok = (integer_zerop (varx)
676 || mpz_cmp (loffx, offc0) >= 0);
677 y_ok = (integer_zerop (vary)
678 || mpz_cmp (loffy, offc1) <= 0);
681 if (x_ok && y_ok)
683 mpz_init (bnd);
684 mpz_sub (bnd, loffx, loffy);
685 mpz_add (bnd, bnd, offc1);
686 mpz_sub (bnd, bnd, offc0);
688 if (cmp == LT_EXPR)
689 mpz_sub_ui (bnd, bnd, 1);
691 if (lbound)
693 mpz_neg (bnd, bnd);
694 if (mpz_cmp (bnds->below, bnd) < 0)
695 mpz_set (bnds->below, bnd);
697 else
699 if (mpz_cmp (bnd, bnds->up) < 0)
700 mpz_set (bnds->up, bnd);
702 mpz_clear (bnd);
705 mpz_clear (loffx);
706 mpz_clear (loffy);
707 end:
708 mpz_clear (offc0);
709 mpz_clear (offc1);
712 /* Stores the bounds on the value of the expression X - Y in LOOP to BNDS.
713 The subtraction is considered to be performed in arbitrary precision,
714 without overflows.
716 We do not attempt to be too clever regarding the value ranges of X and
717 Y; most of the time, they are just integers or ssa names offsetted by
718 integer. However, we try to use the information contained in the
719 comparisons before the loop (usually created by loop header copying). */
721 static void
722 bound_difference (class loop *loop, tree x, tree y, bounds *bnds)
724 tree type = TREE_TYPE (x);
725 tree varx, vary;
726 mpz_t offx, offy;
727 int cnt = 0;
728 edge e;
729 basic_block bb;
730 tree c0, c1;
731 enum tree_code cmp;
733 /* Get rid of unnecessary casts, but preserve the value of
734 the expressions. */
735 STRIP_SIGN_NOPS (x);
736 STRIP_SIGN_NOPS (y);
738 mpz_init (bnds->below);
739 mpz_init (bnds->up);
740 mpz_init (offx);
741 mpz_init (offy);
742 split_to_var_and_offset (x, &varx, offx);
743 split_to_var_and_offset (y, &vary, offy);
745 if (!integer_zerop (varx)
746 && operand_equal_p (varx, vary, 0))
748 /* Special case VARX == VARY -- we just need to compare the
749 offsets. The matters are a bit more complicated in the
750 case addition of offsets may wrap. */
751 bound_difference_of_offsetted_base (type, offx, offy, bnds);
753 else
755 /* Otherwise, use the value ranges to determine the initial
756 estimates on below and up. */
757 auto_mpz minx, maxx, miny, maxy;
758 determine_value_range (loop, type, varx, offx, minx, maxx);
759 determine_value_range (loop, type, vary, offy, miny, maxy);
761 mpz_sub (bnds->below, minx, maxy);
762 mpz_sub (bnds->up, maxx, miny);
765 /* If both X and Y are constants, we cannot get any more precise. */
766 if (integer_zerop (varx) && integer_zerop (vary))
767 goto end;
769 /* Now walk the dominators of the loop header and use the entry
770 guards to refine the estimates. */
771 for (bb = loop->header;
772 bb != ENTRY_BLOCK_PTR_FOR_FN (cfun) && cnt < MAX_DOMINATORS_TO_WALK;
773 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
775 if (!single_pred_p (bb))
776 continue;
777 e = single_pred_edge (bb);
779 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
780 continue;
782 gcond *cond = as_a <gcond *> (*gsi_last_bb (e->src));
783 c0 = gimple_cond_lhs (cond);
784 cmp = gimple_cond_code (cond);
785 c1 = gimple_cond_rhs (cond);
787 if (e->flags & EDGE_FALSE_VALUE)
788 cmp = invert_tree_comparison (cmp, false);
790 refine_bounds_using_guard (type, varx, offx, vary, offy,
791 c0, cmp, c1, bnds);
792 ++cnt;
795 end:
796 mpz_clear (offx);
797 mpz_clear (offy);
800 /* Update the bounds in BNDS that restrict the value of X to the bounds
801 that restrict the value of X + DELTA. X can be obtained as a
802 difference of two values in TYPE. */
804 static void
805 bounds_add (bounds *bnds, const widest_int &delta, tree type)
807 mpz_t mdelta, max;
809 mpz_init (mdelta);
810 wi::to_mpz (delta, mdelta, SIGNED);
812 mpz_init (max);
813 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), max, UNSIGNED);
815 mpz_add (bnds->up, bnds->up, mdelta);
816 mpz_add (bnds->below, bnds->below, mdelta);
818 if (mpz_cmp (bnds->up, max) > 0)
819 mpz_set (bnds->up, max);
821 mpz_neg (max, max);
822 if (mpz_cmp (bnds->below, max) < 0)
823 mpz_set (bnds->below, max);
825 mpz_clear (mdelta);
826 mpz_clear (max);
829 /* Update the bounds in BNDS that restrict the value of X to the bounds
830 that restrict the value of -X. */
832 static void
833 bounds_negate (bounds *bnds)
835 mpz_t tmp;
837 mpz_init_set (tmp, bnds->up);
838 mpz_neg (bnds->up, bnds->below);
839 mpz_neg (bnds->below, tmp);
840 mpz_clear (tmp);
843 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
845 static tree
846 inverse (tree x, tree mask)
848 tree type = TREE_TYPE (x);
849 tree rslt;
850 unsigned ctr = tree_floor_log2 (mask);
852 if (TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
854 unsigned HOST_WIDE_INT ix;
855 unsigned HOST_WIDE_INT imask;
856 unsigned HOST_WIDE_INT irslt = 1;
858 gcc_assert (cst_and_fits_in_hwi (x));
859 gcc_assert (cst_and_fits_in_hwi (mask));
861 ix = int_cst_value (x);
862 imask = int_cst_value (mask);
864 for (; ctr; ctr--)
866 irslt *= ix;
867 ix *= ix;
869 irslt &= imask;
871 rslt = build_int_cst_type (type, irslt);
873 else
875 rslt = build_int_cst (type, 1);
876 for (; ctr; ctr--)
878 rslt = int_const_binop (MULT_EXPR, rslt, x);
879 x = int_const_binop (MULT_EXPR, x, x);
881 rslt = int_const_binop (BIT_AND_EXPR, rslt, mask);
884 return rslt;
887 /* Derives the upper bound BND on the number of executions of loop with exit
888 condition S * i <> C. If NO_OVERFLOW is true, then the control variable of
889 the loop does not overflow. EXIT_MUST_BE_TAKEN is true if we are guaranteed
890 that the loop ends through this exit, i.e., the induction variable ever
891 reaches the value of C.
893 The value C is equal to final - base, where final and base are the final and
894 initial value of the actual induction variable in the analysed loop. BNDS
895 bounds the value of this difference when computed in signed type with
896 unbounded range, while the computation of C is performed in an unsigned
897 type with the range matching the range of the type of the induction variable.
898 In particular, BNDS.up contains an upper bound on C in the following cases:
899 -- if the iv must reach its final value without overflow, i.e., if
900 NO_OVERFLOW && EXIT_MUST_BE_TAKEN is true, or
901 -- if final >= base, which we know to hold when BNDS.below >= 0. */
903 static void
904 number_of_iterations_ne_max (mpz_t bnd, bool no_overflow, tree c, tree s,
905 bounds *bnds, bool exit_must_be_taken)
907 widest_int max;
908 mpz_t d;
909 tree type = TREE_TYPE (c);
910 bool bnds_u_valid = ((no_overflow && exit_must_be_taken)
911 || mpz_sgn (bnds->below) >= 0);
913 if (integer_onep (s)
914 || (TREE_CODE (c) == INTEGER_CST
915 && TREE_CODE (s) == INTEGER_CST
916 && wi::mod_trunc (wi::to_wide (c), wi::to_wide (s),
917 TYPE_SIGN (type)) == 0)
918 || (TYPE_OVERFLOW_UNDEFINED (type)
919 && multiple_of_p (type, c, s)))
921 /* If C is an exact multiple of S, then its value will be reached before
922 the induction variable overflows (unless the loop is exited in some
923 other way before). Note that the actual induction variable in the
924 loop (which ranges from base to final instead of from 0 to C) may
925 overflow, in which case BNDS.up will not be giving a correct upper
926 bound on C; thus, BNDS_U_VALID had to be computed in advance. */
927 no_overflow = true;
928 exit_must_be_taken = true;
931 /* If the induction variable can overflow, the number of iterations is at
932 most the period of the control variable (or infinite, but in that case
933 the whole # of iterations analysis will fail). */
934 if (!no_overflow)
936 max = wi::mask <widest_int> (TYPE_PRECISION (type)
937 - wi::ctz (wi::to_wide (s)), false);
938 wi::to_mpz (max, bnd, UNSIGNED);
939 return;
942 /* Now we know that the induction variable does not overflow, so the loop
943 iterates at most (range of type / S) times. */
944 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), bnd, UNSIGNED);
946 /* If the induction variable is guaranteed to reach the value of C before
947 overflow, ... */
948 if (exit_must_be_taken)
950 /* ... then we can strengthen this to C / S, and possibly we can use
951 the upper bound on C given by BNDS. */
952 if (TREE_CODE (c) == INTEGER_CST)
953 wi::to_mpz (wi::to_wide (c), bnd, UNSIGNED);
954 else if (bnds_u_valid)
955 mpz_set (bnd, bnds->up);
958 mpz_init (d);
959 wi::to_mpz (wi::to_wide (s), d, UNSIGNED);
960 mpz_fdiv_q (bnd, bnd, d);
961 mpz_clear (d);
964 /* Determines number of iterations of loop whose ending condition
965 is IV <> FINAL. TYPE is the type of the iv. The number of
966 iterations is stored to NITER. EXIT_MUST_BE_TAKEN is true if
967 we know that the exit must be taken eventually, i.e., that the IV
968 ever reaches the value FINAL (we derived this earlier, and possibly set
969 NITER->assumptions to make sure this is the case). BNDS contains the
970 bounds on the difference FINAL - IV->base. */
972 static bool
973 number_of_iterations_ne (class loop *loop, tree type, affine_iv *iv,
974 tree final, class tree_niter_desc *niter,
975 bool exit_must_be_taken, bounds *bnds)
977 tree niter_type = unsigned_type_for (type);
978 tree s, c, d, bits, assumption, tmp, bound;
980 niter->control = *iv;
981 niter->bound = final;
982 niter->cmp = NE_EXPR;
984 /* Rearrange the terms so that we get inequality S * i <> C, with S
985 positive. Also cast everything to the unsigned type. If IV does
986 not overflow, BNDS bounds the value of C. Also, this is the
987 case if the computation |FINAL - IV->base| does not overflow, i.e.,
988 if BNDS->below in the result is nonnegative. */
989 if (tree_int_cst_sign_bit (iv->step))
991 s = fold_convert (niter_type,
992 fold_build1 (NEGATE_EXPR, type, iv->step));
993 c = fold_build2 (MINUS_EXPR, niter_type,
994 fold_convert (niter_type, iv->base),
995 fold_convert (niter_type, final));
996 bounds_negate (bnds);
998 else
1000 s = fold_convert (niter_type, iv->step);
1001 c = fold_build2 (MINUS_EXPR, niter_type,
1002 fold_convert (niter_type, final),
1003 fold_convert (niter_type, iv->base));
1006 auto_mpz max;
1007 number_of_iterations_ne_max (max, iv->no_overflow, c, s, bnds,
1008 exit_must_be_taken);
1009 niter->max = widest_int::from (wi::from_mpz (niter_type, max, false),
1010 TYPE_SIGN (niter_type));
1012 /* Compute no-overflow information for the control iv. This can be
1013 proven when below two conditions are satisfied:
1015 1) IV evaluates toward FINAL at beginning, i.e:
1016 base <= FINAL ; step > 0
1017 base >= FINAL ; step < 0
1019 2) |FINAL - base| is an exact multiple of step.
1021 Unfortunately, it's hard to prove above conditions after pass loop-ch
1022 because loop with exit condition (IV != FINAL) usually will be guarded
1023 by initial-condition (IV.base - IV.step != FINAL). In this case, we
1024 can alternatively try to prove below conditions:
1026 1') IV evaluates toward FINAL at beginning, i.e:
1027 new_base = base - step < FINAL ; step > 0
1028 && base - step doesn't underflow
1029 new_base = base - step > FINAL ; step < 0
1030 && base - step doesn't overflow
1032 Please refer to PR34114 as an example of loop-ch's impact.
1034 Note, for NE_EXPR, base equals to FINAL is a special case, in
1035 which the loop exits immediately, and the iv does not overflow.
1037 Also note, we prove condition 2) by checking base and final seperately
1038 along with condition 1) or 1'). Since we ensure the difference
1039 computation of c does not wrap with cond below and the adjusted s
1040 will fit a signed type as well as an unsigned we can safely do
1041 this using the type of the IV if it is not pointer typed. */
1042 tree mtype = type;
1043 if (POINTER_TYPE_P (type))
1044 mtype = niter_type;
1045 if (!niter->control.no_overflow
1046 && (integer_onep (s)
1047 || (multiple_of_p (mtype, fold_convert (mtype, iv->base),
1048 fold_convert (mtype, s), false)
1049 && multiple_of_p (mtype, fold_convert (mtype, final),
1050 fold_convert (mtype, s), false))))
1052 tree t, cond, relaxed_cond = boolean_false_node;
1054 if (tree_int_cst_sign_bit (iv->step))
1056 cond = fold_build2 (GE_EXPR, boolean_type_node, iv->base, final);
1057 if (TREE_CODE (type) == INTEGER_TYPE)
1059 /* Only when base - step doesn't overflow. */
1060 t = TYPE_MAX_VALUE (type);
1061 t = fold_build2 (PLUS_EXPR, type, t, iv->step);
1062 t = fold_build2 (GE_EXPR, boolean_type_node, t, iv->base);
1063 if (integer_nonzerop (t))
1065 t = fold_build2 (MINUS_EXPR, type, iv->base, iv->step);
1066 relaxed_cond = fold_build2 (GT_EXPR, boolean_type_node, t,
1067 final);
1071 else
1073 cond = fold_build2 (LE_EXPR, boolean_type_node, iv->base, final);
1074 if (TREE_CODE (type) == INTEGER_TYPE)
1076 /* Only when base - step doesn't underflow. */
1077 t = TYPE_MIN_VALUE (type);
1078 t = fold_build2 (PLUS_EXPR, type, t, iv->step);
1079 t = fold_build2 (LE_EXPR, boolean_type_node, t, iv->base);
1080 if (integer_nonzerop (t))
1082 t = fold_build2 (MINUS_EXPR, type, iv->base, iv->step);
1083 relaxed_cond = fold_build2 (LT_EXPR, boolean_type_node, t,
1084 final);
1089 t = simplify_using_initial_conditions (loop, cond);
1090 if (!t || !integer_onep (t))
1091 t = simplify_using_initial_conditions (loop, relaxed_cond);
1093 if (t && integer_onep (t))
1095 niter->control.no_overflow = true;
1096 niter->niter = fold_build2 (EXACT_DIV_EXPR, niter_type, c, s);
1097 return true;
1101 /* Let nsd (step, size of mode) = d. If d does not divide c, the loop
1102 is infinite. Otherwise, the number of iterations is
1103 (inverse(s/d) * (c/d)) mod (size of mode/d). */
1104 bits = num_ending_zeros (s);
1105 bound = build_low_bits_mask (niter_type,
1106 (TYPE_PRECISION (niter_type)
1107 - tree_to_uhwi (bits)));
1109 d = fold_binary_to_constant (LSHIFT_EXPR, niter_type,
1110 build_int_cst (niter_type, 1), bits);
1111 s = fold_binary_to_constant (RSHIFT_EXPR, niter_type, s, bits);
1113 if (!exit_must_be_taken)
1115 /* If we cannot assume that the exit is taken eventually, record the
1116 assumptions for divisibility of c. */
1117 assumption = fold_build2 (FLOOR_MOD_EXPR, niter_type, c, d);
1118 assumption = fold_build2 (EQ_EXPR, boolean_type_node,
1119 assumption, build_int_cst (niter_type, 0));
1120 if (!integer_nonzerop (assumption))
1121 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1122 niter->assumptions, assumption);
1125 c = fold_build2 (EXACT_DIV_EXPR, niter_type, c, d);
1126 if (integer_onep (s))
1128 niter->niter = c;
1130 else
1132 tmp = fold_build2 (MULT_EXPR, niter_type, c, inverse (s, bound));
1133 niter->niter = fold_build2 (BIT_AND_EXPR, niter_type, tmp, bound);
1135 return true;
1138 /* Checks whether we can determine the final value of the control variable
1139 of the loop with ending condition IV0 < IV1 (computed in TYPE).
1140 DELTA is the difference IV1->base - IV0->base, STEP is the absolute value
1141 of the step. The assumptions necessary to ensure that the computation
1142 of the final value does not overflow are recorded in NITER. If we
1143 find the final value, we adjust DELTA and return TRUE. Otherwise
1144 we return false. BNDS bounds the value of IV1->base - IV0->base,
1145 and will be updated by the same amount as DELTA. EXIT_MUST_BE_TAKEN is
1146 true if we know that the exit must be taken eventually. */
1148 static bool
1149 number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
1150 class tree_niter_desc *niter,
1151 tree *delta, tree step,
1152 bool exit_must_be_taken, bounds *bnds)
1154 tree niter_type = TREE_TYPE (step);
1155 tree mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
1156 tree tmod;
1157 tree assumption = boolean_true_node, bound, noloop;
1158 bool fv_comp_no_overflow;
1159 tree type1 = type;
1160 if (POINTER_TYPE_P (type))
1161 type1 = sizetype;
1163 if (TREE_CODE (mod) != INTEGER_CST)
1164 return false;
1165 if (integer_nonzerop (mod))
1166 mod = fold_build2 (MINUS_EXPR, niter_type, step, mod);
1167 tmod = fold_convert (type1, mod);
1169 auto_mpz mmod;
1170 wi::to_mpz (wi::to_wide (mod), mmod, UNSIGNED);
1171 mpz_neg (mmod, mmod);
1173 /* If the induction variable does not overflow and the exit is taken,
1174 then the computation of the final value does not overflow. This is
1175 also obviously the case if the new final value is equal to the
1176 current one. Finally, we postulate this for pointer type variables,
1177 as the code cannot rely on the object to that the pointer points being
1178 placed at the end of the address space (and more pragmatically,
1179 TYPE_{MIN,MAX}_VALUE is not defined for pointers). */
1180 if (integer_zerop (mod) || POINTER_TYPE_P (type))
1181 fv_comp_no_overflow = true;
1182 else if (!exit_must_be_taken)
1183 fv_comp_no_overflow = false;
1184 else
1185 fv_comp_no_overflow =
1186 (iv0->no_overflow && integer_nonzerop (iv0->step))
1187 || (iv1->no_overflow && integer_nonzerop (iv1->step));
1189 if (integer_nonzerop (iv0->step))
1191 /* The final value of the iv is iv1->base + MOD, assuming that this
1192 computation does not overflow, and that
1193 iv0->base <= iv1->base + MOD. */
1194 if (!fv_comp_no_overflow)
1196 bound = fold_build2 (MINUS_EXPR, type1,
1197 TYPE_MAX_VALUE (type1), tmod);
1198 assumption = fold_build2 (LE_EXPR, boolean_type_node,
1199 iv1->base, bound);
1200 if (integer_zerop (assumption))
1201 return false;
1204 else
1206 /* The final value of the iv is iv0->base - MOD, assuming that this
1207 computation does not overflow, and that
1208 iv0->base - MOD <= iv1->base. */
1209 if (!fv_comp_no_overflow)
1211 bound = fold_build2 (PLUS_EXPR, type1,
1212 TYPE_MIN_VALUE (type1), tmod);
1213 assumption = fold_build2 (GE_EXPR, boolean_type_node,
1214 iv0->base, bound);
1215 if (integer_zerop (assumption))
1216 return false;
1220 /* IV0 < IV1 does not loop if IV0->base >= IV1->base. */
1221 if (mpz_cmp (mmod, bnds->below) < 0)
1222 noloop = boolean_false_node;
1223 else
1224 noloop = fold_build2 (GE_EXPR, boolean_type_node,
1225 iv0->base, iv1->base);
1227 if (!integer_nonzerop (assumption))
1228 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1229 niter->assumptions,
1230 assumption);
1231 if (!integer_zerop (noloop))
1232 niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
1233 niter->may_be_zero,
1234 noloop);
1235 bounds_add (bnds, wi::to_widest (mod), type);
1236 *delta = fold_build2 (PLUS_EXPR, niter_type, *delta, mod);
1238 return true;
1241 /* Add assertions to NITER that ensure that the control variable of the loop
1242 with ending condition IV0 < IV1 does not overflow. Types of IV0 and IV1
1243 are TYPE. Returns false if we can prove that there is an overflow, true
1244 otherwise. STEP is the absolute value of the step. */
1246 static bool
1247 assert_no_overflow_lt (tree type, affine_iv *iv0, affine_iv *iv1,
1248 class tree_niter_desc *niter, tree step)
1250 tree bound, d, assumption, diff;
1251 tree niter_type = TREE_TYPE (step);
1253 if (integer_nonzerop (iv0->step))
1255 /* for (i = iv0->base; i < iv1->base; i += iv0->step) */
1256 if (iv0->no_overflow)
1257 return true;
1259 /* If iv0->base is a constant, we can determine the last value before
1260 overflow precisely; otherwise we conservatively assume
1261 MAX - STEP + 1. */
1263 if (TREE_CODE (iv0->base) == INTEGER_CST)
1265 d = fold_build2 (MINUS_EXPR, niter_type,
1266 fold_convert (niter_type, TYPE_MAX_VALUE (type)),
1267 fold_convert (niter_type, iv0->base));
1268 diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
1270 else
1271 diff = fold_build2 (MINUS_EXPR, niter_type, step,
1272 build_int_cst (niter_type, 1));
1273 bound = fold_build2 (MINUS_EXPR, type,
1274 TYPE_MAX_VALUE (type), fold_convert (type, diff));
1275 assumption = fold_build2 (LE_EXPR, boolean_type_node,
1276 iv1->base, bound);
1278 else
1280 /* for (i = iv1->base; i > iv0->base; i += iv1->step) */
1281 if (iv1->no_overflow)
1282 return true;
1284 if (TREE_CODE (iv1->base) == INTEGER_CST)
1286 d = fold_build2 (MINUS_EXPR, niter_type,
1287 fold_convert (niter_type, iv1->base),
1288 fold_convert (niter_type, TYPE_MIN_VALUE (type)));
1289 diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
1291 else
1292 diff = fold_build2 (MINUS_EXPR, niter_type, step,
1293 build_int_cst (niter_type, 1));
1294 bound = fold_build2 (PLUS_EXPR, type,
1295 TYPE_MIN_VALUE (type), fold_convert (type, diff));
1296 assumption = fold_build2 (GE_EXPR, boolean_type_node,
1297 iv0->base, bound);
1300 if (integer_zerop (assumption))
1301 return false;
1302 if (!integer_nonzerop (assumption))
1303 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1304 niter->assumptions, assumption);
1306 iv0->no_overflow = true;
1307 iv1->no_overflow = true;
1308 return true;
1311 /* Add an assumption to NITER that a loop whose ending condition
1312 is IV0 < IV1 rolls. TYPE is the type of the control iv. BNDS
1313 bounds the value of IV1->base - IV0->base. */
1315 static void
1316 assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
1317 class tree_niter_desc *niter, bounds *bnds)
1319 tree assumption = boolean_true_node, bound, diff;
1320 tree mbz, mbzl, mbzr, type1;
1321 bool rolls_p, no_overflow_p;
1322 widest_int dstep;
1323 mpz_t mstep, max;
1325 /* We are going to compute the number of iterations as
1326 (iv1->base - iv0->base + step - 1) / step, computed in the unsigned
1327 variant of TYPE. This formula only works if
1329 -step + 1 <= (iv1->base - iv0->base) <= MAX - step + 1
1331 (where MAX is the maximum value of the unsigned variant of TYPE, and
1332 the computations in this formula are performed in full precision,
1333 i.e., without overflows).
1335 Usually, for loops with exit condition iv0->base + step * i < iv1->base,
1336 we have a condition of the form iv0->base - step < iv1->base before the loop,
1337 and for loops iv0->base < iv1->base - step * i the condition
1338 iv0->base < iv1->base + step, due to loop header copying, which enable us
1339 to prove the lower bound.
1341 The upper bound is more complicated. Unless the expressions for initial
1342 and final value themselves contain enough information, we usually cannot
1343 derive it from the context. */
1345 /* First check whether the answer does not follow from the bounds we gathered
1346 before. */
1347 if (integer_nonzerop (iv0->step))
1348 dstep = wi::to_widest (iv0->step);
1349 else
1351 dstep = wi::sext (wi::to_widest (iv1->step), TYPE_PRECISION (type));
1352 dstep = -dstep;
1355 mpz_init (mstep);
1356 wi::to_mpz (dstep, mstep, UNSIGNED);
1357 mpz_neg (mstep, mstep);
1358 mpz_add_ui (mstep, mstep, 1);
1360 rolls_p = mpz_cmp (mstep, bnds->below) <= 0;
1362 mpz_init (max);
1363 wi::to_mpz (wi::minus_one (TYPE_PRECISION (type)), max, UNSIGNED);
1364 mpz_add (max, max, mstep);
1365 no_overflow_p = (mpz_cmp (bnds->up, max) <= 0
1366 /* For pointers, only values lying inside a single object
1367 can be compared or manipulated by pointer arithmetics.
1368 Gcc in general does not allow or handle objects larger
1369 than half of the address space, hence the upper bound
1370 is satisfied for pointers. */
1371 || POINTER_TYPE_P (type));
1372 mpz_clear (mstep);
1373 mpz_clear (max);
1375 if (rolls_p && no_overflow_p)
1376 return;
1378 type1 = type;
1379 if (POINTER_TYPE_P (type))
1380 type1 = sizetype;
1382 /* Now the hard part; we must formulate the assumption(s) as expressions, and
1383 we must be careful not to introduce overflow. */
1385 if (integer_nonzerop (iv0->step))
1387 diff = fold_build2 (MINUS_EXPR, type1,
1388 iv0->step, build_int_cst (type1, 1));
1390 /* We need to know that iv0->base >= MIN + iv0->step - 1. Since
1391 0 address never belongs to any object, we can assume this for
1392 pointers. */
1393 if (!POINTER_TYPE_P (type))
1395 bound = fold_build2 (PLUS_EXPR, type1,
1396 TYPE_MIN_VALUE (type), diff);
1397 assumption = fold_build2 (GE_EXPR, boolean_type_node,
1398 iv0->base, bound);
1401 /* And then we can compute iv0->base - diff, and compare it with
1402 iv1->base. */
1403 mbzl = fold_build2 (MINUS_EXPR, type1,
1404 fold_convert (type1, iv0->base), diff);
1405 mbzr = fold_convert (type1, iv1->base);
1407 else
1409 diff = fold_build2 (PLUS_EXPR, type1,
1410 iv1->step, build_int_cst (type1, 1));
1412 if (!POINTER_TYPE_P (type))
1414 bound = fold_build2 (PLUS_EXPR, type1,
1415 TYPE_MAX_VALUE (type), diff);
1416 assumption = fold_build2 (LE_EXPR, boolean_type_node,
1417 iv1->base, bound);
1420 mbzl = fold_convert (type1, iv0->base);
1421 mbzr = fold_build2 (MINUS_EXPR, type1,
1422 fold_convert (type1, iv1->base), diff);
1425 if (!integer_nonzerop (assumption))
1426 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1427 niter->assumptions, assumption);
1428 if (!rolls_p)
1430 mbz = fold_build2 (GT_EXPR, boolean_type_node, mbzl, mbzr);
1431 niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
1432 niter->may_be_zero, mbz);
1436 /* Determines number of iterations of loop whose ending condition
1437 is IV0 < IV1 which likes: {base, -C} < n, or n < {base, C}.
1438 The number of iterations is stored to NITER. */
1440 static bool
1441 number_of_iterations_until_wrap (class loop *loop, tree type, affine_iv *iv0,
1442 affine_iv *iv1, class tree_niter_desc *niter)
1444 tree niter_type = unsigned_type_for (type);
1445 tree step, num, assumptions, may_be_zero, span;
1446 wide_int high, low, max, min;
1448 may_be_zero = fold_build2 (LE_EXPR, boolean_type_node, iv1->base, iv0->base);
1449 if (integer_onep (may_be_zero))
1450 return false;
1452 int prec = TYPE_PRECISION (type);
1453 signop sgn = TYPE_SIGN (type);
1454 min = wi::min_value (prec, sgn);
1455 max = wi::max_value (prec, sgn);
1457 /* n < {base, C}. */
1458 if (integer_zerop (iv0->step) && !tree_int_cst_sign_bit (iv1->step))
1460 step = iv1->step;
1461 /* MIN + C - 1 <= n. */
1462 tree last = wide_int_to_tree (type, min + wi::to_wide (step) - 1);
1463 assumptions = fold_build2 (LE_EXPR, boolean_type_node, last, iv0->base);
1464 if (integer_zerop (assumptions))
1465 return false;
1467 num = fold_build2 (MINUS_EXPR, niter_type,
1468 wide_int_to_tree (niter_type, max),
1469 fold_convert (niter_type, iv1->base));
1471 /* When base has the form iv + 1, if we know iv >= n, then iv + 1 < n
1472 only when iv + 1 overflows, i.e. when iv == TYPE_VALUE_MAX. */
1473 if (sgn == UNSIGNED
1474 && integer_onep (step)
1475 && TREE_CODE (iv1->base) == PLUS_EXPR
1476 && integer_onep (TREE_OPERAND (iv1->base, 1)))
1478 tree cond = fold_build2 (GE_EXPR, boolean_type_node,
1479 TREE_OPERAND (iv1->base, 0), iv0->base);
1480 cond = simplify_using_initial_conditions (loop, cond);
1481 if (integer_onep (cond))
1482 may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node,
1483 TREE_OPERAND (iv1->base, 0),
1484 TYPE_MAX_VALUE (type));
1487 high = max;
1488 if (TREE_CODE (iv1->base) == INTEGER_CST)
1489 low = wi::to_wide (iv1->base) - 1;
1490 else if (TREE_CODE (iv0->base) == INTEGER_CST)
1491 low = wi::to_wide (iv0->base);
1492 else
1493 low = min;
1495 /* {base, -C} < n. */
1496 else if (tree_int_cst_sign_bit (iv0->step) && integer_zerop (iv1->step))
1498 step = fold_build1 (NEGATE_EXPR, TREE_TYPE (iv0->step), iv0->step);
1499 /* MAX - C + 1 >= n. */
1500 tree last = wide_int_to_tree (type, max - wi::to_wide (step) + 1);
1501 assumptions = fold_build2 (GE_EXPR, boolean_type_node, last, iv1->base);
1502 if (integer_zerop (assumptions))
1503 return false;
1505 num = fold_build2 (MINUS_EXPR, niter_type,
1506 fold_convert (niter_type, iv0->base),
1507 wide_int_to_tree (niter_type, min));
1508 low = min;
1509 if (TREE_CODE (iv0->base) == INTEGER_CST)
1510 high = wi::to_wide (iv0->base) + 1;
1511 else if (TREE_CODE (iv1->base) == INTEGER_CST)
1512 high = wi::to_wide (iv1->base);
1513 else
1514 high = max;
1516 else
1517 return false;
1519 /* (delta + step - 1) / step */
1520 step = fold_convert (niter_type, step);
1521 num = fold_build2 (PLUS_EXPR, niter_type, num, step);
1522 niter->niter = fold_build2 (FLOOR_DIV_EXPR, niter_type, num, step);
1524 widest_int delta, s;
1525 delta = widest_int::from (high, sgn) - widest_int::from (low, sgn);
1526 s = wi::to_widest (step);
1527 delta = delta + s - 1;
1528 niter->max = wi::udiv_floor (delta, s);
1530 niter->may_be_zero = may_be_zero;
1532 if (!integer_nonzerop (assumptions))
1533 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1534 niter->assumptions, assumptions);
1536 niter->control.no_overflow = false;
1538 /* Update bound and exit condition as:
1539 bound = niter * STEP + (IVbase - STEP).
1540 { IVbase - STEP, +, STEP } != bound
1541 Here, biasing IVbase by 1 step makes 'bound' be the value before wrap.
1543 tree base_type = TREE_TYPE (niter->control.base);
1544 if (POINTER_TYPE_P (base_type))
1546 tree utype = unsigned_type_for (base_type);
1547 niter->control.base
1548 = fold_build2 (MINUS_EXPR, utype,
1549 fold_convert (utype, niter->control.base),
1550 fold_convert (utype, niter->control.step));
1551 niter->control.base = fold_convert (base_type, niter->control.base);
1553 else
1554 niter->control.base
1555 = fold_build2 (MINUS_EXPR, base_type, niter->control.base,
1556 niter->control.step);
1558 span = fold_build2 (MULT_EXPR, niter_type, niter->niter,
1559 fold_convert (niter_type, niter->control.step));
1560 niter->bound = fold_build2 (PLUS_EXPR, niter_type, span,
1561 fold_convert (niter_type, niter->control.base));
1562 niter->bound = fold_convert (type, niter->bound);
1563 niter->cmp = NE_EXPR;
1565 return true;
1568 /* Determines number of iterations of loop whose ending condition
1569 is IV0 < IV1. TYPE is the type of the iv. The number of
1570 iterations is stored to NITER. BNDS bounds the difference
1571 IV1->base - IV0->base. EXIT_MUST_BE_TAKEN is true if we know
1572 that the exit must be taken eventually. */
1574 static bool
1575 number_of_iterations_lt (class loop *loop, tree type, affine_iv *iv0,
1576 affine_iv *iv1, class tree_niter_desc *niter,
1577 bool exit_must_be_taken, bounds *bnds)
1579 tree niter_type = unsigned_type_for (type);
1580 tree delta, step, s;
1581 mpz_t mstep, tmp;
1583 if (integer_nonzerop (iv0->step))
1585 niter->control = *iv0;
1586 niter->cmp = LT_EXPR;
1587 niter->bound = iv1->base;
1589 else
1591 niter->control = *iv1;
1592 niter->cmp = GT_EXPR;
1593 niter->bound = iv0->base;
1596 /* {base, -C} < n, or n < {base, C} */
1597 if (tree_int_cst_sign_bit (iv0->step)
1598 || (!integer_zerop (iv1->step) && !tree_int_cst_sign_bit (iv1->step)))
1599 return number_of_iterations_until_wrap (loop, type, iv0, iv1, niter);
1601 delta = fold_build2 (MINUS_EXPR, niter_type,
1602 fold_convert (niter_type, iv1->base),
1603 fold_convert (niter_type, iv0->base));
1605 /* First handle the special case that the step is +-1. */
1606 if ((integer_onep (iv0->step) && integer_zerop (iv1->step))
1607 || (integer_all_onesp (iv1->step) && integer_zerop (iv0->step)))
1609 /* for (i = iv0->base; i < iv1->base; i++)
1613 for (i = iv1->base; i > iv0->base; i--).
1615 In both cases # of iterations is iv1->base - iv0->base, assuming that
1616 iv1->base >= iv0->base.
1618 First try to derive a lower bound on the value of
1619 iv1->base - iv0->base, computed in full precision. If the difference
1620 is nonnegative, we are done, otherwise we must record the
1621 condition. */
1623 if (mpz_sgn (bnds->below) < 0)
1624 niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
1625 iv1->base, iv0->base);
1626 niter->niter = delta;
1627 niter->max = widest_int::from (wi::from_mpz (niter_type, bnds->up, false),
1628 TYPE_SIGN (niter_type));
1629 niter->control.no_overflow = true;
1630 return true;
1633 if (integer_nonzerop (iv0->step))
1634 step = fold_convert (niter_type, iv0->step);
1635 else
1636 step = fold_convert (niter_type,
1637 fold_build1 (NEGATE_EXPR, type, iv1->step));
1639 /* If we can determine the final value of the control iv exactly, we can
1640 transform the condition to != comparison. In particular, this will be
1641 the case if DELTA is constant. */
1642 if (number_of_iterations_lt_to_ne (type, iv0, iv1, niter, &delta, step,
1643 exit_must_be_taken, bnds))
1645 affine_iv zps;
1647 zps.base = build_int_cst (niter_type, 0);
1648 zps.step = step;
1649 /* number_of_iterations_lt_to_ne will add assumptions that ensure that
1650 zps does not overflow. */
1651 zps.no_overflow = true;
1653 return number_of_iterations_ne (loop, type, &zps,
1654 delta, niter, true, bnds);
1657 /* Make sure that the control iv does not overflow. */
1658 if (!assert_no_overflow_lt (type, iv0, iv1, niter, step))
1659 return false;
1661 /* We determine the number of iterations as (delta + step - 1) / step. For
1662 this to work, we must know that iv1->base >= iv0->base - step + 1,
1663 otherwise the loop does not roll. */
1664 assert_loop_rolls_lt (type, iv0, iv1, niter, bnds);
1666 s = fold_build2 (MINUS_EXPR, niter_type,
1667 step, build_int_cst (niter_type, 1));
1668 delta = fold_build2 (PLUS_EXPR, niter_type, delta, s);
1669 niter->niter = fold_build2 (FLOOR_DIV_EXPR, niter_type, delta, step);
1671 mpz_init (mstep);
1672 mpz_init (tmp);
1673 wi::to_mpz (wi::to_wide (step), mstep, UNSIGNED);
1674 mpz_add (tmp, bnds->up, mstep);
1675 mpz_sub_ui (tmp, tmp, 1);
1676 mpz_fdiv_q (tmp, tmp, mstep);
1677 niter->max = widest_int::from (wi::from_mpz (niter_type, tmp, false),
1678 TYPE_SIGN (niter_type));
1679 mpz_clear (mstep);
1680 mpz_clear (tmp);
1682 return true;
1685 /* Determines number of iterations of loop whose ending condition
1686 is IV0 <= IV1. TYPE is the type of the iv. The number of
1687 iterations is stored to NITER. EXIT_MUST_BE_TAKEN is true if
1688 we know that this condition must eventually become false (we derived this
1689 earlier, and possibly set NITER->assumptions to make sure this
1690 is the case). BNDS bounds the difference IV1->base - IV0->base. */
1692 static bool
1693 number_of_iterations_le (class loop *loop, tree type, affine_iv *iv0,
1694 affine_iv *iv1, class tree_niter_desc *niter,
1695 bool exit_must_be_taken, bounds *bnds)
1697 tree assumption;
1698 tree type1 = type;
1699 if (POINTER_TYPE_P (type))
1700 type1 = sizetype;
1702 /* Say that IV0 is the control variable. Then IV0 <= IV1 iff
1703 IV0 < IV1 + 1, assuming that IV1 is not equal to the greatest
1704 value of the type. This we must know anyway, since if it is
1705 equal to this value, the loop rolls forever. We do not check
1706 this condition for pointer type ivs, as the code cannot rely on
1707 the object to that the pointer points being placed at the end of
1708 the address space (and more pragmatically, TYPE_{MIN,MAX}_VALUE is
1709 not defined for pointers). */
1711 if (!exit_must_be_taken && !POINTER_TYPE_P (type))
1713 if (integer_nonzerop (iv0->step))
1714 assumption = fold_build2 (NE_EXPR, boolean_type_node,
1715 iv1->base, TYPE_MAX_VALUE (type));
1716 else
1717 assumption = fold_build2 (NE_EXPR, boolean_type_node,
1718 iv0->base, TYPE_MIN_VALUE (type));
1720 if (integer_zerop (assumption))
1721 return false;
1722 if (!integer_nonzerop (assumption))
1723 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
1724 niter->assumptions, assumption);
1727 if (integer_nonzerop (iv0->step))
1729 if (POINTER_TYPE_P (type))
1730 iv1->base = fold_build_pointer_plus_hwi (iv1->base, 1);
1731 else
1732 iv1->base = fold_build2 (PLUS_EXPR, type1, iv1->base,
1733 build_int_cst (type1, 1));
1735 else if (POINTER_TYPE_P (type))
1736 iv0->base = fold_build_pointer_plus_hwi (iv0->base, -1);
1737 else
1738 iv0->base = fold_build2 (MINUS_EXPR, type1,
1739 iv0->base, build_int_cst (type1, 1));
1741 bounds_add (bnds, 1, type1);
1743 return number_of_iterations_lt (loop, type, iv0, iv1, niter, exit_must_be_taken,
1744 bnds);
1747 /* Dumps description of affine induction variable IV to FILE. */
1749 static void
1750 dump_affine_iv (FILE *file, affine_iv *iv)
1752 if (!integer_zerop (iv->step))
1753 fprintf (file, "[");
1755 print_generic_expr (dump_file, iv->base, TDF_SLIM);
1757 if (!integer_zerop (iv->step))
1759 fprintf (file, ", + , ");
1760 print_generic_expr (dump_file, iv->step, TDF_SLIM);
1761 fprintf (file, "]%s", iv->no_overflow ? "(no_overflow)" : "");
1765 /* Determine the number of iterations according to condition (for staying
1766 inside loop) which compares two induction variables using comparison
1767 operator CODE. The induction variable on left side of the comparison
1768 is IV0, the right-hand side is IV1. Both induction variables must have
1769 type TYPE, which must be an integer or pointer type. The steps of the
1770 ivs must be constants (or NULL_TREE, which is interpreted as constant zero).
1772 LOOP is the loop whose number of iterations we are determining.
1774 ONLY_EXIT is true if we are sure this is the only way the loop could be
1775 exited (including possibly non-returning function calls, exceptions, etc.)
1776 -- in this case we can use the information whether the control induction
1777 variables can overflow or not in a more efficient way.
1779 if EVERY_ITERATION is true, we know the test is executed on every iteration.
1781 The results (number of iterations and assumptions as described in
1782 comments at class tree_niter_desc in tree-ssa-loop.h) are stored to NITER.
1783 Returns false if it fails to determine number of iterations, true if it
1784 was determined (possibly with some assumptions). */
1786 static bool
1787 number_of_iterations_cond (class loop *loop,
1788 tree type, affine_iv *iv0, enum tree_code code,
1789 affine_iv *iv1, class tree_niter_desc *niter,
1790 bool only_exit, bool every_iteration)
1792 bool exit_must_be_taken = false, ret;
1793 bounds bnds;
1795 /* If the test is not executed every iteration, wrapping may make the test
1796 to pass again.
1797 TODO: the overflow case can be still used as unreliable estimate of upper
1798 bound. But we have no API to pass it down to number of iterations code
1799 and, at present, it will not use it anyway. */
1800 if (!every_iteration
1801 && (!iv0->no_overflow || !iv1->no_overflow
1802 || code == NE_EXPR || code == EQ_EXPR))
1803 return false;
1805 /* The meaning of these assumptions is this:
1806 if !assumptions
1807 then the rest of information does not have to be valid
1808 if may_be_zero then the loop does not roll, even if
1809 niter != 0. */
1810 niter->assumptions = boolean_true_node;
1811 niter->may_be_zero = boolean_false_node;
1812 niter->niter = NULL_TREE;
1813 niter->max = 0;
1814 niter->bound = NULL_TREE;
1815 niter->cmp = ERROR_MARK;
1817 /* Make < comparison from > ones, and for NE_EXPR comparisons, ensure that
1818 the control variable is on lhs. */
1819 if (code == GE_EXPR || code == GT_EXPR
1820 || (code == NE_EXPR && integer_zerop (iv0->step)))
1822 std::swap (iv0, iv1);
1823 code = swap_tree_comparison (code);
1826 if (POINTER_TYPE_P (type))
1828 /* Comparison of pointers is undefined unless both iv0 and iv1 point
1829 to the same object. If they do, the control variable cannot wrap
1830 (as wrap around the bounds of memory will never return a pointer
1831 that would be guaranteed to point to the same object, even if we
1832 avoid undefined behavior by casting to size_t and back). */
1833 iv0->no_overflow = true;
1834 iv1->no_overflow = true;
1837 /* If the control induction variable does not overflow and the only exit
1838 from the loop is the one that we analyze, we know it must be taken
1839 eventually. */
1840 if (only_exit)
1842 if (!integer_zerop (iv0->step) && iv0->no_overflow)
1843 exit_must_be_taken = true;
1844 else if (!integer_zerop (iv1->step) && iv1->no_overflow)
1845 exit_must_be_taken = true;
1848 /* We can handle cases which neither of the sides of the comparison is
1849 invariant:
1851 {iv0.base, iv0.step} cmp_code {iv1.base, iv1.step}
1852 as if:
1853 {iv0.base, iv0.step - iv1.step} cmp_code {iv1.base, 0}
1855 provided that either below condition is satisfied:
1857 a) the test is NE_EXPR;
1858 b) iv0 and iv1 do not overflow and iv0.step - iv1.step is of
1859 the same sign and of less or equal magnitude than iv0.step
1861 This rarely occurs in practice, but it is simple enough to manage. */
1862 if (!integer_zerop (iv0->step) && !integer_zerop (iv1->step))
1864 tree step_type = POINTER_TYPE_P (type) ? sizetype : type;
1865 tree step = fold_binary_to_constant (MINUS_EXPR, step_type,
1866 iv0->step, iv1->step);
1868 /* For code other than NE_EXPR we have to ensure moving the evolution
1869 of IV1 to that of IV0 does not introduce overflow. */
1870 if (TREE_CODE (step) != INTEGER_CST
1871 || !iv0->no_overflow || !iv1->no_overflow)
1873 if (code != NE_EXPR)
1874 return false;
1875 iv0->no_overflow = false;
1877 /* If the new step of IV0 has changed sign or is of greater
1878 magnitude then we do not know whether IV0 does overflow
1879 and thus the transform is not valid for code other than NE_EXPR. */
1880 else if (tree_int_cst_sign_bit (step) != tree_int_cst_sign_bit (iv0->step)
1881 || wi::gtu_p (wi::abs (wi::to_widest (step)),
1882 wi::abs (wi::to_widest (iv0->step))))
1884 if (POINTER_TYPE_P (type) && code != NE_EXPR)
1885 /* For relational pointer compares we have further guarantees
1886 that the pointers always point to the same object (or one
1887 after it) and that objects do not cross the zero page. So
1888 not only is the transform always valid for relational
1889 pointer compares, we also know the resulting IV does not
1890 overflow. */
1892 else if (code != NE_EXPR)
1893 return false;
1894 else
1895 iv0->no_overflow = false;
1898 iv0->step = step;
1899 iv1->step = build_int_cst (step_type, 0);
1900 iv1->no_overflow = true;
1903 /* If the result of the comparison is a constant, the loop is weird. More
1904 precise handling would be possible, but the situation is not common enough
1905 to waste time on it. */
1906 if (integer_zerop (iv0->step) && integer_zerop (iv1->step))
1907 return false;
1909 /* If the loop exits immediately, there is nothing to do. */
1910 tree tem = fold_binary (code, boolean_type_node, iv0->base, iv1->base);
1911 if (tem && integer_zerop (tem))
1913 if (!every_iteration)
1914 return false;
1915 niter->niter = build_int_cst (unsigned_type_for (type), 0);
1916 niter->max = 0;
1917 return true;
1920 /* OK, now we know we have a senseful loop. Handle several cases, depending
1921 on what comparison operator is used. */
1922 bound_difference (loop, iv1->base, iv0->base, &bnds);
1924 if (dump_file && (dump_flags & TDF_DETAILS))
1926 fprintf (dump_file,
1927 "Analyzing # of iterations of loop %d\n", loop->num);
1929 fprintf (dump_file, " exit condition ");
1930 dump_affine_iv (dump_file, iv0);
1931 fprintf (dump_file, " %s ",
1932 code == NE_EXPR ? "!="
1933 : code == LT_EXPR ? "<"
1934 : "<=");
1935 dump_affine_iv (dump_file, iv1);
1936 fprintf (dump_file, "\n");
1938 fprintf (dump_file, " bounds on difference of bases: ");
1939 mpz_out_str (dump_file, 10, bnds.below);
1940 fprintf (dump_file, " ... ");
1941 mpz_out_str (dump_file, 10, bnds.up);
1942 fprintf (dump_file, "\n");
1945 switch (code)
1947 case NE_EXPR:
1948 gcc_assert (integer_zerop (iv1->step));
1949 ret = number_of_iterations_ne (loop, type, iv0, iv1->base, niter,
1950 exit_must_be_taken, &bnds);
1951 break;
1953 case LT_EXPR:
1954 ret = number_of_iterations_lt (loop, type, iv0, iv1, niter,
1955 exit_must_be_taken, &bnds);
1956 break;
1958 case LE_EXPR:
1959 ret = number_of_iterations_le (loop, type, iv0, iv1, niter,
1960 exit_must_be_taken, &bnds);
1961 break;
1963 default:
1964 gcc_unreachable ();
1967 mpz_clear (bnds.up);
1968 mpz_clear (bnds.below);
1970 if (dump_file && (dump_flags & TDF_DETAILS))
1972 if (ret)
1974 fprintf (dump_file, " result:\n");
1975 if (!integer_nonzerop (niter->assumptions))
1977 fprintf (dump_file, " under assumptions ");
1978 print_generic_expr (dump_file, niter->assumptions, TDF_SLIM);
1979 fprintf (dump_file, "\n");
1982 if (!integer_zerop (niter->may_be_zero))
1984 fprintf (dump_file, " zero if ");
1985 print_generic_expr (dump_file, niter->may_be_zero, TDF_SLIM);
1986 fprintf (dump_file, "\n");
1989 fprintf (dump_file, " # of iterations ");
1990 print_generic_expr (dump_file, niter->niter, TDF_SLIM);
1991 fprintf (dump_file, ", bounded by ");
1992 print_decu (niter->max, dump_file);
1993 fprintf (dump_file, "\n");
1995 else
1996 fprintf (dump_file, " failed\n\n");
1998 return ret;
2001 /* Return an expression that computes the popcount of src. */
2003 static tree
2004 build_popcount_expr (tree src)
2006 tree fn;
2007 bool use_ifn = false;
2008 int prec = TYPE_PRECISION (TREE_TYPE (src));
2009 int i_prec = TYPE_PRECISION (integer_type_node);
2010 int li_prec = TYPE_PRECISION (long_integer_type_node);
2011 int lli_prec = TYPE_PRECISION (long_long_integer_type_node);
2013 tree utype = unsigned_type_for (TREE_TYPE (src));
2014 src = fold_convert (utype, src);
2016 if (direct_internal_fn_supported_p (IFN_POPCOUNT, utype, OPTIMIZE_FOR_BOTH))
2017 use_ifn = true;
2018 else if (prec <= i_prec)
2019 fn = builtin_decl_implicit (BUILT_IN_POPCOUNT);
2020 else if (prec == li_prec)
2021 fn = builtin_decl_implicit (BUILT_IN_POPCOUNTL);
2022 else if (prec == lli_prec || prec == 2 * lli_prec)
2023 fn = builtin_decl_implicit (BUILT_IN_POPCOUNTLL);
2024 else
2025 return NULL_TREE;
2027 tree call;
2028 if (use_ifn)
2029 call = build_call_expr_internal_loc (UNKNOWN_LOCATION, IFN_POPCOUNT,
2030 integer_type_node, 1, src);
2031 else if (prec == 2 * lli_prec)
2033 tree src1 = fold_convert (long_long_unsigned_type_node,
2034 fold_build2 (RSHIFT_EXPR, TREE_TYPE (src),
2035 unshare_expr (src),
2036 build_int_cst (integer_type_node,
2037 lli_prec)));
2038 tree src2 = fold_convert (long_long_unsigned_type_node, src);
2039 tree call1 = build_call_expr (fn, 1, src1);
2040 tree call2 = build_call_expr (fn, 1, src2);
2041 call = fold_build2 (PLUS_EXPR, integer_type_node, call1, call2);
2043 else
2045 if (prec < i_prec)
2046 src = fold_convert (unsigned_type_node, src);
2048 call = build_call_expr (fn, 1, src);
2051 return call;
2054 /* Utility function to check if OP is defined by a stmt
2055 that is a val - 1. */
2057 static bool
2058 ssa_defined_by_minus_one_stmt_p (tree op, tree val)
2060 gimple *stmt;
2061 return (TREE_CODE (op) == SSA_NAME
2062 && (stmt = SSA_NAME_DEF_STMT (op))
2063 && is_gimple_assign (stmt)
2064 && (gimple_assign_rhs_code (stmt) == PLUS_EXPR)
2065 && val == gimple_assign_rhs1 (stmt)
2066 && integer_minus_onep (gimple_assign_rhs2 (stmt)));
2069 /* See comment below for number_of_iterations_bitcount.
2070 For popcount, we have:
2072 modify:
2073 _1 = iv_1 + -1
2074 iv_2 = iv_1 & _1
2076 test:
2077 if (iv != 0)
2079 modification count:
2080 popcount (src)
2084 static bool
2085 number_of_iterations_popcount (loop_p loop, edge exit,
2086 enum tree_code code,
2087 class tree_niter_desc *niter)
2089 bool modify_before_test = true;
2090 HOST_WIDE_INT max;
2092 /* Check that condition for staying inside the loop is like
2093 if (iv != 0). */
2094 gcond *cond_stmt = safe_dyn_cast <gcond *> (*gsi_last_bb (exit->src));
2095 if (!cond_stmt
2096 || code != NE_EXPR
2097 || !integer_zerop (gimple_cond_rhs (cond_stmt))
2098 || TREE_CODE (gimple_cond_lhs (cond_stmt)) != SSA_NAME)
2099 return false;
2101 tree iv_2 = gimple_cond_lhs (cond_stmt);
2102 gimple *iv_2_stmt = SSA_NAME_DEF_STMT (iv_2);
2104 /* If the test comes before the iv modification, then these will actually be
2105 iv_1 and a phi node. */
2106 if (gimple_code (iv_2_stmt) == GIMPLE_PHI
2107 && gimple_bb (iv_2_stmt) == loop->header
2108 && gimple_phi_num_args (iv_2_stmt) == 2
2109 && (TREE_CODE (gimple_phi_arg_def (iv_2_stmt,
2110 loop_latch_edge (loop)->dest_idx))
2111 == SSA_NAME))
2113 /* iv_2 is actually one of the inputs to the phi. */
2114 iv_2 = gimple_phi_arg_def (iv_2_stmt, loop_latch_edge (loop)->dest_idx);
2115 iv_2_stmt = SSA_NAME_DEF_STMT (iv_2);
2116 modify_before_test = false;
2119 /* Make sure iv_2_stmt is an and stmt (iv_2 = _1 & iv_1). */
2120 if (!is_gimple_assign (iv_2_stmt)
2121 || gimple_assign_rhs_code (iv_2_stmt) != BIT_AND_EXPR)
2122 return false;
2124 tree iv_1 = gimple_assign_rhs1 (iv_2_stmt);
2125 tree _1 = gimple_assign_rhs2 (iv_2_stmt);
2127 /* Check that _1 is defined by (_1 = iv_1 + -1).
2128 Also make sure that _1 is the same in and_stmt and _1 defining stmt.
2129 Also canonicalize if _1 and _b11 are revrsed. */
2130 if (ssa_defined_by_minus_one_stmt_p (iv_1, _1))
2131 std::swap (iv_1, _1);
2132 else if (ssa_defined_by_minus_one_stmt_p (_1, iv_1))
2134 else
2135 return false;
2137 /* Check the recurrence. */
2138 gimple *phi = SSA_NAME_DEF_STMT (iv_1);
2139 if (gimple_code (phi) != GIMPLE_PHI
2140 || (gimple_bb (phi) != loop_latch_edge (loop)->dest)
2141 || (iv_2 != gimple_phi_arg_def (phi, loop_latch_edge (loop)->dest_idx)))
2142 return false;
2144 /* We found a match. */
2145 tree src = gimple_phi_arg_def (phi, loop_preheader_edge (loop)->dest_idx);
2146 int src_precision = TYPE_PRECISION (TREE_TYPE (src));
2148 /* Get the corresponding popcount builtin. */
2149 tree expr = build_popcount_expr (src);
2151 if (!expr)
2152 return false;
2154 max = src_precision;
2156 tree may_be_zero = boolean_false_node;
2158 if (modify_before_test)
2160 expr = fold_build2 (MINUS_EXPR, integer_type_node, expr,
2161 integer_one_node);
2162 max = max - 1;
2163 may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node, src,
2164 build_zero_cst (TREE_TYPE (src)));
2167 expr = fold_convert (unsigned_type_node, expr);
2169 niter->assumptions = boolean_true_node;
2170 niter->may_be_zero = simplify_using_initial_conditions (loop, may_be_zero);
2171 niter->niter = simplify_using_initial_conditions(loop, expr);
2173 if (TREE_CODE (niter->niter) == INTEGER_CST)
2174 niter->max = tree_to_uhwi (niter->niter);
2175 else
2176 niter->max = max;
2178 niter->bound = NULL_TREE;
2179 niter->cmp = ERROR_MARK;
2180 return true;
2183 /* Return an expression that counts the leading/trailing zeroes of src.
2185 If define_at_zero is true, then the built expression will be defined to
2186 return the precision of src when src == 0 (using either a conditional
2187 expression or a suitable internal function).
2188 Otherwise, we can elide the conditional expression and let src = 0 invoke
2189 undefined behaviour. */
2191 static tree
2192 build_cltz_expr (tree src, bool leading, bool define_at_zero)
2194 tree fn;
2195 internal_fn ifn = leading ? IFN_CLZ : IFN_CTZ;
2196 bool use_ifn = false;
2197 int prec = TYPE_PRECISION (TREE_TYPE (src));
2198 int i_prec = TYPE_PRECISION (integer_type_node);
2199 int li_prec = TYPE_PRECISION (long_integer_type_node);
2200 int lli_prec = TYPE_PRECISION (long_long_integer_type_node);
2202 tree utype = unsigned_type_for (TREE_TYPE (src));
2203 src = fold_convert (utype, src);
2205 if (direct_internal_fn_supported_p (ifn, utype, OPTIMIZE_FOR_BOTH))
2206 use_ifn = true;
2207 else if (prec <= i_prec)
2208 fn = leading ? builtin_decl_implicit (BUILT_IN_CLZ)
2209 : builtin_decl_implicit (BUILT_IN_CTZ);
2210 else if (prec == li_prec)
2211 fn = leading ? builtin_decl_implicit (BUILT_IN_CLZL)
2212 : builtin_decl_implicit (BUILT_IN_CTZL);
2213 else if (prec == lli_prec || prec == 2 * lli_prec)
2214 fn = leading ? builtin_decl_implicit (BUILT_IN_CLZLL)
2215 : builtin_decl_implicit (BUILT_IN_CTZLL);
2216 else
2217 return NULL_TREE;
2219 tree call;
2220 if (use_ifn)
2222 int val;
2223 int optab_defined_at_zero
2224 = (leading
2225 ? CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (utype), val)
2226 : CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (utype), val));
2227 tree arg2 = NULL_TREE;
2228 if (define_at_zero && optab_defined_at_zero == 2 && val == prec)
2229 arg2 = build_int_cst (integer_type_node, val);
2230 call = build_call_expr_internal_loc (UNKNOWN_LOCATION, ifn,
2231 integer_type_node, arg2 ? 2 : 1,
2232 src, arg2);
2233 if (define_at_zero && arg2 == NULL_TREE)
2235 tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src,
2236 build_zero_cst (TREE_TYPE (src)));
2237 call = fold_build3 (COND_EXPR, integer_type_node, is_zero, call,
2238 build_int_cst (integer_type_node, prec));
2241 else if (fn == NULL_TREE)
2242 return NULL_TREE;
2243 else if (prec == 2 * lli_prec)
2245 tree src1 = fold_convert (long_long_unsigned_type_node,
2246 fold_build2 (RSHIFT_EXPR, TREE_TYPE (src),
2247 unshare_expr (src),
2248 build_int_cst (integer_type_node,
2249 lli_prec)));
2250 tree src2 = fold_convert (long_long_unsigned_type_node, src);
2251 /* We count the zeroes in src1, and add the number in src2 when src1
2252 is 0. */
2253 if (!leading)
2254 std::swap (src1, src2);
2255 tree call1 = build_call_expr (fn, 1, src1);
2256 tree call2 = build_call_expr (fn, 1, src2);
2257 if (define_at_zero)
2259 tree is_zero2 = fold_build2 (NE_EXPR, boolean_type_node, src2,
2260 build_zero_cst (TREE_TYPE (src2)));
2261 call2 = fold_build3 (COND_EXPR, integer_type_node, is_zero2, call2,
2262 build_int_cst (integer_type_node, lli_prec));
2264 tree is_zero1 = fold_build2 (NE_EXPR, boolean_type_node, src1,
2265 build_zero_cst (TREE_TYPE (src1)));
2266 call = fold_build3 (COND_EXPR, integer_type_node, is_zero1, call1,
2267 fold_build2 (PLUS_EXPR, integer_type_node, call2,
2268 build_int_cst (integer_type_node,
2269 lli_prec)));
2271 else
2273 if (prec < i_prec)
2274 src = fold_convert (unsigned_type_node, src);
2276 call = build_call_expr (fn, 1, src);
2277 if (leading && prec < i_prec)
2278 call = fold_build2 (MINUS_EXPR, integer_type_node, call,
2279 build_int_cst (integer_type_node, i_prec - prec));
2280 if (define_at_zero)
2282 tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src,
2283 build_zero_cst (TREE_TYPE (src)));
2284 call = fold_build3 (COND_EXPR, integer_type_node, is_zero, call,
2285 build_int_cst (integer_type_node, prec));
2289 return call;
2292 /* Returns true if STMT is equivalent to x << 1. */
2294 static bool
2295 is_lshift_by_1 (gassign *stmt)
2297 if (gimple_assign_rhs_code (stmt) == LSHIFT_EXPR
2298 && integer_onep (gimple_assign_rhs2 (stmt)))
2299 return true;
2300 if (gimple_assign_rhs_code (stmt) == MULT_EXPR
2301 && tree_fits_shwi_p (gimple_assign_rhs2 (stmt))
2302 && tree_to_shwi (gimple_assign_rhs2 (stmt)) == 2)
2303 return true;
2304 return false;
2307 /* Returns true if STMT is equivalent to x >> 1. */
2309 static bool
2310 is_rshift_by_1 (gassign *stmt)
2312 if (!TYPE_UNSIGNED (TREE_TYPE (gimple_assign_lhs (stmt))))
2313 return false;
2314 if (gimple_assign_rhs_code (stmt) == RSHIFT_EXPR
2315 && integer_onep (gimple_assign_rhs2 (stmt)))
2316 return true;
2317 if (trunc_or_exact_div_p (gimple_assign_rhs_code (stmt))
2318 && tree_fits_shwi_p (gimple_assign_rhs2 (stmt))
2319 && tree_to_shwi (gimple_assign_rhs2 (stmt)) == 2)
2320 return true;
2321 return false;
2324 /* See comment below for number_of_iterations_bitcount.
2325 For c[lt]z, we have:
2327 modify:
2328 iv_2 = iv_1 << 1 OR iv_1 >> 1
2330 test:
2331 if (iv & 1 << (prec-1)) OR (iv & 1)
2333 modification count:
2334 src precision - c[lt]z (src)
2338 static bool
2339 number_of_iterations_cltz (loop_p loop, edge exit,
2340 enum tree_code code,
2341 class tree_niter_desc *niter)
2343 bool modify_before_test = true;
2344 HOST_WIDE_INT max;
2345 int checked_bit;
2346 tree iv_2;
2348 /* Check that condition for staying inside the loop is like
2349 if (iv == 0). */
2350 gcond *cond_stmt = safe_dyn_cast <gcond *> (*gsi_last_bb (exit->src));
2351 if (!cond_stmt
2352 || (code != EQ_EXPR && code != GE_EXPR)
2353 || !integer_zerop (gimple_cond_rhs (cond_stmt))
2354 || TREE_CODE (gimple_cond_lhs (cond_stmt)) != SSA_NAME)
2355 return false;
2357 if (code == EQ_EXPR)
2359 /* Make sure we check a bitwise and with a suitable constant */
2360 gimple *and_stmt = SSA_NAME_DEF_STMT (gimple_cond_lhs (cond_stmt));
2361 if (!is_gimple_assign (and_stmt)
2362 || gimple_assign_rhs_code (and_stmt) != BIT_AND_EXPR
2363 || !integer_pow2p (gimple_assign_rhs2 (and_stmt))
2364 || TREE_CODE (gimple_assign_rhs1 (and_stmt)) != SSA_NAME)
2365 return false;
2367 checked_bit = tree_log2 (gimple_assign_rhs2 (and_stmt));
2369 iv_2 = gimple_assign_rhs1 (and_stmt);
2371 else
2373 /* We have a GE_EXPR - a signed comparison with zero is equivalent to
2374 testing the leading bit, so check for this pattern too. */
2376 iv_2 = gimple_cond_lhs (cond_stmt);
2377 tree test_value_type = TREE_TYPE (iv_2);
2379 if (TYPE_UNSIGNED (test_value_type))
2380 return false;
2382 gimple *test_value_stmt = SSA_NAME_DEF_STMT (iv_2);
2384 if (is_gimple_assign (test_value_stmt)
2385 && gimple_assign_rhs_code (test_value_stmt) == NOP_EXPR)
2387 /* If the test value comes from a NOP_EXPR, then we need to unwrap
2388 this. We conservatively require that both types have the same
2389 precision. */
2390 iv_2 = gimple_assign_rhs1 (test_value_stmt);
2391 tree rhs_type = TREE_TYPE (iv_2);
2392 if (TREE_CODE (iv_2) != SSA_NAME
2393 || TREE_CODE (rhs_type) != INTEGER_TYPE
2394 || (TYPE_PRECISION (rhs_type)
2395 != TYPE_PRECISION (test_value_type)))
2396 return false;
2399 checked_bit = TYPE_PRECISION (test_value_type) - 1;
2402 gimple *iv_2_stmt = SSA_NAME_DEF_STMT (iv_2);
2404 /* If the test comes before the iv modification, then these will actually be
2405 iv_1 and a phi node. */
2406 if (gimple_code (iv_2_stmt) == GIMPLE_PHI
2407 && gimple_bb (iv_2_stmt) == loop->header
2408 && gimple_phi_num_args (iv_2_stmt) == 2
2409 && (TREE_CODE (gimple_phi_arg_def (iv_2_stmt,
2410 loop_latch_edge (loop)->dest_idx))
2411 == SSA_NAME))
2413 /* iv_2 is actually one of the inputs to the phi. */
2414 iv_2 = gimple_phi_arg_def (iv_2_stmt, loop_latch_edge (loop)->dest_idx);
2415 iv_2_stmt = SSA_NAME_DEF_STMT (iv_2);
2416 modify_before_test = false;
2419 /* Make sure iv_2_stmt is a logical shift by one stmt:
2420 iv_2 = iv_1 {<<|>>} 1 */
2421 if (!is_gimple_assign (iv_2_stmt))
2422 return false;
2423 bool left_shift = false;
2424 if (!((left_shift = is_lshift_by_1 (as_a <gassign *> (iv_2_stmt)))
2425 || is_rshift_by_1 (as_a <gassign *> (iv_2_stmt))))
2426 return false;
2428 tree iv_1 = gimple_assign_rhs1 (iv_2_stmt);
2430 /* Check the recurrence. */
2431 gimple *phi = SSA_NAME_DEF_STMT (iv_1);
2432 if (gimple_code (phi) != GIMPLE_PHI
2433 || (gimple_bb (phi) != loop_latch_edge (loop)->dest)
2434 || (iv_2 != gimple_phi_arg_def (phi, loop_latch_edge (loop)->dest_idx)))
2435 return false;
2437 /* We found a match. */
2438 tree src = gimple_phi_arg_def (phi, loop_preheader_edge (loop)->dest_idx);
2439 int src_precision = TYPE_PRECISION (TREE_TYPE (src));
2441 /* Apply any needed preprocessing to src. */
2442 int num_ignored_bits;
2443 if (left_shift)
2444 num_ignored_bits = src_precision - checked_bit - 1;
2445 else
2446 num_ignored_bits = checked_bit;
2448 if (modify_before_test)
2449 num_ignored_bits++;
2451 if (num_ignored_bits != 0)
2452 src = fold_build2 (left_shift ? LSHIFT_EXPR : RSHIFT_EXPR,
2453 TREE_TYPE (src), src,
2454 build_int_cst (integer_type_node, num_ignored_bits));
2456 /* Get the corresponding c[lt]z builtin. */
2457 tree expr = build_cltz_expr (src, left_shift, false);
2459 if (!expr)
2460 return false;
2462 max = src_precision - num_ignored_bits - 1;
2464 expr = fold_convert (unsigned_type_node, expr);
2466 tree assumptions = fold_build2 (NE_EXPR, boolean_type_node, src,
2467 build_zero_cst (TREE_TYPE (src)));
2469 niter->assumptions = simplify_using_initial_conditions (loop, assumptions);
2470 niter->may_be_zero = boolean_false_node;
2471 niter->niter = simplify_using_initial_conditions (loop, expr);
2473 if (TREE_CODE (niter->niter) == INTEGER_CST)
2474 niter->max = tree_to_uhwi (niter->niter);
2475 else
2476 niter->max = max;
2478 niter->bound = NULL_TREE;
2479 niter->cmp = ERROR_MARK;
2481 return true;
2484 /* See comment below for number_of_iterations_bitcount.
2485 For c[lt]z complement, we have:
2487 modify:
2488 iv_2 = iv_1 >> 1 OR iv_1 << 1
2490 test:
2491 if (iv != 0)
2493 modification count:
2494 src precision - c[lt]z (src)
2498 static bool
2499 number_of_iterations_cltz_complement (loop_p loop, edge exit,
2500 enum tree_code code,
2501 class tree_niter_desc *niter)
2503 bool modify_before_test = true;
2504 HOST_WIDE_INT max;
2506 /* Check that condition for staying inside the loop is like
2507 if (iv != 0). */
2508 gcond *cond_stmt = safe_dyn_cast <gcond *> (*gsi_last_bb (exit->src));
2509 if (!cond_stmt
2510 || code != NE_EXPR
2511 || !integer_zerop (gimple_cond_rhs (cond_stmt))
2512 || TREE_CODE (gimple_cond_lhs (cond_stmt)) != SSA_NAME)
2513 return false;
2515 tree iv_2 = gimple_cond_lhs (cond_stmt);
2516 gimple *iv_2_stmt = SSA_NAME_DEF_STMT (iv_2);
2518 /* If the test comes before the iv modification, then these will actually be
2519 iv_1 and a phi node. */
2520 if (gimple_code (iv_2_stmt) == GIMPLE_PHI
2521 && gimple_bb (iv_2_stmt) == loop->header
2522 && gimple_phi_num_args (iv_2_stmt) == 2
2523 && (TREE_CODE (gimple_phi_arg_def (iv_2_stmt,
2524 loop_latch_edge (loop)->dest_idx))
2525 == SSA_NAME))
2527 /* iv_2 is actually one of the inputs to the phi. */
2528 iv_2 = gimple_phi_arg_def (iv_2_stmt, loop_latch_edge (loop)->dest_idx);
2529 iv_2_stmt = SSA_NAME_DEF_STMT (iv_2);
2530 modify_before_test = false;
2533 /* Make sure iv_2_stmt is a logical shift by one stmt:
2534 iv_2 = iv_1 {>>|<<} 1 */
2535 if (!is_gimple_assign (iv_2_stmt))
2536 return false;
2537 bool left_shift = false;
2538 if (!((left_shift = is_lshift_by_1 (as_a <gassign *> (iv_2_stmt)))
2539 || is_rshift_by_1 (as_a <gassign *> (iv_2_stmt))))
2540 return false;
2542 tree iv_1 = gimple_assign_rhs1 (iv_2_stmt);
2544 /* Check the recurrence. */
2545 gimple *phi = SSA_NAME_DEF_STMT (iv_1);
2546 if (gimple_code (phi) != GIMPLE_PHI
2547 || (gimple_bb (phi) != loop_latch_edge (loop)->dest)
2548 || (iv_2 != gimple_phi_arg_def (phi, loop_latch_edge (loop)->dest_idx)))
2549 return false;
2551 /* We found a match. */
2552 tree src = gimple_phi_arg_def (phi, loop_preheader_edge (loop)->dest_idx);
2553 int src_precision = TYPE_PRECISION (TREE_TYPE (src));
2555 /* Get the corresponding c[lt]z builtin. */
2556 tree expr = build_cltz_expr (src, !left_shift, true);
2558 if (!expr)
2559 return false;
2561 expr = fold_build2 (MINUS_EXPR, integer_type_node,
2562 build_int_cst (integer_type_node, src_precision),
2563 expr);
2565 max = src_precision;
2567 tree may_be_zero = boolean_false_node;
2569 if (modify_before_test)
2571 expr = fold_build2 (MINUS_EXPR, integer_type_node, expr,
2572 integer_one_node);
2573 max = max - 1;
2574 may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node, src,
2575 build_zero_cst (TREE_TYPE (src)));
2578 expr = fold_convert (unsigned_type_node, expr);
2580 niter->assumptions = boolean_true_node;
2581 niter->may_be_zero = simplify_using_initial_conditions (loop, may_be_zero);
2582 niter->niter = simplify_using_initial_conditions (loop, expr);
2584 if (TREE_CODE (niter->niter) == INTEGER_CST)
2585 niter->max = tree_to_uhwi (niter->niter);
2586 else
2587 niter->max = max;
2589 niter->bound = NULL_TREE;
2590 niter->cmp = ERROR_MARK;
2591 return true;
2594 /* See if LOOP contains a bit counting idiom. The idiom consists of two parts:
2595 1. A modification to the induction variabler;.
2596 2. A test to determine whether or not to exit the loop.
2598 These can come in either order - i.e.:
2600 <bb 3>
2601 iv_1 = PHI <src(2), iv_2(4)>
2602 if (test (iv_1))
2603 goto <bb 4>
2604 else
2605 goto <bb 5>
2607 <bb 4>
2608 iv_2 = modify (iv_1)
2609 goto <bb 3>
2613 <bb 3>
2614 iv_1 = PHI <src(2), iv_2(4)>
2615 iv_2 = modify (iv_1)
2617 <bb 4>
2618 if (test (iv_2))
2619 goto <bb 3>
2620 else
2621 goto <bb 5>
2623 The second form can be generated by copying the loop header out of the loop.
2625 In the first case, the number of latch executions will be equal to the
2626 number of induction variable modifications required before the test fails.
2628 In the second case (modify_before_test), if we assume that the number of
2629 modifications required before the test fails is nonzero, then the number of
2630 latch executions will be one less than this number.
2632 If we recognise the pattern, then we update niter accordingly, and return
2633 true. */
2635 static bool
2636 number_of_iterations_bitcount (loop_p loop, edge exit,
2637 enum tree_code code,
2638 class tree_niter_desc *niter)
2640 return (number_of_iterations_popcount (loop, exit, code, niter)
2641 || number_of_iterations_cltz (loop, exit, code, niter)
2642 || number_of_iterations_cltz_complement (loop, exit, code, niter));
2645 /* Substitute NEW_TREE for OLD in EXPR and fold the result.
2646 If VALUEIZE is non-NULL then OLD and NEW_TREE are ignored and instead
2647 all SSA names are replaced with the result of calling the VALUEIZE
2648 function with the SSA name as argument. */
2650 tree
2651 simplify_replace_tree (tree expr, tree old, tree new_tree,
2652 tree (*valueize) (tree, void*), void *context,
2653 bool do_fold)
2655 unsigned i, n;
2656 tree ret = NULL_TREE, e, se;
2658 if (!expr)
2659 return NULL_TREE;
2661 /* Do not bother to replace constants. */
2662 if (CONSTANT_CLASS_P (expr))
2663 return expr;
2665 if (valueize)
2667 if (TREE_CODE (expr) == SSA_NAME)
2669 new_tree = valueize (expr, context);
2670 if (new_tree != expr)
2671 return new_tree;
2674 else if (expr == old
2675 || operand_equal_p (expr, old, 0))
2676 return unshare_expr (new_tree);
2678 if (!EXPR_P (expr))
2679 return expr;
2681 n = TREE_OPERAND_LENGTH (expr);
2682 for (i = 0; i < n; i++)
2684 e = TREE_OPERAND (expr, i);
2685 se = simplify_replace_tree (e, old, new_tree, valueize, context, do_fold);
2686 if (e == se)
2687 continue;
2689 if (!ret)
2690 ret = copy_node (expr);
2692 TREE_OPERAND (ret, i) = se;
2695 return (ret ? (do_fold ? fold (ret) : ret) : expr);
2698 /* Expand definitions of ssa names in EXPR as long as they are simple
2699 enough, and return the new expression. If STOP is specified, stop
2700 expanding if EXPR equals to it. */
2702 static tree
2703 expand_simple_operations (tree expr, tree stop, hash_map<tree, tree> &cache)
2705 unsigned i, n;
2706 tree ret = NULL_TREE, e, ee, e1;
2707 enum tree_code code;
2708 gimple *stmt;
2710 if (expr == NULL_TREE)
2711 return expr;
2713 if (is_gimple_min_invariant (expr))
2714 return expr;
2716 code = TREE_CODE (expr);
2717 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
2719 n = TREE_OPERAND_LENGTH (expr);
2720 for (i = 0; i < n; i++)
2722 e = TREE_OPERAND (expr, i);
2723 if (!e)
2724 continue;
2725 /* SCEV analysis feeds us with a proper expression
2726 graph matching the SSA graph. Avoid turning it
2727 into a tree here, thus handle tree sharing
2728 properly.
2729 ??? The SSA walk below still turns the SSA graph
2730 into a tree but until we find a testcase do not
2731 introduce additional tree sharing here. */
2732 bool existed_p;
2733 tree &cee = cache.get_or_insert (e, &existed_p);
2734 if (existed_p)
2735 ee = cee;
2736 else
2738 cee = e;
2739 ee = expand_simple_operations (e, stop, cache);
2740 if (ee != e)
2741 *cache.get (e) = ee;
2743 if (e == ee)
2744 continue;
2746 if (!ret)
2747 ret = copy_node (expr);
2749 TREE_OPERAND (ret, i) = ee;
2752 if (!ret)
2753 return expr;
2755 fold_defer_overflow_warnings ();
2756 ret = fold (ret);
2757 fold_undefer_and_ignore_overflow_warnings ();
2758 return ret;
2761 /* Stop if it's not ssa name or the one we don't want to expand. */
2762 if (TREE_CODE (expr) != SSA_NAME || expr == stop)
2763 return expr;
2765 stmt = SSA_NAME_DEF_STMT (expr);
2766 if (gimple_code (stmt) == GIMPLE_PHI)
2768 basic_block src, dest;
2770 if (gimple_phi_num_args (stmt) != 1)
2771 return expr;
2772 e = PHI_ARG_DEF (stmt, 0);
2774 /* Avoid propagating through loop exit phi nodes, which
2775 could break loop-closed SSA form restrictions. */
2776 dest = gimple_bb (stmt);
2777 src = single_pred (dest);
2778 if (TREE_CODE (e) == SSA_NAME
2779 && src->loop_father != dest->loop_father)
2780 return expr;
2782 return expand_simple_operations (e, stop, cache);
2784 if (gimple_code (stmt) != GIMPLE_ASSIGN)
2785 return expr;
2787 /* Avoid expanding to expressions that contain SSA names that need
2788 to take part in abnormal coalescing. */
2789 ssa_op_iter iter;
2790 FOR_EACH_SSA_TREE_OPERAND (e, stmt, iter, SSA_OP_USE)
2791 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (e))
2792 return expr;
2794 e = gimple_assign_rhs1 (stmt);
2795 code = gimple_assign_rhs_code (stmt);
2796 if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
2798 if (is_gimple_min_invariant (e))
2799 return e;
2801 if (code == SSA_NAME)
2802 return expand_simple_operations (e, stop, cache);
2803 else if (code == ADDR_EXPR)
2805 poly_int64 offset;
2806 tree base = get_addr_base_and_unit_offset (TREE_OPERAND (e, 0),
2807 &offset);
2808 if (base
2809 && TREE_CODE (base) == MEM_REF)
2811 ee = expand_simple_operations (TREE_OPERAND (base, 0), stop,
2812 cache);
2813 return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (expr), ee,
2814 wide_int_to_tree (sizetype,
2815 mem_ref_offset (base)
2816 + offset));
2820 return expr;
2823 switch (code)
2825 CASE_CONVERT:
2826 /* Casts are simple. */
2827 ee = expand_simple_operations (e, stop, cache);
2828 return fold_build1 (code, TREE_TYPE (expr), ee);
2830 case PLUS_EXPR:
2831 case MINUS_EXPR:
2832 case MULT_EXPR:
2833 if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (expr))
2834 && TYPE_OVERFLOW_TRAPS (TREE_TYPE (expr)))
2835 return expr;
2836 /* Fallthru. */
2837 case POINTER_PLUS_EXPR:
2838 /* And increments and decrements by a constant are simple. */
2839 e1 = gimple_assign_rhs2 (stmt);
2840 if (!is_gimple_min_invariant (e1))
2841 return expr;
2843 ee = expand_simple_operations (e, stop, cache);
2844 return fold_build2 (code, TREE_TYPE (expr), ee, e1);
2846 default:
2847 return expr;
2851 tree
2852 expand_simple_operations (tree expr, tree stop)
2854 hash_map<tree, tree> cache;
2855 return expand_simple_operations (expr, stop, cache);
2858 /* Tries to simplify EXPR using the condition COND. Returns the simplified
2859 expression (or EXPR unchanged, if no simplification was possible). */
2861 static tree
2862 tree_simplify_using_condition_1 (tree cond, tree expr)
2864 bool changed;
2865 tree e, e0, e1, e2, notcond;
2866 enum tree_code code = TREE_CODE (expr);
2868 if (code == INTEGER_CST)
2869 return expr;
2871 if (code == TRUTH_OR_EXPR
2872 || code == TRUTH_AND_EXPR
2873 || code == COND_EXPR)
2875 changed = false;
2877 e0 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 0));
2878 if (TREE_OPERAND (expr, 0) != e0)
2879 changed = true;
2881 e1 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 1));
2882 if (TREE_OPERAND (expr, 1) != e1)
2883 changed = true;
2885 if (code == COND_EXPR)
2887 e2 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 2));
2888 if (TREE_OPERAND (expr, 2) != e2)
2889 changed = true;
2891 else
2892 e2 = NULL_TREE;
2894 if (changed)
2896 if (code == COND_EXPR)
2897 expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
2898 else
2899 expr = fold_build2 (code, boolean_type_node, e0, e1);
2902 return expr;
2905 /* In case COND is equality, we may be able to simplify EXPR by copy/constant
2906 propagation, and vice versa. Fold does not handle this, since it is
2907 considered too expensive. */
2908 if (TREE_CODE (cond) == EQ_EXPR)
2910 e0 = TREE_OPERAND (cond, 0);
2911 e1 = TREE_OPERAND (cond, 1);
2913 /* We know that e0 == e1. Check whether we cannot simplify expr
2914 using this fact. */
2915 e = simplify_replace_tree (expr, e0, e1);
2916 if (integer_zerop (e) || integer_nonzerop (e))
2917 return e;
2919 e = simplify_replace_tree (expr, e1, e0);
2920 if (integer_zerop (e) || integer_nonzerop (e))
2921 return e;
2923 if (TREE_CODE (expr) == EQ_EXPR)
2925 e0 = TREE_OPERAND (expr, 0);
2926 e1 = TREE_OPERAND (expr, 1);
2928 /* If e0 == e1 (EXPR) implies !COND, then EXPR cannot be true. */
2929 e = simplify_replace_tree (cond, e0, e1);
2930 if (integer_zerop (e))
2931 return e;
2932 e = simplify_replace_tree (cond, e1, e0);
2933 if (integer_zerop (e))
2934 return e;
2936 if (TREE_CODE (expr) == NE_EXPR)
2938 e0 = TREE_OPERAND (expr, 0);
2939 e1 = TREE_OPERAND (expr, 1);
2941 /* If e0 == e1 (!EXPR) implies !COND, then EXPR must be true. */
2942 e = simplify_replace_tree (cond, e0, e1);
2943 if (integer_zerop (e))
2944 return boolean_true_node;
2945 e = simplify_replace_tree (cond, e1, e0);
2946 if (integer_zerop (e))
2947 return boolean_true_node;
2950 /* Check whether COND ==> EXPR. */
2951 notcond = invert_truthvalue (cond);
2952 e = fold_binary (TRUTH_OR_EXPR, boolean_type_node, notcond, expr);
2953 if (e && integer_nonzerop (e))
2954 return e;
2956 /* Check whether COND ==> not EXPR. */
2957 e = fold_binary (TRUTH_AND_EXPR, boolean_type_node, cond, expr);
2958 if (e && integer_zerop (e))
2959 return e;
2961 return expr;
2964 /* Tries to simplify EXPR using the condition COND. Returns the simplified
2965 expression (or EXPR unchanged, if no simplification was possible).
2966 Wrapper around tree_simplify_using_condition_1 that ensures that chains
2967 of simple operations in definitions of ssa names in COND are expanded,
2968 so that things like casts or incrementing the value of the bound before
2969 the loop do not cause us to fail. */
2971 static tree
2972 tree_simplify_using_condition (tree cond, tree expr)
2974 cond = expand_simple_operations (cond);
2976 return tree_simplify_using_condition_1 (cond, expr);
2979 /* Tries to simplify EXPR using the conditions on entry to LOOP.
2980 Returns the simplified expression (or EXPR unchanged, if no
2981 simplification was possible). */
2983 tree
2984 simplify_using_initial_conditions (class loop *loop, tree expr)
2986 edge e;
2987 basic_block bb;
2988 tree cond, expanded, backup;
2989 int cnt = 0;
2991 if (TREE_CODE (expr) == INTEGER_CST)
2992 return expr;
2994 backup = expanded = expand_simple_operations (expr);
2996 /* Limit walking the dominators to avoid quadraticness in
2997 the number of BBs times the number of loops in degenerate
2998 cases. */
2999 for (bb = loop->header;
3000 bb != ENTRY_BLOCK_PTR_FOR_FN (cfun) && cnt < MAX_DOMINATORS_TO_WALK;
3001 bb = get_immediate_dominator (CDI_DOMINATORS, bb))
3003 if (!single_pred_p (bb))
3004 continue;
3005 e = single_pred_edge (bb);
3007 if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
3008 continue;
3010 gcond *stmt = as_a <gcond *> (*gsi_last_bb (e->src));
3011 cond = fold_build2 (gimple_cond_code (stmt),
3012 boolean_type_node,
3013 gimple_cond_lhs (stmt),
3014 gimple_cond_rhs (stmt));
3015 if (e->flags & EDGE_FALSE_VALUE)
3016 cond = invert_truthvalue (cond);
3017 expanded = tree_simplify_using_condition (cond, expanded);
3018 /* Break if EXPR is simplified to const values. */
3019 if (expanded
3020 && (integer_zerop (expanded) || integer_nonzerop (expanded)))
3021 return expanded;
3023 ++cnt;
3026 /* Return the original expression if no simplification is done. */
3027 return operand_equal_p (backup, expanded, 0) ? expr : expanded;
3030 /* Tries to simplify EXPR using the evolutions of the loop invariants
3031 in the superloops of LOOP. Returns the simplified expression
3032 (or EXPR unchanged, if no simplification was possible). */
3034 static tree
3035 simplify_using_outer_evolutions (class loop *loop, tree expr)
3037 enum tree_code code = TREE_CODE (expr);
3038 bool changed;
3039 tree e, e0, e1, e2;
3041 if (is_gimple_min_invariant (expr))
3042 return expr;
3044 if (code == TRUTH_OR_EXPR
3045 || code == TRUTH_AND_EXPR
3046 || code == COND_EXPR)
3048 changed = false;
3050 e0 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 0));
3051 if (TREE_OPERAND (expr, 0) != e0)
3052 changed = true;
3054 e1 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 1));
3055 if (TREE_OPERAND (expr, 1) != e1)
3056 changed = true;
3058 if (code == COND_EXPR)
3060 e2 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 2));
3061 if (TREE_OPERAND (expr, 2) != e2)
3062 changed = true;
3064 else
3065 e2 = NULL_TREE;
3067 if (changed)
3069 if (code == COND_EXPR)
3070 expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
3071 else
3072 expr = fold_build2 (code, boolean_type_node, e0, e1);
3075 return expr;
3078 e = instantiate_parameters (loop, expr);
3079 if (is_gimple_min_invariant (e))
3080 return e;
3082 return expr;
3085 /* Returns true if EXIT is the only possible exit from LOOP. */
3087 bool
3088 loop_only_exit_p (const class loop *loop, basic_block *body, const_edge exit)
3090 gimple_stmt_iterator bsi;
3091 unsigned i;
3093 if (exit != single_exit (loop))
3094 return false;
3096 for (i = 0; i < loop->num_nodes; i++)
3097 for (bsi = gsi_start_bb (body[i]); !gsi_end_p (bsi); gsi_next (&bsi))
3098 if (stmt_can_terminate_bb_p (gsi_stmt (bsi)))
3099 return false;
3101 return true;
3104 /* Stores description of number of iterations of LOOP derived from
3105 EXIT (an exit edge of the LOOP) in NITER. Returns true if some useful
3106 information could be derived (and fields of NITER have meaning described
3107 in comments at class tree_niter_desc declaration), false otherwise.
3108 When EVERY_ITERATION is true, only tests that are known to be executed
3109 every iteration are considered (i.e. only test that alone bounds the loop).
3110 If AT_STMT is not NULL, this function stores LOOP's condition statement in
3111 it when returning true. */
3113 bool
3114 number_of_iterations_exit_assumptions (class loop *loop, edge exit,
3115 class tree_niter_desc *niter,
3116 gcond **at_stmt, bool every_iteration,
3117 basic_block *body)
3119 tree type;
3120 tree op0, op1;
3121 enum tree_code code;
3122 affine_iv iv0, iv1;
3123 bool safe;
3125 /* The condition at a fake exit (if it exists) does not control its
3126 execution. */
3127 if (exit->flags & EDGE_FAKE)
3128 return false;
3130 /* Nothing to analyze if the loop is known to be infinite. */
3131 if (loop_constraint_set_p (loop, LOOP_C_INFINITE))
3132 return false;
3134 safe = dominated_by_p (CDI_DOMINATORS, loop->latch, exit->src);
3136 if (every_iteration && !safe)
3137 return false;
3139 niter->assumptions = boolean_false_node;
3140 niter->control.base = NULL_TREE;
3141 niter->control.step = NULL_TREE;
3142 niter->control.no_overflow = false;
3143 gcond *stmt = safe_dyn_cast <gcond *> (*gsi_last_bb (exit->src));
3144 if (!stmt)
3145 return false;
3147 if (at_stmt)
3148 *at_stmt = stmt;
3150 /* We want the condition for staying inside loop. */
3151 code = gimple_cond_code (stmt);
3152 if (exit->flags & EDGE_TRUE_VALUE)
3153 code = invert_tree_comparison (code, false);
3155 switch (code)
3157 case GT_EXPR:
3158 case GE_EXPR:
3159 case LT_EXPR:
3160 case LE_EXPR:
3161 case NE_EXPR:
3162 break;
3164 case EQ_EXPR:
3165 return number_of_iterations_cltz (loop, exit, code, niter);
3167 default:
3168 return false;
3171 op0 = gimple_cond_lhs (stmt);
3172 op1 = gimple_cond_rhs (stmt);
3173 type = TREE_TYPE (op0);
3175 if (TREE_CODE (type) != INTEGER_TYPE
3176 && !POINTER_TYPE_P (type))
3177 return false;
3179 tree iv0_niters = NULL_TREE;
3180 if (!simple_iv_with_niters (loop, loop_containing_stmt (stmt),
3181 op0, &iv0, safe ? &iv0_niters : NULL, false))
3182 return number_of_iterations_bitcount (loop, exit, code, niter);
3183 tree iv1_niters = NULL_TREE;
3184 if (!simple_iv_with_niters (loop, loop_containing_stmt (stmt),
3185 op1, &iv1, safe ? &iv1_niters : NULL, false))
3186 return false;
3187 /* Give up on complicated case. */
3188 if (iv0_niters && iv1_niters)
3189 return false;
3191 /* We don't want to see undefined signed overflow warnings while
3192 computing the number of iterations. */
3193 fold_defer_overflow_warnings ();
3195 iv0.base = expand_simple_operations (iv0.base);
3196 iv1.base = expand_simple_operations (iv1.base);
3197 bool body_from_caller = true;
3198 if (!body)
3200 body = get_loop_body (loop);
3201 body_from_caller = false;
3203 bool only_exit_p = loop_only_exit_p (loop, body, exit);
3204 if (!body_from_caller)
3205 free (body);
3206 if (!number_of_iterations_cond (loop, type, &iv0, code, &iv1, niter,
3207 only_exit_p, safe))
3209 fold_undefer_and_ignore_overflow_warnings ();
3210 return false;
3213 /* Incorporate additional assumption implied by control iv. */
3214 tree iv_niters = iv0_niters ? iv0_niters : iv1_niters;
3215 if (iv_niters)
3217 tree assumption = fold_build2 (LE_EXPR, boolean_type_node, niter->niter,
3218 fold_convert (TREE_TYPE (niter->niter),
3219 iv_niters));
3221 if (!integer_nonzerop (assumption))
3222 niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
3223 niter->assumptions, assumption);
3225 /* Refine upper bound if possible. */
3226 if (TREE_CODE (iv_niters) == INTEGER_CST
3227 && niter->max > wi::to_widest (iv_niters))
3228 niter->max = wi::to_widest (iv_niters);
3231 /* There is no assumptions if the loop is known to be finite. */
3232 if (!integer_zerop (niter->assumptions)
3233 && loop_constraint_set_p (loop, LOOP_C_FINITE))
3234 niter->assumptions = boolean_true_node;
3236 if (optimize >= 3)
3238 niter->assumptions = simplify_using_outer_evolutions (loop,
3239 niter->assumptions);
3240 niter->may_be_zero = simplify_using_outer_evolutions (loop,
3241 niter->may_be_zero);
3242 niter->niter = simplify_using_outer_evolutions (loop, niter->niter);
3245 niter->assumptions
3246 = simplify_using_initial_conditions (loop,
3247 niter->assumptions);
3248 niter->may_be_zero
3249 = simplify_using_initial_conditions (loop,
3250 niter->may_be_zero);
3252 fold_undefer_and_ignore_overflow_warnings ();
3254 /* If NITER has simplified into a constant, update MAX. */
3255 if (TREE_CODE (niter->niter) == INTEGER_CST)
3256 niter->max = wi::to_widest (niter->niter);
3258 return (!integer_zerop (niter->assumptions));
3261 /* Like number_of_iterations_exit_assumptions, but return TRUE only if
3262 the niter information holds unconditionally. */
3264 bool
3265 number_of_iterations_exit (class loop *loop, edge exit,
3266 class tree_niter_desc *niter,
3267 bool warn, bool every_iteration,
3268 basic_block *body)
3270 gcond *stmt;
3271 if (!number_of_iterations_exit_assumptions (loop, exit, niter,
3272 &stmt, every_iteration, body))
3273 return false;
3275 if (integer_nonzerop (niter->assumptions))
3276 return true;
3278 if (warn && dump_enabled_p ())
3279 dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt,
3280 "missed loop optimization: niters analysis ends up "
3281 "with assumptions.\n");
3283 return false;
3286 /* Try to determine the number of iterations of LOOP. If we succeed,
3287 expression giving number of iterations is returned and *EXIT is
3288 set to the edge from that the information is obtained. Otherwise
3289 chrec_dont_know is returned. */
3291 tree
3292 find_loop_niter (class loop *loop, edge *exit)
3294 unsigned i;
3295 auto_vec<edge> exits = get_loop_exit_edges (loop);
3296 edge ex;
3297 tree niter = NULL_TREE, aniter;
3298 class tree_niter_desc desc;
3300 *exit = NULL;
3301 FOR_EACH_VEC_ELT (exits, i, ex)
3303 if (!number_of_iterations_exit (loop, ex, &desc, false))
3304 continue;
3306 if (integer_nonzerop (desc.may_be_zero))
3308 /* We exit in the first iteration through this exit.
3309 We won't find anything better. */
3310 niter = build_int_cst (unsigned_type_node, 0);
3311 *exit = ex;
3312 break;
3315 if (!integer_zerop (desc.may_be_zero))
3316 continue;
3318 aniter = desc.niter;
3320 if (!niter)
3322 /* Nothing recorded yet. */
3323 niter = aniter;
3324 *exit = ex;
3325 continue;
3328 /* Prefer constants, the lower the better. */
3329 if (TREE_CODE (aniter) != INTEGER_CST)
3330 continue;
3332 if (TREE_CODE (niter) != INTEGER_CST)
3334 niter = aniter;
3335 *exit = ex;
3336 continue;
3339 if (tree_int_cst_lt (aniter, niter))
3341 niter = aniter;
3342 *exit = ex;
3343 continue;
3347 return niter ? niter : chrec_dont_know;
3350 /* Return true if loop is known to have bounded number of iterations. */
3352 bool
3353 finite_loop_p (class loop *loop)
3355 widest_int nit;
3356 int flags;
3358 if (loop->finite_p)
3360 unsigned i;
3361 auto_vec<edge> exits = get_loop_exit_edges (loop);
3362 edge ex;
3364 /* If the loop has a normal exit, we can assume it will terminate. */
3365 FOR_EACH_VEC_ELT (exits, i, ex)
3366 if (!(ex->flags & (EDGE_EH | EDGE_ABNORMAL | EDGE_FAKE)))
3368 if (dump_file)
3369 fprintf (dump_file, "Assume loop %i to be finite: it has an exit "
3370 "and -ffinite-loops is on or loop was "
3371 "previously finite.\n",
3372 loop->num);
3373 return true;
3377 flags = flags_from_decl_or_type (current_function_decl);
3378 if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE))
3380 if (dump_file && (dump_flags & TDF_DETAILS))
3381 fprintf (dump_file,
3382 "Found loop %i to be finite: it is within "
3383 "pure or const function.\n",
3384 loop->num);
3385 loop->finite_p = true;
3386 return true;
3389 if (loop->any_upper_bound
3390 /* Loop with no normal exit will not pass max_loop_iterations. */
3391 || (!loop->finite_p && max_loop_iterations (loop, &nit)))
3393 if (dump_file && (dump_flags & TDF_DETAILS))
3394 fprintf (dump_file, "Found loop %i to be finite: upper bound found.\n",
3395 loop->num);
3396 loop->finite_p = true;
3397 return true;
3400 return false;
3405 Analysis of a number of iterations of a loop by a brute-force evaluation.
3409 /* Bound on the number of iterations we try to evaluate. */
3411 #define MAX_ITERATIONS_TO_TRACK \
3412 ((unsigned) param_max_iterations_to_track)
3414 /* Returns the loop phi node of LOOP such that ssa name X is derived from its
3415 result by a chain of operations such that all but exactly one of their
3416 operands are constants. */
3418 static gphi *
3419 chain_of_csts_start (class loop *loop, tree x)
3421 gimple *stmt = SSA_NAME_DEF_STMT (x);
3422 tree use;
3423 basic_block bb = gimple_bb (stmt);
3424 enum tree_code code;
3426 if (!bb
3427 || !flow_bb_inside_loop_p (loop, bb))
3428 return NULL;
3430 if (gimple_code (stmt) == GIMPLE_PHI)
3432 if (bb == loop->header)
3433 return as_a <gphi *> (stmt);
3435 return NULL;
3438 if (gimple_code (stmt) != GIMPLE_ASSIGN
3439 || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
3440 return NULL;
3442 code = gimple_assign_rhs_code (stmt);
3443 if (gimple_references_memory_p (stmt)
3444 || TREE_CODE_CLASS (code) == tcc_reference
3445 || (code == ADDR_EXPR
3446 && !is_gimple_min_invariant (gimple_assign_rhs1 (stmt))))
3447 return NULL;
3449 use = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
3450 if (use == NULL_TREE)
3451 return NULL;
3453 return chain_of_csts_start (loop, use);
3456 /* Determines whether the expression X is derived from a result of a phi node
3457 in header of LOOP such that
3459 * the derivation of X consists only from operations with constants
3460 * the initial value of the phi node is constant
3461 * the value of the phi node in the next iteration can be derived from the
3462 value in the current iteration by a chain of operations with constants,
3463 or is also a constant
3465 If such phi node exists, it is returned, otherwise NULL is returned. */
3467 static gphi *
3468 get_base_for (class loop *loop, tree x)
3470 gphi *phi;
3471 tree init, next;
3473 if (is_gimple_min_invariant (x))
3474 return NULL;
3476 phi = chain_of_csts_start (loop, x);
3477 if (!phi)
3478 return NULL;
3480 init = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
3481 next = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
3483 if (!is_gimple_min_invariant (init))
3484 return NULL;
3486 if (TREE_CODE (next) == SSA_NAME
3487 && chain_of_csts_start (loop, next) != phi)
3488 return NULL;
3490 return phi;
3493 /* Given an expression X, then
3495 * if X is NULL_TREE, we return the constant BASE.
3496 * if X is a constant, we return the constant X.
3497 * otherwise X is a SSA name, whose value in the considered loop is derived
3498 by a chain of operations with constant from a result of a phi node in
3499 the header of the loop. Then we return value of X when the value of the
3500 result of this phi node is given by the constant BASE. */
3502 static tree
3503 get_val_for (tree x, tree base)
3505 gimple *stmt;
3507 gcc_checking_assert (is_gimple_min_invariant (base));
3509 if (!x)
3510 return base;
3511 else if (is_gimple_min_invariant (x))
3512 return x;
3514 stmt = SSA_NAME_DEF_STMT (x);
3515 if (gimple_code (stmt) == GIMPLE_PHI)
3516 return base;
3518 gcc_checking_assert (is_gimple_assign (stmt));
3520 /* STMT must be either an assignment of a single SSA name or an
3521 expression involving an SSA name and a constant. Try to fold that
3522 expression using the value for the SSA name. */
3523 if (gimple_assign_ssa_name_copy_p (stmt))
3524 return get_val_for (gimple_assign_rhs1 (stmt), base);
3525 else if (gimple_assign_rhs_class (stmt) == GIMPLE_UNARY_RHS
3526 && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
3527 return fold_build1 (gimple_assign_rhs_code (stmt),
3528 TREE_TYPE (gimple_assign_lhs (stmt)),
3529 get_val_for (gimple_assign_rhs1 (stmt), base));
3530 else if (gimple_assign_rhs_class (stmt) == GIMPLE_BINARY_RHS)
3532 tree rhs1 = gimple_assign_rhs1 (stmt);
3533 tree rhs2 = gimple_assign_rhs2 (stmt);
3534 if (TREE_CODE (rhs1) == SSA_NAME)
3535 rhs1 = get_val_for (rhs1, base);
3536 else if (TREE_CODE (rhs2) == SSA_NAME)
3537 rhs2 = get_val_for (rhs2, base);
3538 else
3539 gcc_unreachable ();
3540 return fold_build2 (gimple_assign_rhs_code (stmt),
3541 TREE_TYPE (gimple_assign_lhs (stmt)), rhs1, rhs2);
3543 else
3544 gcc_unreachable ();
3548 /* Tries to count the number of iterations of LOOP till it exits by EXIT
3549 by brute force -- i.e. by determining the value of the operands of the
3550 condition at EXIT in first few iterations of the loop (assuming that
3551 these values are constant) and determining the first one in that the
3552 condition is not satisfied. Returns the constant giving the number
3553 of the iterations of LOOP if successful, chrec_dont_know otherwise. */
3555 tree
3556 loop_niter_by_eval (class loop *loop, edge exit)
3558 tree acnd;
3559 tree op[2], val[2], next[2], aval[2];
3560 gphi *phi;
3561 unsigned i, j;
3562 enum tree_code cmp;
3564 gcond *cond = safe_dyn_cast <gcond *> (*gsi_last_bb (exit->src));
3565 if (!cond)
3566 return chrec_dont_know;
3568 cmp = gimple_cond_code (cond);
3569 if (exit->flags & EDGE_TRUE_VALUE)
3570 cmp = invert_tree_comparison (cmp, false);
3572 switch (cmp)
3574 case EQ_EXPR:
3575 case NE_EXPR:
3576 case GT_EXPR:
3577 case GE_EXPR:
3578 case LT_EXPR:
3579 case LE_EXPR:
3580 op[0] = gimple_cond_lhs (cond);
3581 op[1] = gimple_cond_rhs (cond);
3582 break;
3584 default:
3585 return chrec_dont_know;
3588 for (j = 0; j < 2; j++)
3590 if (is_gimple_min_invariant (op[j]))
3592 val[j] = op[j];
3593 next[j] = NULL_TREE;
3594 op[j] = NULL_TREE;
3596 else
3598 phi = get_base_for (loop, op[j]);
3599 if (!phi)
3601 gassign *def;
3602 if (j == 0
3603 && (cmp == NE_EXPR || cmp == EQ_EXPR)
3604 && TREE_CODE (op[0]) == SSA_NAME
3605 && TREE_CODE (op[1]) == INTEGER_CST
3606 && (def = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (op[0])))
3607 && gimple_assign_rhs_code (def) == MEM_REF)
3609 tree mem = gimple_assign_rhs1 (def);
3610 affine_iv iv;
3611 if (TYPE_MODE (TREE_TYPE (mem)) == TYPE_MODE (char_type_node)
3612 && simple_iv (loop, loop,
3613 TREE_OPERAND (mem, 0), &iv, false)
3614 && tree_fits_uhwi_p (TREE_OPERAND (mem, 1))
3615 && tree_fits_uhwi_p (iv.step))
3617 tree str, off;
3618 /* iv.base can be &"Foo" but also (char *)&"Foo" + 1. */
3619 split_constant_offset (iv.base, &str, &off);
3620 STRIP_NOPS (str);
3621 if (TREE_CODE (str) == ADDR_EXPR
3622 && TREE_CODE (TREE_OPERAND (str, 0)) == STRING_CST
3623 && tree_fits_uhwi_p (off))
3625 str = TREE_OPERAND (str, 0);
3626 unsigned i = 0;
3627 for (unsigned HOST_WIDE_INT idx
3628 = (tree_to_uhwi (TREE_OPERAND (mem, 1))
3629 + tree_to_uhwi (off));
3630 idx < (unsigned)TREE_STRING_LENGTH (str)
3631 && i < MAX_ITERATIONS_TO_TRACK;
3632 idx += tree_to_uhwi (iv.step), ++i)
3634 int res = compare_tree_int
3635 (op[1], TREE_STRING_POINTER (str)[idx]);
3636 if ((cmp == NE_EXPR && res == 0)
3637 || (cmp == EQ_EXPR && res != 0))
3638 return build_int_cst (unsigned_type_node, i);
3643 return chrec_dont_know;
3645 val[j] = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
3646 next[j] = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
3650 /* Don't issue signed overflow warnings. */
3651 fold_defer_overflow_warnings ();
3653 for (i = 0; i < MAX_ITERATIONS_TO_TRACK; i++)
3655 for (j = 0; j < 2; j++)
3656 aval[j] = get_val_for (op[j], val[j]);
3658 acnd = fold_binary (cmp, boolean_type_node, aval[0], aval[1]);
3659 if (acnd && integer_zerop (acnd))
3661 fold_undefer_and_ignore_overflow_warnings ();
3662 if (dump_file && (dump_flags & TDF_DETAILS))
3663 fprintf (dump_file,
3664 "Proved that loop %d iterates %d times using brute force.\n",
3665 loop->num, i);
3666 return build_int_cst (unsigned_type_node, i);
3669 for (j = 0; j < 2; j++)
3671 aval[j] = val[j];
3672 val[j] = get_val_for (next[j], val[j]);
3673 if (!is_gimple_min_invariant (val[j]))
3675 fold_undefer_and_ignore_overflow_warnings ();
3676 return chrec_dont_know;
3680 /* If the next iteration would use the same base values
3681 as the current one, there is no point looping further,
3682 all following iterations will be the same as this one. */
3683 if (val[0] == aval[0] && val[1] == aval[1])
3684 break;
3687 fold_undefer_and_ignore_overflow_warnings ();
3689 return chrec_dont_know;
3692 /* Finds the exit of the LOOP by that the loop exits after a constant
3693 number of iterations and stores the exit edge to *EXIT. The constant
3694 giving the number of iterations of LOOP is returned. The number of
3695 iterations is determined using loop_niter_by_eval (i.e. by brute force
3696 evaluation). If we are unable to find the exit for that loop_niter_by_eval
3697 determines the number of iterations, chrec_dont_know is returned. */
3699 tree
3700 find_loop_niter_by_eval (class loop *loop, edge *exit)
3702 unsigned i;
3703 auto_vec<edge> exits = get_loop_exit_edges (loop);
3704 edge ex;
3705 tree niter = NULL_TREE, aniter;
3707 *exit = NULL;
3709 /* Loops with multiple exits are expensive to handle and less important. */
3710 if (!flag_expensive_optimizations
3711 && exits.length () > 1)
3712 return chrec_dont_know;
3714 FOR_EACH_VEC_ELT (exits, i, ex)
3716 if (!just_once_each_iteration_p (loop, ex->src))
3717 continue;
3719 aniter = loop_niter_by_eval (loop, ex);
3720 if (chrec_contains_undetermined (aniter))
3721 continue;
3723 if (niter
3724 && !tree_int_cst_lt (aniter, niter))
3725 continue;
3727 niter = aniter;
3728 *exit = ex;
3731 return niter ? niter : chrec_dont_know;
3736 Analysis of upper bounds on number of iterations of a loop.
3740 static widest_int derive_constant_upper_bound_ops (tree, tree,
3741 enum tree_code, tree);
3743 /* Returns a constant upper bound on the value of the right-hand side of
3744 an assignment statement STMT. */
3746 static widest_int
3747 derive_constant_upper_bound_assign (gimple *stmt)
3749 enum tree_code code = gimple_assign_rhs_code (stmt);
3750 tree op0 = gimple_assign_rhs1 (stmt);
3751 tree op1 = gimple_assign_rhs2 (stmt);
3753 return derive_constant_upper_bound_ops (TREE_TYPE (gimple_assign_lhs (stmt)),
3754 op0, code, op1);
3757 /* Returns a constant upper bound on the value of expression VAL. VAL
3758 is considered to be unsigned. If its type is signed, its value must
3759 be nonnegative. */
3761 static widest_int
3762 derive_constant_upper_bound (tree val)
3764 enum tree_code code;
3765 tree op0, op1, op2;
3767 extract_ops_from_tree (val, &code, &op0, &op1, &op2);
3768 return derive_constant_upper_bound_ops (TREE_TYPE (val), op0, code, op1);
3771 /* Returns a constant upper bound on the value of expression OP0 CODE OP1,
3772 whose type is TYPE. The expression is considered to be unsigned. If
3773 its type is signed, its value must be nonnegative. */
3775 static widest_int
3776 derive_constant_upper_bound_ops (tree type, tree op0,
3777 enum tree_code code, tree op1)
3779 tree subtype, maxt;
3780 widest_int bnd, max, cst;
3781 gimple *stmt;
3783 if (INTEGRAL_TYPE_P (type))
3784 maxt = TYPE_MAX_VALUE (type);
3785 else
3786 maxt = upper_bound_in_type (type, type);
3788 max = wi::to_widest (maxt);
3790 switch (code)
3792 case INTEGER_CST:
3793 return wi::to_widest (op0);
3795 CASE_CONVERT:
3796 subtype = TREE_TYPE (op0);
3797 if (!TYPE_UNSIGNED (subtype)
3798 /* If TYPE is also signed, the fact that VAL is nonnegative implies
3799 that OP0 is nonnegative. */
3800 && TYPE_UNSIGNED (type)
3801 && !tree_expr_nonnegative_p (op0))
3803 /* If we cannot prove that the casted expression is nonnegative,
3804 we cannot establish more useful upper bound than the precision
3805 of the type gives us. */
3806 return max;
3809 /* We now know that op0 is an nonnegative value. Try deriving an upper
3810 bound for it. */
3811 bnd = derive_constant_upper_bound (op0);
3813 /* If the bound does not fit in TYPE, max. value of TYPE could be
3814 attained. */
3815 if (wi::ltu_p (max, bnd))
3816 return max;
3818 return bnd;
3820 case PLUS_EXPR:
3821 case POINTER_PLUS_EXPR:
3822 case MINUS_EXPR:
3823 if (TREE_CODE (op1) != INTEGER_CST
3824 || !tree_expr_nonnegative_p (op0))
3825 return max;
3827 /* Canonicalize to OP0 - CST. Consider CST to be signed, in order to
3828 choose the most logical way how to treat this constant regardless
3829 of the signedness of the type. */
3830 cst = wi::sext (wi::to_widest (op1), TYPE_PRECISION (type));
3831 if (code != MINUS_EXPR)
3832 cst = -cst;
3834 bnd = derive_constant_upper_bound (op0);
3836 if (wi::neg_p (cst))
3838 cst = -cst;
3839 /* Avoid CST == 0x80000... */
3840 if (wi::neg_p (cst))
3841 return max;
3843 /* OP0 + CST. We need to check that
3844 BND <= MAX (type) - CST. */
3846 widest_int mmax = max - cst;
3847 if (wi::leu_p (bnd, mmax))
3848 return max;
3850 return bnd + cst;
3852 else
3854 /* OP0 - CST, where CST >= 0.
3856 If TYPE is signed, we have already verified that OP0 >= 0, and we
3857 know that the result is nonnegative. This implies that
3858 VAL <= BND - CST.
3860 If TYPE is unsigned, we must additionally know that OP0 >= CST,
3861 otherwise the operation underflows.
3864 /* This should only happen if the type is unsigned; however, for
3865 buggy programs that use overflowing signed arithmetics even with
3866 -fno-wrapv, this condition may also be true for signed values. */
3867 if (wi::ltu_p (bnd, cst))
3868 return max;
3870 if (TYPE_UNSIGNED (type))
3872 tree tem = fold_binary (GE_EXPR, boolean_type_node, op0,
3873 wide_int_to_tree (type, cst));
3874 if (!tem || integer_nonzerop (tem))
3875 return max;
3878 bnd -= cst;
3881 return bnd;
3883 case FLOOR_DIV_EXPR:
3884 case EXACT_DIV_EXPR:
3885 if (TREE_CODE (op1) != INTEGER_CST
3886 || tree_int_cst_sign_bit (op1))
3887 return max;
3889 bnd = derive_constant_upper_bound (op0);
3890 return wi::udiv_floor (bnd, wi::to_widest (op1));
3892 case BIT_AND_EXPR:
3893 if (TREE_CODE (op1) != INTEGER_CST
3894 || tree_int_cst_sign_bit (op1))
3895 return max;
3896 return wi::to_widest (op1);
3898 case SSA_NAME:
3899 stmt = SSA_NAME_DEF_STMT (op0);
3900 if (gimple_code (stmt) != GIMPLE_ASSIGN
3901 || gimple_assign_lhs (stmt) != op0)
3902 return max;
3903 return derive_constant_upper_bound_assign (stmt);
3905 default:
3906 return max;
3910 /* Emit a -Waggressive-loop-optimizations warning if needed. */
3912 static void
3913 do_warn_aggressive_loop_optimizations (class loop *loop,
3914 widest_int i_bound, gimple *stmt)
3916 /* Don't warn if the loop doesn't have known constant bound. */
3917 if (!loop->nb_iterations
3918 || TREE_CODE (loop->nb_iterations) != INTEGER_CST
3919 || !warn_aggressive_loop_optimizations
3920 /* To avoid warning multiple times for the same loop,
3921 only start warning when we preserve loops. */
3922 || (cfun->curr_properties & PROP_loops) == 0
3923 /* Only warn once per loop. */
3924 || loop->warned_aggressive_loop_optimizations
3925 /* Only warn if undefined behavior gives us lower estimate than the
3926 known constant bound. */
3927 || wi::cmpu (i_bound, wi::to_widest (loop->nb_iterations)) >= 0
3928 /* And undefined behavior happens unconditionally. */
3929 || !dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (stmt)))
3930 return;
3932 edge e = single_exit (loop);
3933 if (e == NULL)
3934 return;
3936 gimple *estmt = last_nondebug_stmt (e->src);
3937 char buf[WIDE_INT_PRINT_BUFFER_SIZE], *p;
3938 unsigned len;
3939 if (print_dec_buf_size (i_bound, TYPE_SIGN (TREE_TYPE (loop->nb_iterations)),
3940 &len))
3941 p = XALLOCAVEC (char, len);
3942 else
3943 p = buf;
3944 print_dec (i_bound, p, TYPE_SIGN (TREE_TYPE (loop->nb_iterations)));
3945 auto_diagnostic_group d;
3946 if (warning_at (gimple_location (stmt), OPT_Waggressive_loop_optimizations,
3947 "iteration %s invokes undefined behavior", p))
3948 inform (gimple_location (estmt), "within this loop");
3949 loop->warned_aggressive_loop_optimizations = true;
3952 /* Records that AT_STMT is executed at most BOUND + 1 times in LOOP. IS_EXIT
3953 is true if the loop is exited immediately after STMT, and this exit
3954 is taken at last when the STMT is executed BOUND + 1 times.
3955 REALISTIC is true if BOUND is expected to be close to the real number
3956 of iterations. UPPER is true if we are sure the loop iterates at most
3957 BOUND times. I_BOUND is a widest_int upper estimate on BOUND. */
3959 static void
3960 record_estimate (class loop *loop, tree bound, const widest_int &i_bound,
3961 gimple *at_stmt, bool is_exit, bool realistic, bool upper)
3963 widest_int delta;
3965 if (dump_file && (dump_flags & TDF_DETAILS))
3967 fprintf (dump_file, "Statement %s", is_exit ? "(exit)" : "");
3968 print_gimple_stmt (dump_file, at_stmt, 0, TDF_SLIM);
3969 fprintf (dump_file, " is %sexecuted at most ",
3970 upper ? "" : "probably ");
3971 print_generic_expr (dump_file, bound, TDF_SLIM);
3972 fprintf (dump_file, " (bounded by ");
3973 print_decu (i_bound, dump_file);
3974 fprintf (dump_file, ") + 1 times in loop %d.\n", loop->num);
3977 /* If the I_BOUND is just an estimate of BOUND, it rarely is close to the
3978 real number of iterations. */
3979 if (TREE_CODE (bound) != INTEGER_CST)
3980 realistic = false;
3981 else
3982 gcc_checking_assert (i_bound == wi::to_widest (bound));
3984 if (wi::min_precision (i_bound, SIGNED) > bound_wide_int ().get_precision ())
3985 return;
3987 /* If we have a guaranteed upper bound, record it in the appropriate
3988 list, unless this is an !is_exit bound (i.e. undefined behavior in
3989 at_stmt) in a loop with known constant number of iterations. */
3990 if (upper
3991 && (is_exit
3992 || loop->nb_iterations == NULL_TREE
3993 || TREE_CODE (loop->nb_iterations) != INTEGER_CST))
3995 class nb_iter_bound *elt = ggc_alloc<nb_iter_bound> ();
3997 elt->bound = bound_wide_int::from (i_bound, SIGNED);
3998 elt->stmt = at_stmt;
3999 elt->is_exit = is_exit;
4000 elt->next = loop->bounds;
4001 loop->bounds = elt;
4004 /* If statement is executed on every path to the loop latch, we can directly
4005 infer the upper bound on the # of iterations of the loop. */
4006 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (at_stmt)))
4007 upper = false;
4009 /* Update the number of iteration estimates according to the bound.
4010 If at_stmt is an exit then the loop latch is executed at most BOUND times,
4011 otherwise it can be executed BOUND + 1 times. We will lower the estimate
4012 later if such statement must be executed on last iteration */
4013 if (is_exit)
4014 delta = 0;
4015 else
4016 delta = 1;
4017 widest_int new_i_bound = i_bound + delta;
4019 /* If an overflow occurred, ignore the result. */
4020 if (wi::ltu_p (new_i_bound, delta))
4021 return;
4023 if (upper && !is_exit)
4024 do_warn_aggressive_loop_optimizations (loop, new_i_bound, at_stmt);
4025 record_niter_bound (loop, new_i_bound, realistic, upper);
4028 /* Records the control iv analyzed in NITER for LOOP if the iv is valid
4029 and doesn't overflow. */
4031 static void
4032 record_control_iv (class loop *loop, class tree_niter_desc *niter)
4034 struct control_iv *iv;
4036 if (!niter->control.base || !niter->control.step)
4037 return;
4039 if (!integer_onep (niter->assumptions) || !niter->control.no_overflow)
4040 return;
4042 iv = ggc_alloc<control_iv> ();
4043 iv->base = niter->control.base;
4044 iv->step = niter->control.step;
4045 iv->next = loop->control_ivs;
4046 loop->control_ivs = iv;
4048 return;
4051 /* This function returns TRUE if below conditions are satisfied:
4052 1) VAR is SSA variable.
4053 2) VAR is an IV:{base, step} in its defining loop.
4054 3) IV doesn't overflow.
4055 4) Both base and step are integer constants.
4056 5) Base is the MIN/MAX value depends on IS_MIN.
4057 Store value of base to INIT correspondingly. */
4059 static bool
4060 get_cst_init_from_scev (tree var, wide_int *init, bool is_min)
4062 if (TREE_CODE (var) != SSA_NAME)
4063 return false;
4065 gimple *def_stmt = SSA_NAME_DEF_STMT (var);
4066 class loop *loop = loop_containing_stmt (def_stmt);
4068 if (loop == NULL)
4069 return false;
4071 affine_iv iv;
4072 if (!simple_iv (loop, loop, var, &iv, false))
4073 return false;
4075 if (!iv.no_overflow)
4076 return false;
4078 if (TREE_CODE (iv.base) != INTEGER_CST || TREE_CODE (iv.step) != INTEGER_CST)
4079 return false;
4081 if (is_min == tree_int_cst_sign_bit (iv.step))
4082 return false;
4084 *init = wi::to_wide (iv.base);
4085 return true;
4088 /* Record the estimate on number of iterations of LOOP based on the fact that
4089 the induction variable BASE + STEP * i evaluated in STMT does not wrap and
4090 its values belong to the range <LOW, HIGH>. REALISTIC is true if the
4091 estimated number of iterations is expected to be close to the real one.
4092 UPPER is true if we are sure the induction variable does not wrap. */
4094 static void
4095 record_nonwrapping_iv (class loop *loop, tree base, tree step, gimple *stmt,
4096 tree low, tree high, bool realistic, bool upper)
4098 tree niter_bound, extreme, delta;
4099 tree type = TREE_TYPE (base), unsigned_type;
4100 tree orig_base = base;
4102 if (TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
4103 return;
4105 if (dump_file && (dump_flags & TDF_DETAILS))
4107 fprintf (dump_file, "Induction variable (");
4108 print_generic_expr (dump_file, TREE_TYPE (base), TDF_SLIM);
4109 fprintf (dump_file, ") ");
4110 print_generic_expr (dump_file, base, TDF_SLIM);
4111 fprintf (dump_file, " + ");
4112 print_generic_expr (dump_file, step, TDF_SLIM);
4113 fprintf (dump_file, " * iteration does not wrap in statement ");
4114 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
4115 fprintf (dump_file, " in loop %d.\n", loop->num);
4118 unsigned_type = unsigned_type_for (type);
4119 base = fold_convert (unsigned_type, base);
4120 step = fold_convert (unsigned_type, step);
4122 if (tree_int_cst_sign_bit (step))
4124 wide_int max;
4125 value_range base_range (TREE_TYPE (orig_base));
4126 if (get_range_query (cfun)->range_of_expr (base_range, orig_base)
4127 && !base_range.undefined_p ())
4128 max = wi::to_wide (base_range.ubound ());
4129 extreme = fold_convert (unsigned_type, low);
4130 if (TREE_CODE (orig_base) == SSA_NAME
4131 && TREE_CODE (high) == INTEGER_CST
4132 && INTEGRAL_TYPE_P (TREE_TYPE (orig_base))
4133 && ((!base_range.varying_p ()
4134 && !base_range.undefined_p ())
4135 || get_cst_init_from_scev (orig_base, &max, false))
4136 && wi::gts_p (wi::to_wide (high), max))
4137 base = wide_int_to_tree (unsigned_type, max);
4138 else if (TREE_CODE (base) != INTEGER_CST
4139 && dominated_by_p (CDI_DOMINATORS,
4140 loop->latch, gimple_bb (stmt)))
4141 base = fold_convert (unsigned_type, high);
4142 delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
4143 step = fold_build1 (NEGATE_EXPR, unsigned_type, step);
4145 else
4147 wide_int min;
4148 value_range base_range (TREE_TYPE (orig_base));
4149 if (get_range_query (cfun)->range_of_expr (base_range, orig_base)
4150 && !base_range.undefined_p ())
4151 min = wi::to_wide (base_range.lbound ());
4152 extreme = fold_convert (unsigned_type, high);
4153 if (TREE_CODE (orig_base) == SSA_NAME
4154 && TREE_CODE (low) == INTEGER_CST
4155 && INTEGRAL_TYPE_P (TREE_TYPE (orig_base))
4156 && ((!base_range.varying_p ()
4157 && !base_range.undefined_p ())
4158 || get_cst_init_from_scev (orig_base, &min, true))
4159 && wi::gts_p (min, wi::to_wide (low)))
4160 base = wide_int_to_tree (unsigned_type, min);
4161 else if (TREE_CODE (base) != INTEGER_CST
4162 && dominated_by_p (CDI_DOMINATORS,
4163 loop->latch, gimple_bb (stmt)))
4164 base = fold_convert (unsigned_type, low);
4165 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
4168 /* STMT is executed at most NITER_BOUND + 1 times, since otherwise the value
4169 would get out of the range. */
4170 niter_bound = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step);
4171 widest_int max = derive_constant_upper_bound (niter_bound);
4172 record_estimate (loop, niter_bound, max, stmt, false, realistic, upper);
4175 /* Determine information about number of iterations a LOOP from the index
4176 IDX of a data reference accessed in STMT. RELIABLE is true if STMT is
4177 guaranteed to be executed in every iteration of LOOP. Callback for
4178 for_each_index. */
4180 struct ilb_data
4182 class loop *loop;
4183 gimple *stmt;
4186 static bool
4187 idx_infer_loop_bounds (tree base, tree *idx, void *dta)
4189 struct ilb_data *data = (struct ilb_data *) dta;
4190 tree ev, init, step;
4191 tree low, high, type, next;
4192 bool sign, upper = true, has_flexible_size = false;
4193 class loop *loop = data->loop;
4195 if (TREE_CODE (base) != ARRAY_REF)
4196 return true;
4198 /* For arrays that might have flexible sizes, it is not guaranteed that they
4199 do not really extend over their declared size. */
4200 if (array_ref_flexible_size_p (base))
4202 has_flexible_size = true;
4203 upper = false;
4206 class loop *dloop = loop_containing_stmt (data->stmt);
4207 if (!dloop)
4208 return true;
4210 ev = analyze_scalar_evolution (dloop, *idx);
4211 ev = instantiate_parameters (loop, ev);
4212 init = initial_condition (ev);
4213 step = evolution_part_in_loop_num (ev, loop->num);
4215 if (!init
4216 || !step
4217 || TREE_CODE (step) != INTEGER_CST
4218 || integer_zerop (step)
4219 || tree_contains_chrecs (init, NULL)
4220 || chrec_contains_symbols_defined_in_loop (init, loop->num))
4221 return true;
4223 low = array_ref_low_bound (base);
4224 high = array_ref_up_bound (base);
4226 /* The case of nonconstant bounds could be handled, but it would be
4227 complicated. */
4228 if (TREE_CODE (low) != INTEGER_CST
4229 || !high
4230 || TREE_CODE (high) != INTEGER_CST)
4231 return true;
4232 sign = tree_int_cst_sign_bit (step);
4233 type = TREE_TYPE (step);
4235 /* The array that might have flexible size most likely extends
4236 beyond its bounds. */
4237 if (has_flexible_size
4238 && operand_equal_p (low, high, 0))
4239 return true;
4241 /* In case the relevant bound of the array does not fit in type, or
4242 it does, but bound + step (in type) still belongs into the range of the
4243 array, the index may wrap and still stay within the range of the array
4244 (consider e.g. if the array is indexed by the full range of
4245 unsigned char).
4247 To make things simpler, we require both bounds to fit into type, although
4248 there are cases where this would not be strictly necessary. */
4249 if (!int_fits_type_p (high, type)
4250 || !int_fits_type_p (low, type))
4251 return true;
4252 low = fold_convert (type, low);
4253 high = fold_convert (type, high);
4255 if (sign)
4256 next = fold_binary (PLUS_EXPR, type, low, step);
4257 else
4258 next = fold_binary (PLUS_EXPR, type, high, step);
4260 if (tree_int_cst_compare (low, next) <= 0
4261 && tree_int_cst_compare (next, high) <= 0)
4262 return true;
4264 /* If access is not executed on every iteration, we must ensure that overlow
4265 may not make the access valid later. */
4266 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (data->stmt)))
4268 if (scev_probably_wraps_p (NULL_TREE,
4269 initial_condition_in_loop_num (ev, loop->num),
4270 step, data->stmt, loop, true))
4271 upper = false;
4273 else
4274 record_nonwrapping_chrec (ev);
4276 record_nonwrapping_iv (loop, init, step, data->stmt, low, high, false, upper);
4277 return true;
4280 /* Determine information about number of iterations a LOOP from the bounds
4281 of arrays in the data reference REF accessed in STMT. RELIABLE is true if
4282 STMT is guaranteed to be executed in every iteration of LOOP.*/
4284 static void
4285 infer_loop_bounds_from_ref (class loop *loop, gimple *stmt, tree ref)
4287 struct ilb_data data;
4289 data.loop = loop;
4290 data.stmt = stmt;
4291 for_each_index (&ref, idx_infer_loop_bounds, &data);
4294 /* Determine information about number of iterations of a LOOP from the way
4295 arrays are used in STMT. RELIABLE is true if STMT is guaranteed to be
4296 executed in every iteration of LOOP. */
4298 static void
4299 infer_loop_bounds_from_array (class loop *loop, gimple *stmt)
4301 if (is_gimple_assign (stmt))
4303 tree op0 = gimple_assign_lhs (stmt);
4304 tree op1 = gimple_assign_rhs1 (stmt);
4306 /* For each memory access, analyze its access function
4307 and record a bound on the loop iteration domain. */
4308 if (REFERENCE_CLASS_P (op0))
4309 infer_loop_bounds_from_ref (loop, stmt, op0);
4311 if (REFERENCE_CLASS_P (op1))
4312 infer_loop_bounds_from_ref (loop, stmt, op1);
4314 else if (is_gimple_call (stmt))
4316 tree arg, lhs;
4317 unsigned i, n = gimple_call_num_args (stmt);
4319 lhs = gimple_call_lhs (stmt);
4320 if (lhs && REFERENCE_CLASS_P (lhs))
4321 infer_loop_bounds_from_ref (loop, stmt, lhs);
4323 for (i = 0; i < n; i++)
4325 arg = gimple_call_arg (stmt, i);
4326 if (REFERENCE_CLASS_P (arg))
4327 infer_loop_bounds_from_ref (loop, stmt, arg);
4332 /* Determine information about number of iterations of a LOOP from the fact
4333 that pointer arithmetics in STMT does not overflow. */
4335 static void
4336 infer_loop_bounds_from_pointer_arith (class loop *loop, gimple *stmt)
4338 tree def, base, step, scev, type, low, high;
4339 tree var, ptr;
4341 if (!is_gimple_assign (stmt)
4342 || gimple_assign_rhs_code (stmt) != POINTER_PLUS_EXPR)
4343 return;
4345 def = gimple_assign_lhs (stmt);
4346 if (TREE_CODE (def) != SSA_NAME)
4347 return;
4349 type = TREE_TYPE (def);
4350 if (!nowrap_type_p (type))
4351 return;
4353 ptr = gimple_assign_rhs1 (stmt);
4354 if (!expr_invariant_in_loop_p (loop, ptr))
4355 return;
4357 var = gimple_assign_rhs2 (stmt);
4358 if (TYPE_PRECISION (type) != TYPE_PRECISION (TREE_TYPE (var)))
4359 return;
4361 class loop *uloop = loop_containing_stmt (stmt);
4362 scev = instantiate_parameters (loop, analyze_scalar_evolution (uloop, def));
4363 if (chrec_contains_undetermined (scev))
4364 return;
4366 base = initial_condition_in_loop_num (scev, loop->num);
4367 step = evolution_part_in_loop_num (scev, loop->num);
4369 if (!base || !step
4370 || TREE_CODE (step) != INTEGER_CST
4371 || tree_contains_chrecs (base, NULL)
4372 || chrec_contains_symbols_defined_in_loop (base, loop->num))
4373 return;
4375 low = lower_bound_in_type (type, type);
4376 high = upper_bound_in_type (type, type);
4378 /* In C, pointer arithmetic p + 1 cannot use a NULL pointer, and p - 1 cannot
4379 produce a NULL pointer. The contrary would mean NULL points to an object,
4380 while NULL is supposed to compare unequal with the address of all objects.
4381 Furthermore, p + 1 cannot produce a NULL pointer and p - 1 cannot use a
4382 NULL pointer since that would mean wrapping, which we assume here not to
4383 happen. So, we can exclude NULL from the valid range of pointer
4384 arithmetic. */
4385 if (flag_delete_null_pointer_checks && int_cst_value (low) == 0)
4386 low = build_int_cstu (TREE_TYPE (low), TYPE_ALIGN_UNIT (TREE_TYPE (type)));
4388 record_nonwrapping_chrec (scev);
4389 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
4392 /* Determine information about number of iterations of a LOOP from the fact
4393 that signed arithmetics in STMT does not overflow. */
4395 static void
4396 infer_loop_bounds_from_signedness (class loop *loop, gimple *stmt)
4398 tree def, base, step, scev, type, low, high;
4400 if (gimple_code (stmt) != GIMPLE_ASSIGN)
4401 return;
4403 def = gimple_assign_lhs (stmt);
4405 if (TREE_CODE (def) != SSA_NAME)
4406 return;
4408 type = TREE_TYPE (def);
4409 if (!INTEGRAL_TYPE_P (type)
4410 || !TYPE_OVERFLOW_UNDEFINED (type))
4411 return;
4413 scev = instantiate_parameters (loop, analyze_scalar_evolution (loop, def));
4414 if (chrec_contains_undetermined (scev))
4415 return;
4417 base = initial_condition_in_loop_num (scev, loop->num);
4418 step = evolution_part_in_loop_num (scev, loop->num);
4420 if (!base || !step
4421 || TREE_CODE (step) != INTEGER_CST
4422 || tree_contains_chrecs (base, NULL)
4423 || chrec_contains_symbols_defined_in_loop (base, loop->num))
4424 return;
4426 low = lower_bound_in_type (type, type);
4427 high = upper_bound_in_type (type, type);
4428 int_range_max r (TREE_TYPE (def));
4429 get_range_query (cfun)->range_of_expr (r, def);
4430 if (!r.varying_p () && !r.undefined_p ())
4432 low = wide_int_to_tree (type, r.lower_bound ());
4433 high = wide_int_to_tree (type, r.upper_bound ());
4436 record_nonwrapping_chrec (scev);
4437 record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
4440 /* The following analyzers are extracting informations on the bounds
4441 of LOOP from the following undefined behaviors:
4443 - data references should not access elements over the statically
4444 allocated size,
4446 - signed variables should not overflow when flag_wrapv is not set.
4449 static void
4450 infer_loop_bounds_from_undefined (class loop *loop, basic_block *bbs)
4452 unsigned i;
4453 gimple_stmt_iterator bsi;
4454 basic_block bb;
4455 bool reliable;
4457 for (i = 0; i < loop->num_nodes; i++)
4459 bb = bbs[i];
4461 /* If BB is not executed in each iteration of the loop, we cannot
4462 use the operations in it to infer reliable upper bound on the
4463 # of iterations of the loop. However, we can use it as a guess.
4464 Reliable guesses come only from array bounds. */
4465 reliable = dominated_by_p (CDI_DOMINATORS, loop->latch, bb);
4467 for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
4469 gimple *stmt = gsi_stmt (bsi);
4471 infer_loop_bounds_from_array (loop, stmt);
4473 if (reliable)
4475 infer_loop_bounds_from_signedness (loop, stmt);
4476 infer_loop_bounds_from_pointer_arith (loop, stmt);
4483 /* Compare wide ints, callback for qsort. */
4485 static int
4486 wide_int_cmp (const void *p1, const void *p2)
4488 const bound_wide_int *d1 = (const bound_wide_int *) p1;
4489 const bound_wide_int *d2 = (const bound_wide_int *) p2;
4490 return wi::cmpu (*d1, *d2);
4493 /* Return index of BOUND in BOUNDS array sorted in increasing order.
4494 Lookup by binary search. */
4496 static int
4497 bound_index (const vec<bound_wide_int> &bounds, const bound_wide_int &bound)
4499 unsigned int end = bounds.length ();
4500 unsigned int begin = 0;
4502 /* Find a matching index by means of a binary search. */
4503 while (begin != end)
4505 unsigned int middle = (begin + end) / 2;
4506 bound_wide_int index = bounds[middle];
4508 if (index == bound)
4509 return middle;
4510 else if (wi::ltu_p (index, bound))
4511 begin = middle + 1;
4512 else
4513 end = middle;
4515 gcc_unreachable ();
4518 /* We recorded loop bounds only for statements dominating loop latch (and thus
4519 executed each loop iteration). If there are any bounds on statements not
4520 dominating the loop latch we can improve the estimate by walking the loop
4521 body and seeing if every path from loop header to loop latch contains
4522 some bounded statement. */
4524 static void
4525 discover_iteration_bound_by_body_walk (class loop *loop)
4527 class nb_iter_bound *elt;
4528 auto_vec<bound_wide_int> bounds;
4529 vec<vec<basic_block> > queues = vNULL;
4530 vec<basic_block> queue = vNULL;
4531 ptrdiff_t queue_index;
4532 ptrdiff_t latch_index = 0;
4534 /* Discover what bounds may interest us. */
4535 for (elt = loop->bounds; elt; elt = elt->next)
4537 bound_wide_int bound = elt->bound;
4539 /* Exit terminates loop at given iteration, while non-exits produce undefined
4540 effect on the next iteration. */
4541 if (!elt->is_exit)
4543 bound += 1;
4544 /* If an overflow occurred, ignore the result. */
4545 if (bound == 0)
4546 continue;
4549 if (!loop->any_upper_bound
4550 || wi::ltu_p (bound, loop->nb_iterations_upper_bound))
4551 bounds.safe_push (bound);
4554 /* Exit early if there is nothing to do. */
4555 if (!bounds.exists ())
4556 return;
4558 if (dump_file && (dump_flags & TDF_DETAILS))
4559 fprintf (dump_file, " Trying to walk loop body to reduce the bound.\n");
4561 /* Sort the bounds in decreasing order. */
4562 bounds.qsort (wide_int_cmp);
4564 /* For every basic block record the lowest bound that is guaranteed to
4565 terminate the loop. */
4567 hash_map<basic_block, ptrdiff_t> bb_bounds;
4568 for (elt = loop->bounds; elt; elt = elt->next)
4570 bound_wide_int bound = elt->bound;
4571 if (!elt->is_exit)
4573 bound += 1;
4574 /* If an overflow occurred, ignore the result. */
4575 if (bound == 0)
4576 continue;
4579 if (!loop->any_upper_bound
4580 || wi::ltu_p (bound, loop->nb_iterations_upper_bound))
4582 ptrdiff_t index = bound_index (bounds, bound);
4583 ptrdiff_t *entry = bb_bounds.get (gimple_bb (elt->stmt));
4584 if (!entry)
4585 bb_bounds.put (gimple_bb (elt->stmt), index);
4586 else if ((ptrdiff_t)*entry > index)
4587 *entry = index;
4591 hash_map<basic_block, ptrdiff_t> block_priority;
4593 /* Perform shortest path discovery loop->header ... loop->latch.
4595 The "distance" is given by the smallest loop bound of basic block
4596 present in the path and we look for path with largest smallest bound
4597 on it.
4599 To avoid the need for fibonacci heap on double ints we simply compress
4600 double ints into indexes to BOUNDS array and then represent the queue
4601 as arrays of queues for every index.
4602 Index of BOUNDS.length() means that the execution of given BB has
4603 no bounds determined.
4605 VISITED is a pointer map translating basic block into smallest index
4606 it was inserted into the priority queue with. */
4607 latch_index = -1;
4609 /* Start walk in loop header with index set to infinite bound. */
4610 queue_index = bounds.length ();
4611 queues.safe_grow_cleared (queue_index + 1, true);
4612 queue.safe_push (loop->header);
4613 queues[queue_index] = queue;
4614 block_priority.put (loop->header, queue_index);
4616 for (; queue_index >= 0; queue_index--)
4618 if (latch_index < queue_index)
4620 while (queues[queue_index].length ())
4622 basic_block bb;
4623 ptrdiff_t bound_index = queue_index;
4624 edge e;
4625 edge_iterator ei;
4627 queue = queues[queue_index];
4628 bb = queue.pop ();
4630 /* OK, we later inserted the BB with lower priority, skip it. */
4631 if (*block_priority.get (bb) > queue_index)
4632 continue;
4634 /* See if we can improve the bound. */
4635 ptrdiff_t *entry = bb_bounds.get (bb);
4636 if (entry && *entry < bound_index)
4637 bound_index = *entry;
4639 /* Insert succesors into the queue, watch for latch edge
4640 and record greatest index we saw. */
4641 FOR_EACH_EDGE (e, ei, bb->succs)
4643 bool insert = false;
4645 if (loop_exit_edge_p (loop, e))
4646 continue;
4648 if (e == loop_latch_edge (loop)
4649 && latch_index < bound_index)
4650 latch_index = bound_index;
4651 else if (!(entry = block_priority.get (e->dest)))
4653 insert = true;
4654 block_priority.put (e->dest, bound_index);
4656 else if (*entry < bound_index)
4658 insert = true;
4659 *entry = bound_index;
4662 if (insert)
4663 queues[bound_index].safe_push (e->dest);
4667 queues[queue_index].release ();
4670 gcc_assert (latch_index >= 0);
4671 if ((unsigned)latch_index < bounds.length ())
4673 if (dump_file && (dump_flags & TDF_DETAILS))
4675 fprintf (dump_file, "Found better loop bound ");
4676 print_decu (bounds[latch_index], dump_file);
4677 fprintf (dump_file, "\n");
4679 record_niter_bound (loop, widest_int::from (bounds[latch_index],
4680 SIGNED), false, true);
4683 queues.release ();
4686 /* See if every path cross the loop goes through a statement that is known
4687 to not execute at the last iteration. In that case we can decrese iteration
4688 count by 1. */
4690 static void
4691 maybe_lower_iteration_bound (class loop *loop)
4693 hash_set<gimple *> *not_executed_last_iteration = NULL;
4694 class nb_iter_bound *elt;
4695 bool found_exit = false;
4696 auto_vec<basic_block> queue;
4697 bitmap visited;
4699 /* Collect all statements with interesting (i.e. lower than
4700 nb_iterations_upper_bound) bound on them.
4702 TODO: Due to the way record_estimate choose estimates to store, the bounds
4703 will be always nb_iterations_upper_bound-1. We can change this to record
4704 also statements not dominating the loop latch and update the walk bellow
4705 to the shortest path algorithm. */
4706 for (elt = loop->bounds; elt; elt = elt->next)
4708 if (!elt->is_exit
4709 && wi::ltu_p (elt->bound, loop->nb_iterations_upper_bound))
4711 if (!not_executed_last_iteration)
4712 not_executed_last_iteration = new hash_set<gimple *>;
4713 not_executed_last_iteration->add (elt->stmt);
4716 if (!not_executed_last_iteration)
4717 return;
4719 /* Start DFS walk in the loop header and see if we can reach the
4720 loop latch or any of the exits (including statements with side
4721 effects that may terminate the loop otherwise) without visiting
4722 any of the statements known to have undefined effect on the last
4723 iteration. */
4724 queue.safe_push (loop->header);
4725 visited = BITMAP_ALLOC (NULL);
4726 bitmap_set_bit (visited, loop->header->index);
4727 found_exit = false;
4731 basic_block bb = queue.pop ();
4732 gimple_stmt_iterator gsi;
4733 bool stmt_found = false;
4735 /* Loop for possible exits and statements bounding the execution. */
4736 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
4738 gimple *stmt = gsi_stmt (gsi);
4739 if (not_executed_last_iteration->contains (stmt))
4741 stmt_found = true;
4742 break;
4744 if (gimple_has_side_effects (stmt))
4746 found_exit = true;
4747 break;
4750 if (found_exit)
4751 break;
4753 /* If no bounding statement is found, continue the walk. */
4754 if (!stmt_found)
4756 edge e;
4757 edge_iterator ei;
4759 FOR_EACH_EDGE (e, ei, bb->succs)
4761 if (loop_exit_edge_p (loop, e)
4762 || e == loop_latch_edge (loop)
4763 /* When exiting an inner loop, verify it is finite. */
4764 || (!flow_bb_inside_loop_p (bb->loop_father, e->dest)
4765 && !finite_loop_p (bb->loop_father))
4766 /* When we enter an irreducible region and the entry
4767 does not contain a bounding stmt assume it might be
4768 infinite. */
4769 || (bb->flags & BB_IRREDUCIBLE_LOOP))
4771 found_exit = true;
4772 break;
4774 if (bitmap_set_bit (visited, e->dest->index))
4775 queue.safe_push (e->dest);
4779 while (queue.length () && !found_exit);
4781 /* If every path through the loop reach bounding statement before exit,
4782 then we know the last iteration of the loop will have undefined effect
4783 and we can decrease number of iterations. */
4785 if (!found_exit)
4787 if (dump_file && (dump_flags & TDF_DETAILS))
4788 fprintf (dump_file, "Reducing loop iteration estimate by 1; "
4789 "undefined statement must be executed at the last iteration.\n");
4790 record_niter_bound (loop, widest_int::from (loop->nb_iterations_upper_bound,
4791 SIGNED) - 1,
4792 false, true);
4795 BITMAP_FREE (visited);
4796 delete not_executed_last_iteration;
4799 /* Get expected upper bound for number of loop iterations for
4800 BUILT_IN_EXPECT_WITH_PROBABILITY for a condition COND. */
4802 static tree
4803 get_upper_bound_based_on_builtin_expr_with_prob (gcond *cond)
4805 if (cond == NULL)
4806 return NULL_TREE;
4808 tree lhs = gimple_cond_lhs (cond);
4809 if (TREE_CODE (lhs) != SSA_NAME)
4810 return NULL_TREE;
4812 gimple *stmt = SSA_NAME_DEF_STMT (gimple_cond_lhs (cond));
4813 gcall *def = dyn_cast<gcall *> (stmt);
4814 if (def == NULL)
4815 return NULL_TREE;
4817 tree decl = gimple_call_fndecl (def);
4818 if (!decl
4819 || !fndecl_built_in_p (decl, BUILT_IN_EXPECT_WITH_PROBABILITY)
4820 || gimple_call_num_args (stmt) != 3)
4821 return NULL_TREE;
4823 tree c = gimple_call_arg (def, 1);
4824 tree condt = TREE_TYPE (lhs);
4825 tree res = fold_build2 (gimple_cond_code (cond),
4826 condt, c,
4827 gimple_cond_rhs (cond));
4828 if (TREE_CODE (res) != INTEGER_CST)
4829 return NULL_TREE;
4832 tree prob = gimple_call_arg (def, 2);
4833 tree t = TREE_TYPE (prob);
4834 tree one
4835 = build_real_from_int_cst (t,
4836 integer_one_node);
4837 if (integer_zerop (res))
4838 prob = fold_build2 (MINUS_EXPR, t, one, prob);
4839 tree r = fold_build2 (RDIV_EXPR, t, one, prob);
4840 if (TREE_CODE (r) != REAL_CST)
4841 return NULL_TREE;
4843 HOST_WIDE_INT probi
4844 = real_to_integer (TREE_REAL_CST_PTR (r));
4845 return build_int_cst (condt, probi);
4848 /* Records estimates on numbers of iterations of LOOP. If USE_UNDEFINED_P
4849 is true also use estimates derived from undefined behavior. */
4851 void
4852 estimate_numbers_of_iterations (class loop *loop)
4854 tree niter, type;
4855 unsigned i;
4856 class tree_niter_desc niter_desc;
4857 edge ex;
4858 widest_int bound;
4859 edge likely_exit;
4861 /* Give up if we already have tried to compute an estimation. */
4862 if (loop->estimate_state != EST_NOT_COMPUTED)
4863 return;
4865 if (dump_file && (dump_flags & TDF_DETAILS))
4866 fprintf (dump_file, "Estimating # of iterations of loop %d\n", loop->num);
4868 loop->estimate_state = EST_AVAILABLE;
4870 sreal nit;
4871 bool reliable;
4873 /* If we have a measured profile, use it to estimate the number of
4874 iterations. Normally this is recorded by branch_prob right after
4875 reading the profile. In case we however found a new loop, record the
4876 information here.
4878 Explicitly check for profile status so we do not report
4879 wrong prediction hitrates for guessed loop iterations heuristics.
4880 Do not recompute already recorded bounds - we ought to be better on
4881 updating iteration bounds than updating profile in general and thus
4882 recomputing iteration bounds later in the compilation process will just
4883 introduce random roundoff errors. */
4884 if (!loop->any_estimate
4885 && expected_loop_iterations_by_profile (loop, &nit, &reliable)
4886 && reliable)
4888 bound = nit.to_nearest_int ();
4889 record_niter_bound (loop, bound, true, false);
4892 /* Ensure that loop->nb_iterations is computed if possible. If it turns out
4893 to be constant, we avoid undefined behavior implied bounds and instead
4894 diagnose those loops with -Waggressive-loop-optimizations. */
4895 number_of_latch_executions (loop);
4897 basic_block *body = get_loop_body (loop);
4898 auto_vec<edge> exits = get_loop_exit_edges (loop, body);
4899 likely_exit = single_likely_exit (loop, exits);
4900 FOR_EACH_VEC_ELT (exits, i, ex)
4902 if (ex == likely_exit)
4904 gimple *stmt = *gsi_last_bb (ex->src);
4905 if (stmt != NULL)
4907 gcond *cond = dyn_cast<gcond *> (stmt);
4908 tree niter_bound
4909 = get_upper_bound_based_on_builtin_expr_with_prob (cond);
4910 if (niter_bound != NULL_TREE)
4912 widest_int max = derive_constant_upper_bound (niter_bound);
4913 record_estimate (loop, niter_bound, max, cond,
4914 true, true, false);
4919 if (!number_of_iterations_exit (loop, ex, &niter_desc,
4920 false, false, body))
4921 continue;
4923 niter = niter_desc.niter;
4924 type = TREE_TYPE (niter);
4925 if (TREE_CODE (niter_desc.may_be_zero) != INTEGER_CST)
4926 niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
4927 build_int_cst (type, 0),
4928 niter);
4929 record_estimate (loop, niter, niter_desc.max,
4930 last_nondebug_stmt (ex->src),
4931 true, ex == likely_exit, true);
4932 record_control_iv (loop, &niter_desc);
4935 if (flag_aggressive_loop_optimizations)
4936 infer_loop_bounds_from_undefined (loop, body);
4937 free (body);
4939 discover_iteration_bound_by_body_walk (loop);
4941 maybe_lower_iteration_bound (loop);
4943 /* If we know the exact number of iterations of this loop, try to
4944 not break code with undefined behavior by not recording smaller
4945 maximum number of iterations. */
4946 if (loop->nb_iterations
4947 && TREE_CODE (loop->nb_iterations) == INTEGER_CST
4948 && (wi::min_precision (wi::to_widest (loop->nb_iterations), SIGNED)
4949 <= bound_wide_int ().get_precision ()))
4951 loop->any_upper_bound = true;
4952 loop->nb_iterations_upper_bound
4953 = bound_wide_int::from (wi::to_widest (loop->nb_iterations), SIGNED);
4957 /* Sets NIT to the estimated number of executions of the latch of the
4958 LOOP. If CONSERVATIVE is true, we must be sure that NIT is at least as
4959 large as the number of iterations. If we have no reliable estimate,
4960 the function returns false, otherwise returns true. */
4962 bool
4963 estimated_loop_iterations (class loop *loop, widest_int *nit)
4965 /* When SCEV information is available, try to update loop iterations
4966 estimate. Otherwise just return whatever we recorded earlier. */
4967 if (scev_initialized_p ())
4968 estimate_numbers_of_iterations (loop);
4970 return (get_estimated_loop_iterations (loop, nit));
4973 /* Similar to estimated_loop_iterations, but returns the estimate only
4974 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
4975 on the number of iterations of LOOP could not be derived, returns -1. */
4977 HOST_WIDE_INT
4978 estimated_loop_iterations_int (class loop *loop)
4980 widest_int nit;
4981 HOST_WIDE_INT hwi_nit;
4983 if (!estimated_loop_iterations (loop, &nit))
4984 return -1;
4986 if (!wi::fits_shwi_p (nit))
4987 return -1;
4988 hwi_nit = nit.to_shwi ();
4990 return hwi_nit < 0 ? -1 : hwi_nit;
4994 /* Sets NIT to an upper bound for the maximum number of executions of the
4995 latch of the LOOP. If we have no reliable estimate, the function returns
4996 false, otherwise returns true. */
4998 bool
4999 max_loop_iterations (class loop *loop, widest_int *nit)
5001 /* When SCEV information is available, try to update loop iterations
5002 estimate. Otherwise just return whatever we recorded earlier. */
5003 if (scev_initialized_p ())
5004 estimate_numbers_of_iterations (loop);
5006 return get_max_loop_iterations (loop, nit);
5009 /* Similar to max_loop_iterations, but returns the estimate only
5010 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
5011 on the number of iterations of LOOP could not be derived, returns -1. */
5013 HOST_WIDE_INT
5014 max_loop_iterations_int (class loop *loop)
5016 widest_int nit;
5017 HOST_WIDE_INT hwi_nit;
5019 if (!max_loop_iterations (loop, &nit))
5020 return -1;
5022 if (!wi::fits_shwi_p (nit))
5023 return -1;
5024 hwi_nit = nit.to_shwi ();
5026 return hwi_nit < 0 ? -1 : hwi_nit;
5029 /* Sets NIT to an likely upper bound for the maximum number of executions of the
5030 latch of the LOOP. If we have no reliable estimate, the function returns
5031 false, otherwise returns true. */
5033 bool
5034 likely_max_loop_iterations (class loop *loop, widest_int *nit)
5036 /* When SCEV information is available, try to update loop iterations
5037 estimate. Otherwise just return whatever we recorded earlier. */
5038 if (scev_initialized_p ())
5039 estimate_numbers_of_iterations (loop);
5041 return get_likely_max_loop_iterations (loop, nit);
5044 /* Similar to max_loop_iterations, but returns the estimate only
5045 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
5046 on the number of iterations of LOOP could not be derived, returns -1. */
5048 HOST_WIDE_INT
5049 likely_max_loop_iterations_int (class loop *loop)
5051 widest_int nit;
5052 HOST_WIDE_INT hwi_nit;
5054 if (!likely_max_loop_iterations (loop, &nit))
5055 return -1;
5057 if (!wi::fits_shwi_p (nit))
5058 return -1;
5059 hwi_nit = nit.to_shwi ();
5061 return hwi_nit < 0 ? -1 : hwi_nit;
5064 /* Returns an estimate for the number of executions of statements
5065 in the LOOP. For statements before the loop exit, this exceeds
5066 the number of execution of the latch by one. */
5068 HOST_WIDE_INT
5069 estimated_stmt_executions_int (class loop *loop)
5071 HOST_WIDE_INT nit = estimated_loop_iterations_int (loop);
5072 HOST_WIDE_INT snit;
5074 if (nit == -1)
5075 return -1;
5077 snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
5079 /* If the computation overflows, return -1. */
5080 return snit < 0 ? -1 : snit;
5083 /* Sets NIT to the maximum number of executions of the latch of the
5084 LOOP, plus one. If we have no reliable estimate, the function returns
5085 false, otherwise returns true. */
5087 bool
5088 max_stmt_executions (class loop *loop, widest_int *nit)
5090 widest_int nit_minus_one;
5092 if (!max_loop_iterations (loop, nit))
5093 return false;
5095 nit_minus_one = *nit;
5097 *nit += 1;
5099 return wi::gtu_p (*nit, nit_minus_one);
5102 /* Sets NIT to the estimated maximum number of executions of the latch of the
5103 LOOP, plus one. If we have no likely estimate, the function returns
5104 false, otherwise returns true. */
5106 bool
5107 likely_max_stmt_executions (class loop *loop, widest_int *nit)
5109 widest_int nit_minus_one;
5111 if (!likely_max_loop_iterations (loop, nit))
5112 return false;
5114 nit_minus_one = *nit;
5116 *nit += 1;
5118 return wi::gtu_p (*nit, nit_minus_one);
5121 /* Sets NIT to the estimated number of executions of the latch of the
5122 LOOP, plus one. If we have no reliable estimate, the function returns
5123 false, otherwise returns true. */
5125 bool
5126 estimated_stmt_executions (class loop *loop, widest_int *nit)
5128 widest_int nit_minus_one;
5130 if (!estimated_loop_iterations (loop, nit))
5131 return false;
5133 nit_minus_one = *nit;
5135 *nit += 1;
5137 return wi::gtu_p (*nit, nit_minus_one);
5140 /* Records estimates on numbers of iterations of loops. */
5142 void
5143 estimate_numbers_of_iterations (function *fn)
5145 /* We don't want to issue signed overflow warnings while getting
5146 loop iteration estimates. */
5147 fold_defer_overflow_warnings ();
5149 for (auto loop : loops_list (fn, 0))
5150 estimate_numbers_of_iterations (loop);
5152 fold_undefer_and_ignore_overflow_warnings ();
5155 /* Returns true if statement S1 dominates statement S2. */
5157 bool
5158 stmt_dominates_stmt_p (gimple *s1, gimple *s2)
5160 basic_block bb1 = gimple_bb (s1), bb2 = gimple_bb (s2);
5162 if (!bb1
5163 || s1 == s2)
5164 return true;
5166 if (bb1 == bb2)
5168 gimple_stmt_iterator bsi;
5170 if (gimple_code (s2) == GIMPLE_PHI)
5171 return false;
5173 if (gimple_code (s1) == GIMPLE_PHI)
5174 return true;
5176 for (bsi = gsi_start_bb (bb1); gsi_stmt (bsi) != s2; gsi_next (&bsi))
5177 if (gsi_stmt (bsi) == s1)
5178 return true;
5180 return false;
5183 return dominated_by_p (CDI_DOMINATORS, bb2, bb1);
5186 /* Returns true when we can prove that the number of executions of
5187 STMT in the loop is at most NITER, according to the bound on
5188 the number of executions of the statement NITER_BOUND->stmt recorded in
5189 NITER_BOUND and fact that NITER_BOUND->stmt dominate STMT.
5191 ??? This code can become quite a CPU hog - we can have many bounds,
5192 and large basic block forcing stmt_dominates_stmt_p to be queried
5193 many times on a large basic blocks, so the whole thing is O(n^2)
5194 for scev_probably_wraps_p invocation (that can be done n times).
5196 It would make more sense (and give better answers) to remember BB
5197 bounds computed by discover_iteration_bound_by_body_walk. */
5199 static bool
5200 n_of_executions_at_most (gimple *stmt,
5201 class nb_iter_bound *niter_bound,
5202 tree niter)
5204 widest_int bound = widest_int::from (niter_bound->bound, SIGNED);
5205 tree nit_type = TREE_TYPE (niter), e;
5206 enum tree_code cmp;
5208 gcc_assert (TYPE_UNSIGNED (nit_type));
5210 /* If the bound does not even fit into NIT_TYPE, it cannot tell us that
5211 the number of iterations is small. */
5212 if (!wi::fits_to_tree_p (bound, nit_type))
5213 return false;
5215 /* We know that NITER_BOUND->stmt is executed at most NITER_BOUND->bound + 1
5216 times. This means that:
5218 -- if NITER_BOUND->is_exit is true, then everything after
5219 it at most NITER_BOUND->bound times.
5221 -- If NITER_BOUND->is_exit is false, then if we can prove that when STMT
5222 is executed, then NITER_BOUND->stmt is executed as well in the same
5223 iteration then STMT is executed at most NITER_BOUND->bound + 1 times.
5225 If we can determine that NITER_BOUND->stmt is always executed
5226 after STMT, then STMT is executed at most NITER_BOUND->bound + 2 times.
5227 We conclude that if both statements belong to the same
5228 basic block and STMT is before NITER_BOUND->stmt and there are no
5229 statements with side effects in between. */
5231 if (niter_bound->is_exit)
5233 if (stmt == niter_bound->stmt
5234 || !stmt_dominates_stmt_p (niter_bound->stmt, stmt))
5235 return false;
5236 cmp = GE_EXPR;
5238 else
5240 if (!stmt_dominates_stmt_p (niter_bound->stmt, stmt))
5242 gimple_stmt_iterator bsi;
5243 if (gimple_bb (stmt) != gimple_bb (niter_bound->stmt)
5244 || gimple_code (stmt) == GIMPLE_PHI
5245 || gimple_code (niter_bound->stmt) == GIMPLE_PHI)
5246 return false;
5248 /* By stmt_dominates_stmt_p we already know that STMT appears
5249 before NITER_BOUND->STMT. Still need to test that the loop
5250 cannot be terinated by a side effect in between. */
5251 for (bsi = gsi_for_stmt (stmt); gsi_stmt (bsi) != niter_bound->stmt;
5252 gsi_next (&bsi))
5253 if (gimple_has_side_effects (gsi_stmt (bsi)))
5254 return false;
5255 bound += 1;
5256 if (bound == 0
5257 || !wi::fits_to_tree_p (bound, nit_type))
5258 return false;
5260 cmp = GT_EXPR;
5263 e = fold_binary (cmp, boolean_type_node,
5264 niter, wide_int_to_tree (nit_type, bound));
5265 return e && integer_nonzerop (e);
5268 /* Returns true if the arithmetics in TYPE can be assumed not to wrap. */
5270 bool
5271 nowrap_type_p (tree type)
5273 if (ANY_INTEGRAL_TYPE_P (type)
5274 && TYPE_OVERFLOW_UNDEFINED (type))
5275 return true;
5277 if (POINTER_TYPE_P (type))
5278 return true;
5280 return false;
5283 /* Return true if we can prove LOOP is exited before evolution of induction
5284 variable {BASE, STEP} overflows with respect to its type bound. */
5286 static bool
5287 loop_exits_before_overflow (tree base, tree step,
5288 gimple *at_stmt, class loop *loop)
5290 widest_int niter;
5291 struct control_iv *civ;
5292 class nb_iter_bound *bound;
5293 tree e, delta, step_abs, unsigned_base;
5294 tree type = TREE_TYPE (step);
5295 tree unsigned_type, valid_niter;
5297 /* Don't issue signed overflow warnings. */
5298 fold_defer_overflow_warnings ();
5300 /* Compute the number of iterations before we reach the bound of the
5301 type, and verify that the loop is exited before this occurs. */
5302 unsigned_type = unsigned_type_for (type);
5303 unsigned_base = fold_convert (unsigned_type, base);
5305 if (tree_int_cst_sign_bit (step))
5307 tree extreme = fold_convert (unsigned_type,
5308 lower_bound_in_type (type, type));
5309 delta = fold_build2 (MINUS_EXPR, unsigned_type, unsigned_base, extreme);
5310 step_abs = fold_build1 (NEGATE_EXPR, unsigned_type,
5311 fold_convert (unsigned_type, step));
5313 else
5315 tree extreme = fold_convert (unsigned_type,
5316 upper_bound_in_type (type, type));
5317 delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, unsigned_base);
5318 step_abs = fold_convert (unsigned_type, step);
5321 valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step_abs);
5323 estimate_numbers_of_iterations (loop);
5325 if (max_loop_iterations (loop, &niter)
5326 && wi::fits_to_tree_p (niter, TREE_TYPE (valid_niter))
5327 && (e = fold_binary (GT_EXPR, boolean_type_node, valid_niter,
5328 wide_int_to_tree (TREE_TYPE (valid_niter),
5329 niter))) != NULL
5330 && integer_nonzerop (e))
5332 fold_undefer_and_ignore_overflow_warnings ();
5333 return true;
5335 if (at_stmt)
5336 for (bound = loop->bounds; bound; bound = bound->next)
5338 if (n_of_executions_at_most (at_stmt, bound, valid_niter))
5340 fold_undefer_and_ignore_overflow_warnings ();
5341 return true;
5344 fold_undefer_and_ignore_overflow_warnings ();
5346 /* Try to prove loop is exited before {base, step} overflows with the
5347 help of analyzed loop control IV. This is done only for IVs with
5348 constant step because otherwise we don't have the information. */
5349 if (TREE_CODE (step) == INTEGER_CST)
5351 for (civ = loop->control_ivs; civ; civ = civ->next)
5353 enum tree_code code;
5354 tree civ_type = TREE_TYPE (civ->step);
5356 /* Have to consider type difference because operand_equal_p ignores
5357 that for constants. */
5358 if (TYPE_UNSIGNED (type) != TYPE_UNSIGNED (civ_type)
5359 || element_precision (type) != element_precision (civ_type))
5360 continue;
5362 /* Only consider control IV with same step. */
5363 if (!operand_equal_p (step, civ->step, 0))
5364 continue;
5366 /* Done proving if this is a no-overflow control IV. */
5367 if (operand_equal_p (base, civ->base, 0))
5368 return true;
5370 /* Control IV is recorded after expanding simple operations,
5371 Here we expand base and compare it too. */
5372 tree expanded_base = expand_simple_operations (base);
5373 if (operand_equal_p (expanded_base, civ->base, 0))
5374 return true;
5376 /* If this is a before stepping control IV, in other words, we have
5378 {civ_base, step} = {base + step, step}
5380 Because civ {base + step, step} doesn't overflow during loop
5381 iterations, {base, step} will not overflow if we can prove the
5382 operation "base + step" does not overflow. Specifically, we try
5383 to prove below conditions are satisfied:
5385 base <= UPPER_BOUND (type) - step ;;step > 0
5386 base >= LOWER_BOUND (type) - step ;;step < 0
5388 by proving the reverse conditions are false using loop's initial
5389 condition. */
5390 if (POINTER_TYPE_P (TREE_TYPE (base)))
5391 code = POINTER_PLUS_EXPR;
5392 else
5393 code = PLUS_EXPR;
5395 tree stepped = fold_build2 (code, TREE_TYPE (base), base, step);
5396 tree expanded_stepped = fold_build2 (code, TREE_TYPE (base),
5397 expanded_base, step);
5398 if (operand_equal_p (stepped, civ->base, 0)
5399 || operand_equal_p (expanded_stepped, civ->base, 0))
5401 tree extreme;
5403 if (tree_int_cst_sign_bit (step))
5405 code = LT_EXPR;
5406 extreme = lower_bound_in_type (type, type);
5408 else
5410 code = GT_EXPR;
5411 extreme = upper_bound_in_type (type, type);
5413 extreme = fold_build2 (MINUS_EXPR, type, extreme, step);
5414 e = fold_build2 (code, boolean_type_node, base, extreme);
5415 e = simplify_using_initial_conditions (loop, e);
5416 if (integer_zerop (e))
5417 return true;
5422 return false;
5425 /* VAR is scev variable whose evolution part is constant STEP, this function
5426 proves that VAR can't overflow by using value range info. If VAR's value
5427 range is [MIN, MAX], it can be proven by:
5428 MAX + step doesn't overflow ; if step > 0
5430 MIN + step doesn't underflow ; if step < 0.
5432 We can only do this if var is computed in every loop iteration, i.e, var's
5433 definition has to dominate loop latch. Consider below example:
5436 unsigned int i;
5438 <bb 3>:
5440 <bb 4>:
5441 # RANGE [0, 4294967294] NONZERO 65535
5442 # i_21 = PHI <0(3), i_18(9)>
5443 if (i_21 != 0)
5444 goto <bb 6>;
5445 else
5446 goto <bb 8>;
5448 <bb 6>:
5449 # RANGE [0, 65533] NONZERO 65535
5450 _6 = i_21 + 4294967295;
5451 # RANGE [0, 65533] NONZERO 65535
5452 _7 = (long unsigned int) _6;
5453 # RANGE [0, 524264] NONZERO 524280
5454 _8 = _7 * 8;
5455 # PT = nonlocal escaped
5456 _9 = a_14 + _8;
5457 *_9 = 0;
5459 <bb 8>:
5460 # RANGE [1, 65535] NONZERO 65535
5461 i_18 = i_21 + 1;
5462 if (i_18 >= 65535)
5463 goto <bb 10>;
5464 else
5465 goto <bb 9>;
5467 <bb 9>:
5468 goto <bb 4>;
5470 <bb 10>:
5471 return;
5474 VAR _6 doesn't overflow only with pre-condition (i_21 != 0), here we
5475 can't use _6 to prove no-overlfow for _7. In fact, var _7 takes value
5476 sequence (4294967295, 0, 1, ..., 65533) in loop life time, rather than
5477 (4294967295, 4294967296, ...). */
5479 static bool
5480 scev_var_range_cant_overflow (tree var, tree step, class loop *loop)
5482 tree type;
5483 wide_int minv, maxv, diff, step_wi;
5485 if (TREE_CODE (step) != INTEGER_CST || !INTEGRAL_TYPE_P (TREE_TYPE (var)))
5486 return false;
5488 /* Check if VAR evaluates in every loop iteration. It's not the case
5489 if VAR is default definition or does not dominate loop's latch. */
5490 basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (var));
5491 if (!def_bb || !dominated_by_p (CDI_DOMINATORS, loop->latch, def_bb))
5492 return false;
5494 int_range_max r (TREE_TYPE (var));
5495 get_range_query (cfun)->range_of_expr (r, var);
5496 if (r.varying_p () || r.undefined_p ())
5497 return false;
5499 /* VAR is a scev whose evolution part is STEP and value range info
5500 is [MIN, MAX], we can prove its no-overflowness by conditions:
5502 type_MAX - MAX >= step ; if step > 0
5503 MIN - type_MIN >= |step| ; if step < 0.
5505 Or VAR must take value outside of value range, which is not true. */
5506 step_wi = wi::to_wide (step);
5507 type = TREE_TYPE (var);
5508 if (tree_int_cst_sign_bit (step))
5510 diff = r.lower_bound () - wi::to_wide (lower_bound_in_type (type, type));
5511 step_wi = - step_wi;
5513 else
5514 diff = wi::to_wide (upper_bound_in_type (type, type)) - r.upper_bound ();
5516 return (wi::geu_p (diff, step_wi));
5519 /* Return false only when the induction variable BASE + STEP * I is
5520 known to not overflow: i.e. when the number of iterations is small
5521 enough with respect to the step and initial condition in order to
5522 keep the evolution confined in TYPEs bounds. Return true when the
5523 iv is known to overflow or when the property is not computable.
5525 USE_OVERFLOW_SEMANTICS is true if this function should assume that
5526 the rules for overflow of the given language apply (e.g., that signed
5527 arithmetics in C does not overflow).
5529 If VAR is a ssa variable, this function also returns false if VAR can
5530 be proven not overflow with value range info. */
5532 bool
5533 scev_probably_wraps_p (tree var, tree base, tree step,
5534 gimple *at_stmt, class loop *loop,
5535 bool use_overflow_semantics)
5537 /* FIXME: We really need something like
5538 http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html.
5540 We used to test for the following situation that frequently appears
5541 during address arithmetics:
5543 D.1621_13 = (long unsigned intD.4) D.1620_12;
5544 D.1622_14 = D.1621_13 * 8;
5545 D.1623_15 = (doubleD.29 *) D.1622_14;
5547 And derived that the sequence corresponding to D_14
5548 can be proved to not wrap because it is used for computing a
5549 memory access; however, this is not really the case -- for example,
5550 if D_12 = (unsigned char) [254,+,1], then D_14 has values
5551 2032, 2040, 0, 8, ..., but the code is still legal. */
5553 if (chrec_contains_undetermined (base)
5554 || chrec_contains_undetermined (step))
5555 return true;
5557 if (integer_zerop (step))
5558 return false;
5560 /* If we can use the fact that signed and pointer arithmetics does not
5561 wrap, we are done. */
5562 if (use_overflow_semantics && nowrap_type_p (TREE_TYPE (base)))
5563 return false;
5565 /* To be able to use estimates on number of iterations of the loop,
5566 we must have an upper bound on the absolute value of the step. */
5567 if (TREE_CODE (step) != INTEGER_CST)
5568 return true;
5570 /* Check if var can be proven not overflow with value range info. */
5571 if (var && TREE_CODE (var) == SSA_NAME
5572 && scev_var_range_cant_overflow (var, step, loop))
5573 return false;
5575 if (loop_exits_before_overflow (base, step, at_stmt, loop))
5576 return false;
5578 /* Check the nonwrapping flag, which may be set by niter analysis (e.g., the
5579 above loop exits before overflow). */
5580 if (var && nonwrapping_chrec_p (analyze_scalar_evolution (loop, var)))
5581 return false;
5583 /* At this point we still don't have a proof that the iv does not
5584 overflow: give up. */
5585 return true;
5588 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
5590 void
5591 free_numbers_of_iterations_estimates (class loop *loop)
5593 struct control_iv *civ;
5594 class nb_iter_bound *bound;
5596 loop->nb_iterations = NULL;
5597 loop->estimate_state = EST_NOT_COMPUTED;
5598 for (bound = loop->bounds; bound;)
5600 class nb_iter_bound *next = bound->next;
5601 ggc_free (bound);
5602 bound = next;
5604 loop->bounds = NULL;
5606 for (civ = loop->control_ivs; civ;)
5608 struct control_iv *next = civ->next;
5609 ggc_free (civ);
5610 civ = next;
5612 loop->control_ivs = NULL;
5615 /* Frees the information on upper bounds on numbers of iterations of loops. */
5617 void
5618 free_numbers_of_iterations_estimates (function *fn)
5620 for (auto loop : loops_list (fn, 0))
5621 free_numbers_of_iterations_estimates (loop);
5624 /* Substitute value VAL for ssa name NAME inside expressions held
5625 at LOOP. */
5627 void
5628 substitute_in_loop_info (class loop *loop, tree name, tree val)
5630 loop->nb_iterations = simplify_replace_tree (loop->nb_iterations, name, val);