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
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
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/>. */
22 #include "coretypes.h"
27 #include "tree-pass.h"
29 #include "gimple-pretty-print.h"
30 #include "diagnostic-core.h"
31 #include "stor-layout.h"
32 #include "fold-const.h"
36 #include "gimple-iterator.h"
38 #include "tree-ssa-loop-ivopts.h"
39 #include "tree-ssa-loop-niter.h"
40 #include "tree-ssa-loop.h"
42 #include "tree-chrec.h"
43 #include "tree-scalar-evolution.h"
44 #include "tree-data-ref.h"
46 #include "internal-fn.h"
47 #include "gimple-range.h"
51 /* The maximum number of dominator BBs we search for conditions
52 of loop header copies we use for simplifying a conditional
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. */
69 /* Splits expression EXPR to a variable part VAR and constant OFFSET. */
72 split_to_var_and_offset (tree expr
, tree
*var
, mpz_t offset
)
74 tree type
= TREE_TYPE (expr
);
79 mpz_set_ui (offset
, 0);
81 switch (TREE_CODE (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
)
96 /* Always sign extend the offset. */
97 wi::to_mpz (wi::to_wide (op1
), offset
, SIGNED
);
99 mpz_neg (offset
, offset
);
103 *var
= build_int_cst_type (type
, 0);
104 wi::to_mpz (wi::to_wide (expr
), offset
, TYPE_SIGN (type
));
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. */
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
;
122 mpz_t mint
, maxt
, minc1
, maxc1
;
123 bool no_wrap
= nowrap_type_p (type
);
125 signop sgn
= TYPE_SIGN (type
);
133 STRIP_SIGN_NOPS (c0
);
134 STRIP_SIGN_NOPS (c1
);
135 ctype
= TREE_TYPE (c0
);
136 if (!useless_type_conversion_p (ctype
, type
))
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
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
))
154 /* Ensure that the condition speaks about an expression in the same
156 ctype
= TREE_TYPE (c0
);
157 if (TYPE_PRECISION (ctype
) != TYPE_PRECISION (type
))
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. */
166 wi::to_mpz (wi::to_wide (c1
), valc1
, TYPE_SIGN (type
));
167 if (mpz_cmp (valc1
, below
) == 0)
169 if (mpz_cmp (valc1
, up
) == 0)
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
)
180 if (wi::to_wide (c1
) == max
)
184 /* Quick return if no useful information. */
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))
215 get_type_static_bounds (type
, mint
, maxt
);
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
)
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
);
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
);
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));
256 if (mpz_cmp (minc1
, mint
) < 0)
257 mpz_set (minc1
, mint
);
258 if (mpz_cmp (maxc1
, maxt
) > 0)
259 mpz_set (maxc1
, maxt
);
264 mpz_sub_ui (maxc1
, maxc1
, 1);
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
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
);
313 || mpz_sgn (offc0
) == 0
315 && mpz_sgn (offc0
) < 0 && mpz_cmp (maxc1
, maxt
) <= 0)
317 && mpz_sgn (offc0
) > 0 && mpz_cmp (minc1
, mint
) >= 0));
323 if (mpz_cmp (up
, maxc1
) > 0)
328 if (mpz_cmp (below
, minc1
) < 0)
329 mpz_set (below
, minc1
);
341 /* Stores estimate on the minimum/maximum value of the expression VAR + OFF
342 in TYPE to MIN and MAX. */
345 determine_value_range (class loop
*loop
, tree type
, tree var
, mpz_t off
,
346 mpz_t min
, mpz_t max
)
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
))
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
);
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 ())
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
)
399 minv
= phi_range
.lower_bound ();
400 maxv
= phi_range
.upper_bound ();
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
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 ())
418 if (!vr
.undefined_p ())
420 minv
= vr
.lower_bound ();
421 maxv
= vr
.upper_bound ();
430 if (rtype
!= VR_RANGE
)
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
))
451 if (!single_pred_p (bb
))
453 e
= single_pred_edge (bb
);
455 if (!(e
->flags
& (EDGE_TRUE_VALUE
| EDGE_FALSE_VALUE
)))
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
);
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))
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
))
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
);
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. */
509 bound_difference_of_offsetted_base (tree type
, mpz_t x
, mpz_t y
,
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
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). */
531 mpz_set_ui (bnds
->below
, 0);
532 mpz_set_ui (bnds
->up
, 0);
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
);
545 mpz_sub (bnds
->below
, bnds
->below
, m
);
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. */
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
,
561 tree varc0
, varc1
, ctype
;
562 mpz_t offc0
, offc1
, loffx
, loffy
, bnd
;
564 bool no_wrap
= nowrap_type_p (type
);
573 STRIP_SIGN_NOPS (c0
);
574 STRIP_SIGN_NOPS (c1
);
575 ctype
= TREE_TYPE (c0
);
576 if (!useless_type_conversion_p (ctype
, type
))
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
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
))
594 /* Ensure that the condition speaks about an expression in the same type
596 ctype
= TREE_TYPE (c0
);
597 if (TYPE_PRECISION (ctype
) != TYPE_PRECISION (type
))
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))
608 if (TYPE_MAX_VALUE (type
)
609 && operand_equal_p (c1
, TYPE_MAX_VALUE (type
), 0))
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))
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
);
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
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. */
675 x_ok
= (integer_zerop (varx
)
676 || mpz_cmp (loffx
, offc0
) >= 0);
677 y_ok
= (integer_zerop (vary
)
678 || mpz_cmp (loffy
, offc1
) <= 0);
684 mpz_sub (bnd
, loffx
, loffy
);
685 mpz_add (bnd
, bnd
, offc1
);
686 mpz_sub (bnd
, bnd
, offc0
);
689 mpz_sub_ui (bnd
, bnd
, 1);
694 if (mpz_cmp (bnds
->below
, bnd
) < 0)
695 mpz_set (bnds
->below
, bnd
);
699 if (mpz_cmp (bnd
, bnds
->up
) < 0)
700 mpz_set (bnds
->up
, bnd
);
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,
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). */
722 bound_difference (class loop
*loop
, tree x
, tree y
, bounds
*bnds
)
724 tree type
= TREE_TYPE (x
);
733 /* Get rid of unnecessary casts, but preserve the value of
738 mpz_init (bnds
->below
);
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
);
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
))
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
))
777 e
= single_pred_edge (bb
);
779 if (!(e
->flags
& (EDGE_TRUE_VALUE
| EDGE_FALSE_VALUE
)))
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
,
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. */
805 bounds_add (bounds
*bnds
, const widest_int
&delta
, tree type
)
810 wi::to_mpz (delta
, mdelta
, SIGNED
);
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
);
822 if (mpz_cmp (bnds
->below
, max
) < 0)
823 mpz_set (bnds
->below
, max
);
829 /* Update the bounds in BNDS that restrict the value of X to the bounds
830 that restrict the value of -X. */
833 bounds_negate (bounds
*bnds
)
837 mpz_init_set (tmp
, bnds
->up
);
838 mpz_neg (bnds
->up
, bnds
->below
);
839 mpz_neg (bnds
->below
, tmp
);
843 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
846 inverse (tree x
, tree mask
)
848 tree type
= TREE_TYPE (x
);
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
);
871 rslt
= build_int_cst_type (type
, irslt
);
875 rslt
= build_int_cst (type
, 1);
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
);
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. */
904 number_of_iterations_ne_max (mpz_t bnd
, bool no_overflow
, tree c
, tree s
,
905 bounds
*bnds
, bool exit_must_be_taken
)
909 tree type
= TREE_TYPE (c
);
910 bool bnds_u_valid
= ((no_overflow
&& exit_must_be_taken
)
911 || mpz_sgn (bnds
->below
) >= 0);
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. */
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). */
936 max
= wi::mask
<widest_int
> (TYPE_PRECISION (type
)
937 - wi::ctz (wi::to_wide (s
)), false);
938 wi::to_mpz (max
, bnd
, UNSIGNED
);
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
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
);
959 wi::to_mpz (wi::to_wide (s
), d
, UNSIGNED
);
960 mpz_fdiv_q (bnd
, bnd
, 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. */
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
);
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
));
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. */
1043 if (POINTER_TYPE_P (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
,
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
,
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
);
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
))
1132 tmp
= fold_build2 (MULT_EXPR
, niter_type
, c
, inverse (s
, bound
));
1133 niter
->niter
= fold_build2 (BIT_AND_EXPR
, niter_type
, tmp
, bound
);
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. */
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
);
1157 tree assumption
= boolean_true_node
, bound
, noloop
;
1158 bool fv_comp_no_overflow
;
1160 if (POINTER_TYPE_P (type
))
1163 if (TREE_CODE (mod
) != INTEGER_CST
)
1165 if (integer_nonzerop (mod
))
1166 mod
= fold_build2 (MINUS_EXPR
, niter_type
, step
, mod
);
1167 tmod
= fold_convert (type1
, mod
);
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;
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
,
1200 if (integer_zerop (assumption
))
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
,
1215 if (integer_zerop (assumption
))
1220 /* IV0 < IV1 does not loop if IV0->base >= IV1->base. */
1221 if (mpz_cmp (mmod
, bnds
->below
) < 0)
1222 noloop
= boolean_false_node
;
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
,
1231 if (!integer_zerop (noloop
))
1232 niter
->may_be_zero
= fold_build2 (TRUTH_OR_EXPR
, boolean_type_node
,
1235 bounds_add (bnds
, wi::to_widest (mod
), type
);
1236 *delta
= fold_build2 (PLUS_EXPR
, niter_type
, *delta
, mod
);
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. */
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
)
1259 /* If iv0->base is a constant, we can determine the last value before
1260 overflow precisely; otherwise we conservatively assume
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
);
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
,
1280 /* for (i = iv1->base; i > iv0->base; i += iv1->step) */
1281 if (iv1
->no_overflow
)
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
);
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
,
1300 if (integer_zerop (assumption
))
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;
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. */
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
;
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
1347 if (integer_nonzerop (iv0
->step
))
1348 dstep
= wi::to_widest (iv0
->step
);
1351 dstep
= wi::sext (wi::to_widest (iv1
->step
), TYPE_PRECISION (type
));
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;
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
));
1375 if (rolls_p
&& no_overflow_p
)
1379 if (POINTER_TYPE_P (type
))
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
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
,
1401 /* And then we can compute iv0->base - diff, and compare it with
1403 mbzl
= fold_build2 (MINUS_EXPR
, type1
,
1404 fold_convert (type1
, iv0
->base
), diff
);
1405 mbzr
= fold_convert (type1
, iv1
->base
);
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
,
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
);
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. */
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
))
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
))
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
))
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. */
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
));
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
);
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
))
1505 num
= fold_build2 (MINUS_EXPR
, niter_type
,
1506 fold_convert (niter_type
, iv0
->base
),
1507 wide_int_to_tree (niter_type
, 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
);
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
);
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
);
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
;
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. */
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
;
1583 if (integer_nonzerop (iv0
->step
))
1585 niter
->control
= *iv0
;
1586 niter
->cmp
= LT_EXPR
;
1587 niter
->bound
= iv1
->base
;
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
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;
1633 if (integer_nonzerop (iv0
->step
))
1634 step
= fold_convert (niter_type
, iv0
->step
);
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
))
1647 zps
.base
= build_int_cst (niter_type
, 0);
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
))
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
);
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
));
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. */
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
)
1699 if (POINTER_TYPE_P (type
))
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
));
1717 assumption
= fold_build2 (NE_EXPR
, boolean_type_node
,
1718 iv0
->base
, TYPE_MIN_VALUE (type
));
1720 if (integer_zerop (assumption
))
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);
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);
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
,
1747 /* Dumps description of affine induction variable IV to FILE. */
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). */
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
;
1795 /* If the test is not executed every iteration, wrapping may make the test
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
))
1805 /* The meaning of these assumptions is this:
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
1810 niter
->assumptions
= boolean_true_node
;
1811 niter
->may_be_zero
= boolean_false_node
;
1812 niter
->niter
= NULL_TREE
;
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
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
1851 {iv0.base, iv0.step} cmp_code {iv1.base, iv1.step}
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
)
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
1892 else if (code
!= NE_EXPR
)
1895 iv0
->no_overflow
= false;
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
))
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
)
1915 niter
->niter
= build_int_cst (unsigned_type_for (type
), 0);
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
))
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
? "<"
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");
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
);
1954 ret
= number_of_iterations_lt (loop
, type
, iv0
, iv1
, niter
,
1955 exit_must_be_taken
, &bnds
);
1959 ret
= number_of_iterations_le (loop
, type
, iv0
, iv1
, niter
,
1960 exit_must_be_taken
, &bnds
);
1967 mpz_clear (bnds
.up
);
1968 mpz_clear (bnds
.below
);
1970 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
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");
1996 fprintf (dump_file
, " failed\n\n");
2001 /* Return an expression that computes the popcount of src. */
2004 build_popcount_expr (tree src
)
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
))
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
);
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
),
2036 build_int_cst (integer_type_node
,
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
);
2046 src
= fold_convert (unsigned_type_node
, src
);
2048 call
= build_call_expr (fn
, 1, src
);
2054 /* Utility function to check if OP is defined by a stmt
2055 that is a val - 1. */
2058 ssa_defined_by_minus_one_stmt_p (tree op
, tree val
)
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:
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;
2092 /* Check that condition for staying inside the loop is like
2094 gcond
*cond_stmt
= safe_dyn_cast
<gcond
*> (*gsi_last_bb (exit
->src
));
2097 || !integer_zerop (gimple_cond_rhs (cond_stmt
))
2098 || TREE_CODE (gimple_cond_lhs (cond_stmt
)) != SSA_NAME
)
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
))
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
)
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
))
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
)))
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
);
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
,
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
);
2178 niter
->bound
= NULL_TREE
;
2179 niter
->cmp
= ERROR_MARK
;
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. */
2192 build_cltz_expr (tree src
, bool leading
, bool define_at_zero
)
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
))
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
);
2223 int optab_defined_at_zero
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,
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
)
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
),
2248 build_int_cst (integer_type_node
,
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
2254 std::swap (src1
, src2
);
2255 tree call1
= build_call_expr (fn
, 1, src1
);
2256 tree call2
= build_call_expr (fn
, 1, src2
);
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
,
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
));
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
));
2292 /* Returns true if STMT is equivalent to x << 1. */
2295 is_lshift_by_1 (gassign
*stmt
)
2297 if (gimple_assign_rhs_code (stmt
) == LSHIFT_EXPR
2298 && integer_onep (gimple_assign_rhs2 (stmt
)))
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)
2307 /* Returns true if STMT is equivalent to x >> 1. */
2310 is_rshift_by_1 (gassign
*stmt
)
2312 if (!TYPE_UNSIGNED (TREE_TYPE (gimple_assign_lhs (stmt
))))
2314 if (gimple_assign_rhs_code (stmt
) == RSHIFT_EXPR
2315 && integer_onep (gimple_assign_rhs2 (stmt
)))
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)
2324 /* See comment below for number_of_iterations_bitcount.
2325 For c[lt]z, we have:
2328 iv_2 = iv_1 << 1 OR iv_1 >> 1
2331 if (iv & 1 << (prec-1)) OR (iv & 1)
2334 src precision - c[lt]z (src)
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;
2348 /* Check that condition for staying inside the loop is like
2350 gcond
*cond_stmt
= safe_dyn_cast
<gcond
*> (*gsi_last_bb (exit
->src
));
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
)
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
)
2367 checked_bit
= tree_log2 (gimple_assign_rhs2 (and_stmt
));
2369 iv_2
= gimple_assign_rhs1 (and_stmt
);
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
))
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
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
)))
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
))
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
))
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
))))
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
)))
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
;
2444 num_ignored_bits
= src_precision
- checked_bit
- 1;
2446 num_ignored_bits
= checked_bit
;
2448 if (modify_before_test
)
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);
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
);
2478 niter
->bound
= NULL_TREE
;
2479 niter
->cmp
= ERROR_MARK
;
2484 /* See comment below for number_of_iterations_bitcount.
2485 For c[lt]z complement, we have:
2488 iv_2 = iv_1 >> 1 OR iv_1 << 1
2494 src precision - c[lt]z (src)
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;
2506 /* Check that condition for staying inside the loop is like
2508 gcond
*cond_stmt
= safe_dyn_cast
<gcond
*> (*gsi_last_bb (exit
->src
));
2511 || !integer_zerop (gimple_cond_rhs (cond_stmt
))
2512 || TREE_CODE (gimple_cond_lhs (cond_stmt
)) != SSA_NAME
)
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
))
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
))
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
))))
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
)))
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);
2561 expr
= fold_build2 (MINUS_EXPR
, integer_type_node
,
2562 build_int_cst (integer_type_node
, src_precision
),
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
,
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
);
2589 niter
->bound
= NULL_TREE
;
2590 niter
->cmp
= ERROR_MARK
;
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.:
2601 iv_1 = PHI <src(2), iv_2(4)>
2608 iv_2 = modify (iv_1)
2614 iv_1 = PHI <src(2), iv_2(4)>
2615 iv_2 = modify (iv_1)
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
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. */
2651 simplify_replace_tree (tree expr
, tree old
, tree new_tree
,
2652 tree (*valueize
) (tree
, void*), void *context
,
2656 tree ret
= NULL_TREE
, e
, se
;
2661 /* Do not bother to replace constants. */
2662 if (CONSTANT_CLASS_P (expr
))
2667 if (TREE_CODE (expr
) == SSA_NAME
)
2669 new_tree
= valueize (expr
, context
);
2670 if (new_tree
!= expr
)
2674 else if (expr
== old
2675 || operand_equal_p (expr
, old
, 0))
2676 return unshare_expr (new_tree
);
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
);
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. */
2703 expand_simple_operations (tree expr
, tree stop
, hash_map
<tree
, tree
> &cache
)
2706 tree ret
= NULL_TREE
, e
, ee
, e1
;
2707 enum tree_code code
;
2710 if (expr
== NULL_TREE
)
2713 if (is_gimple_min_invariant (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
);
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
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. */
2733 tree
&cee
= cache
.get_or_insert (e
, &existed_p
);
2739 ee
= expand_simple_operations (e
, stop
, cache
);
2741 *cache
.get (e
) = ee
;
2747 ret
= copy_node (expr
);
2749 TREE_OPERAND (ret
, i
) = ee
;
2755 fold_defer_overflow_warnings ();
2757 fold_undefer_and_ignore_overflow_warnings ();
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
)
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)
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
)
2782 return expand_simple_operations (e
, stop
, cache
);
2784 if (gimple_code (stmt
) != GIMPLE_ASSIGN
)
2787 /* Avoid expanding to expressions that contain SSA names that need
2788 to take part in abnormal coalescing. */
2790 FOR_EACH_SSA_TREE_OPERAND (e
, stmt
, iter
, SSA_OP_USE
)
2791 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (e
))
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
))
2801 if (code
== SSA_NAME
)
2802 return expand_simple_operations (e
, stop
, cache
);
2803 else if (code
== ADDR_EXPR
)
2806 tree base
= get_addr_base_and_unit_offset (TREE_OPERAND (e
, 0),
2809 && TREE_CODE (base
) == MEM_REF
)
2811 ee
= expand_simple_operations (TREE_OPERAND (base
, 0), stop
,
2813 return fold_build2 (POINTER_PLUS_EXPR
, TREE_TYPE (expr
), ee
,
2814 wide_int_to_tree (sizetype
,
2815 mem_ref_offset (base
)
2826 /* Casts are simple. */
2827 ee
= expand_simple_operations (e
, stop
, cache
);
2828 return fold_build1 (code
, TREE_TYPE (expr
), ee
);
2833 if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (expr
))
2834 && TYPE_OVERFLOW_TRAPS (TREE_TYPE (expr
)))
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
))
2843 ee
= expand_simple_operations (e
, stop
, cache
);
2844 return fold_build2 (code
, TREE_TYPE (expr
), ee
, e1
);
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). */
2862 tree_simplify_using_condition_1 (tree cond
, tree expr
)
2865 tree e
, e0
, e1
, e2
, notcond
;
2866 enum tree_code code
= TREE_CODE (expr
);
2868 if (code
== INTEGER_CST
)
2871 if (code
== TRUTH_OR_EXPR
2872 || code
== TRUTH_AND_EXPR
2873 || code
== COND_EXPR
)
2877 e0
= tree_simplify_using_condition_1 (cond
, TREE_OPERAND (expr
, 0));
2878 if (TREE_OPERAND (expr
, 0) != e0
)
2881 e1
= tree_simplify_using_condition_1 (cond
, TREE_OPERAND (expr
, 1));
2882 if (TREE_OPERAND (expr
, 1) != e1
)
2885 if (code
== COND_EXPR
)
2887 e2
= tree_simplify_using_condition_1 (cond
, TREE_OPERAND (expr
, 2));
2888 if (TREE_OPERAND (expr
, 2) != e2
)
2896 if (code
== COND_EXPR
)
2897 expr
= fold_build3 (code
, boolean_type_node
, e0
, e1
, e2
);
2899 expr
= fold_build2 (code
, boolean_type_node
, e0
, e1
);
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
2915 e
= simplify_replace_tree (expr
, e0
, e1
);
2916 if (integer_zerop (e
) || integer_nonzerop (e
))
2919 e
= simplify_replace_tree (expr
, e1
, e0
);
2920 if (integer_zerop (e
) || integer_nonzerop (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
))
2932 e
= simplify_replace_tree (cond
, e1
, e0
);
2933 if (integer_zerop (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
))
2956 /* Check whether COND ==> not EXPR. */
2957 e
= fold_binary (TRUTH_AND_EXPR
, boolean_type_node
, cond
, expr
);
2958 if (e
&& integer_zerop (e
))
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. */
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). */
2984 simplify_using_initial_conditions (class loop
*loop
, tree expr
)
2988 tree cond
, expanded
, backup
;
2991 if (TREE_CODE (expr
) == INTEGER_CST
)
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
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
))
3005 e
= single_pred_edge (bb
);
3007 if (!(e
->flags
& (EDGE_TRUE_VALUE
| EDGE_FALSE_VALUE
)))
3010 gcond
*stmt
= as_a
<gcond
*> (*gsi_last_bb (e
->src
));
3011 cond
= fold_build2 (gimple_cond_code (stmt
),
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. */
3020 && (integer_zerop (expanded
) || integer_nonzerop (expanded
)))
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). */
3035 simplify_using_outer_evolutions (class loop
*loop
, tree expr
)
3037 enum tree_code code
= TREE_CODE (expr
);
3041 if (is_gimple_min_invariant (expr
))
3044 if (code
== TRUTH_OR_EXPR
3045 || code
== TRUTH_AND_EXPR
3046 || code
== COND_EXPR
)
3050 e0
= simplify_using_outer_evolutions (loop
, TREE_OPERAND (expr
, 0));
3051 if (TREE_OPERAND (expr
, 0) != e0
)
3054 e1
= simplify_using_outer_evolutions (loop
, TREE_OPERAND (expr
, 1));
3055 if (TREE_OPERAND (expr
, 1) != e1
)
3058 if (code
== COND_EXPR
)
3060 e2
= simplify_using_outer_evolutions (loop
, TREE_OPERAND (expr
, 2));
3061 if (TREE_OPERAND (expr
, 2) != e2
)
3069 if (code
== COND_EXPR
)
3070 expr
= fold_build3 (code
, boolean_type_node
, e0
, e1
, e2
);
3072 expr
= fold_build2 (code
, boolean_type_node
, e0
, e1
);
3078 e
= instantiate_parameters (loop
, expr
);
3079 if (is_gimple_min_invariant (e
))
3085 /* Returns true if EXIT is the only possible exit from LOOP. */
3088 loop_only_exit_p (const class loop
*loop
, basic_block
*body
, const_edge exit
)
3090 gimple_stmt_iterator bsi
;
3093 if (exit
!= single_exit (loop
))
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
)))
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. */
3114 number_of_iterations_exit_assumptions (class loop
*loop
, edge exit
,
3115 class tree_niter_desc
*niter
,
3116 gcond
**at_stmt
, bool every_iteration
,
3121 enum tree_code code
;
3125 /* The condition at a fake exit (if it exists) does not control its
3127 if (exit
->flags
& EDGE_FAKE
)
3130 /* Nothing to analyze if the loop is known to be infinite. */
3131 if (loop_constraint_set_p (loop
, LOOP_C_INFINITE
))
3134 safe
= dominated_by_p (CDI_DOMINATORS
, loop
->latch
, exit
->src
);
3136 if (every_iteration
&& !safe
)
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
));
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);
3165 return number_of_iterations_cltz (loop
, exit
, code
, niter
);
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
))
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))
3187 /* Give up on complicated case. */
3188 if (iv0_niters
&& iv1_niters
)
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;
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
)
3206 if (!number_of_iterations_cond (loop
, type
, &iv0
, code
, &iv1
, niter
,
3209 fold_undefer_and_ignore_overflow_warnings ();
3213 /* Incorporate additional assumption implied by control iv. */
3214 tree iv_niters
= iv0_niters
? iv0_niters
: iv1_niters
;
3217 tree assumption
= fold_build2 (LE_EXPR
, boolean_type_node
, niter
->niter
,
3218 fold_convert (TREE_TYPE (niter
->niter
),
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
;
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
);
3246 = simplify_using_initial_conditions (loop
,
3247 niter
->assumptions
);
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. */
3265 number_of_iterations_exit (class loop
*loop
, edge exit
,
3266 class tree_niter_desc
*niter
,
3267 bool warn
, bool every_iteration
,
3271 if (!number_of_iterations_exit_assumptions (loop
, exit
, niter
,
3272 &stmt
, every_iteration
, body
))
3275 if (integer_nonzerop (niter
->assumptions
))
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");
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. */
3292 find_loop_niter (class loop
*loop
, edge
*exit
)
3295 auto_vec
<edge
> exits
= get_loop_exit_edges (loop
);
3297 tree niter
= NULL_TREE
, aniter
;
3298 class tree_niter_desc desc
;
3301 FOR_EACH_VEC_ELT (exits
, i
, ex
)
3303 if (!number_of_iterations_exit (loop
, ex
, &desc
, false))
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);
3315 if (!integer_zerop (desc
.may_be_zero
))
3318 aniter
= desc
.niter
;
3322 /* Nothing recorded yet. */
3328 /* Prefer constants, the lower the better. */
3329 if (TREE_CODE (aniter
) != INTEGER_CST
)
3332 if (TREE_CODE (niter
) != INTEGER_CST
)
3339 if (tree_int_cst_lt (aniter
, niter
))
3347 return niter
? niter
: chrec_dont_know
;
3350 /* Return true if loop is known to have bounded number of iterations. */
3353 finite_loop_p (class loop
*loop
)
3361 auto_vec
<edge
> exits
= get_loop_exit_edges (loop
);
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
)))
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",
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
))
3382 "Found loop %i to be finite: it is within "
3383 "pure or const function.\n",
3385 loop
->finite_p
= 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",
3396 loop
->finite_p
= true;
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. */
3419 chain_of_csts_start (class loop
*loop
, tree x
)
3421 gimple
*stmt
= SSA_NAME_DEF_STMT (x
);
3423 basic_block bb
= gimple_bb (stmt
);
3424 enum tree_code code
;
3427 || !flow_bb_inside_loop_p (loop
, bb
))
3430 if (gimple_code (stmt
) == GIMPLE_PHI
)
3432 if (bb
== loop
->header
)
3433 return as_a
<gphi
*> (stmt
);
3438 if (gimple_code (stmt
) != GIMPLE_ASSIGN
3439 || gimple_assign_rhs_class (stmt
) == GIMPLE_TERNARY_RHS
)
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
))))
3449 use
= SINGLE_SSA_TREE_OPERAND (stmt
, SSA_OP_USE
);
3450 if (use
== NULL_TREE
)
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. */
3468 get_base_for (class loop
*loop
, tree x
)
3473 if (is_gimple_min_invariant (x
))
3476 phi
= chain_of_csts_start (loop
, x
);
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
))
3486 if (TREE_CODE (next
) == SSA_NAME
3487 && chain_of_csts_start (loop
, next
) != 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. */
3503 get_val_for (tree x
, tree base
)
3507 gcc_checking_assert (is_gimple_min_invariant (base
));
3511 else if (is_gimple_min_invariant (x
))
3514 stmt
= SSA_NAME_DEF_STMT (x
);
3515 if (gimple_code (stmt
) == GIMPLE_PHI
)
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
);
3540 return fold_build2 (gimple_assign_rhs_code (stmt
),
3541 TREE_TYPE (gimple_assign_lhs (stmt
)), rhs1
, rhs2
);
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. */
3556 loop_niter_by_eval (class loop
*loop
, edge exit
)
3559 tree op
[2], val
[2], next
[2], aval
[2];
3564 gcond
*cond
= safe_dyn_cast
<gcond
*> (*gsi_last_bb (exit
->src
));
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);
3580 op
[0] = gimple_cond_lhs (cond
);
3581 op
[1] = gimple_cond_rhs (cond
);
3585 return chrec_dont_know
;
3588 for (j
= 0; j
< 2; j
++)
3590 if (is_gimple_min_invariant (op
[j
]))
3593 next
[j
] = NULL_TREE
;
3598 phi
= get_base_for (loop
, op
[j
]);
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
);
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
))
3618 /* iv.base can be &"Foo" but also (char *)&"Foo" + 1. */
3619 split_constant_offset (iv
.base
, &str
, &off
);
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);
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
))
3664 "Proved that loop %d iterates %d times using brute force.\n",
3666 return build_int_cst (unsigned_type_node
, i
);
3669 for (j
= 0; j
< 2; 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])
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. */
3700 find_loop_niter_by_eval (class loop
*loop
, edge
*exit
)
3703 auto_vec
<edge
> exits
= get_loop_exit_edges (loop
);
3705 tree niter
= NULL_TREE
, aniter
;
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
))
3719 aniter
= loop_niter_by_eval (loop
, ex
);
3720 if (chrec_contains_undetermined (aniter
))
3724 && !tree_int_cst_lt (aniter
, niter
))
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. */
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
)),
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
3762 derive_constant_upper_bound (tree val
)
3764 enum tree_code code
;
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. */
3776 derive_constant_upper_bound_ops (tree type
, tree op0
,
3777 enum tree_code code
, tree op1
)
3780 widest_int bnd
, max
, cst
;
3783 if (INTEGRAL_TYPE_P (type
))
3784 maxt
= TYPE_MAX_VALUE (type
);
3786 maxt
= upper_bound_in_type (type
, type
);
3788 max
= wi::to_widest (maxt
);
3793 return wi::to_widest (op0
);
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. */
3809 /* We now know that op0 is an nonnegative value. Try deriving an upper
3811 bnd
= derive_constant_upper_bound (op0
);
3813 /* If the bound does not fit in TYPE, max. value of TYPE could be
3815 if (wi::ltu_p (max
, bnd
))
3821 case POINTER_PLUS_EXPR
:
3823 if (TREE_CODE (op1
) != INTEGER_CST
3824 || !tree_expr_nonnegative_p (op0
))
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
)
3834 bnd
= derive_constant_upper_bound (op0
);
3836 if (wi::neg_p (cst
))
3839 /* Avoid CST == 0x80000... */
3840 if (wi::neg_p (cst
))
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
))
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
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
))
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
))
3883 case FLOOR_DIV_EXPR
:
3884 case EXACT_DIV_EXPR
:
3885 if (TREE_CODE (op1
) != INTEGER_CST
3886 || tree_int_cst_sign_bit (op1
))
3889 bnd
= derive_constant_upper_bound (op0
);
3890 return wi::udiv_floor (bnd
, wi::to_widest (op1
));
3893 if (TREE_CODE (op1
) != INTEGER_CST
3894 || tree_int_cst_sign_bit (op1
))
3896 return wi::to_widest (op1
);
3899 stmt
= SSA_NAME_DEF_STMT (op0
);
3900 if (gimple_code (stmt
) != GIMPLE_ASSIGN
3901 || gimple_assign_lhs (stmt
) != op0
)
3903 return derive_constant_upper_bound_assign (stmt
);
3910 /* Emit a -Waggressive-loop-optimizations warning if needed. */
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
)))
3932 edge e
= single_exit (loop
);
3936 gimple
*estmt
= last_nondebug_stmt (e
->src
);
3937 char buf
[WIDE_INT_PRINT_BUFFER_SIZE
], *p
;
3939 if (print_dec_buf_size (i_bound
, TYPE_SIGN (TREE_TYPE (loop
->nb_iterations
)),
3941 p
= XALLOCAVEC (char, len
);
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. */
3960 record_estimate (class loop
*loop
, tree bound
, const widest_int
&i_bound
,
3961 gimple
*at_stmt
, bool is_exit
, bool realistic
, bool upper
)
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
)
3982 gcc_checking_assert (i_bound
== wi::to_widest (bound
));
3984 if (wi::min_precision (i_bound
, SIGNED
) > bound_wide_int ().get_precision ())
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. */
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
;
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
)))
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 */
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
))
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. */
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
)
4039 if (!integer_onep (niter
->assumptions
) || !niter
->control
.no_overflow
)
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
;
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. */
4060 get_cst_init_from_scev (tree var
, wide_int
*init
, bool is_min
)
4062 if (TREE_CODE (var
) != SSA_NAME
)
4065 gimple
*def_stmt
= SSA_NAME_DEF_STMT (var
);
4066 class loop
*loop
= loop_containing_stmt (def_stmt
);
4072 if (!simple_iv (loop
, loop
, var
, &iv
, false))
4075 if (!iv
.no_overflow
)
4078 if (TREE_CODE (iv
.base
) != INTEGER_CST
|| TREE_CODE (iv
.step
) != INTEGER_CST
)
4081 if (is_min
== tree_int_cst_sign_bit (iv
.step
))
4084 *init
= wi::to_wide (iv
.base
);
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. */
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
))
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
))
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
);
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
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
)
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;
4206 class loop
*dloop
= loop_containing_stmt (data
->stmt
);
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
);
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
))
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
4228 if (TREE_CODE (low
) != INTEGER_CST
4230 || TREE_CODE (high
) != INTEGER_CST
)
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))
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
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
))
4252 low
= fold_convert (type
, low
);
4253 high
= fold_convert (type
, high
);
4256 next
= fold_binary (PLUS_EXPR
, type
, low
, step
);
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)
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))
4274 record_nonwrapping_chrec (ev
);
4276 record_nonwrapping_iv (loop
, init
, step
, data
->stmt
, low
, high
, false, upper
);
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.*/
4285 infer_loop_bounds_from_ref (class loop
*loop
, gimple
*stmt
, tree ref
)
4287 struct ilb_data data
;
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. */
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
))
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. */
4336 infer_loop_bounds_from_pointer_arith (class loop
*loop
, gimple
*stmt
)
4338 tree def
, base
, step
, scev
, type
, low
, high
;
4341 if (!is_gimple_assign (stmt
)
4342 || gimple_assign_rhs_code (stmt
) != POINTER_PLUS_EXPR
)
4345 def
= gimple_assign_lhs (stmt
);
4346 if (TREE_CODE (def
) != SSA_NAME
)
4349 type
= TREE_TYPE (def
);
4350 if (!nowrap_type_p (type
))
4353 ptr
= gimple_assign_rhs1 (stmt
);
4354 if (!expr_invariant_in_loop_p (loop
, ptr
))
4357 var
= gimple_assign_rhs2 (stmt
);
4358 if (TYPE_PRECISION (type
) != TYPE_PRECISION (TREE_TYPE (var
)))
4361 class loop
*uloop
= loop_containing_stmt (stmt
);
4362 scev
= instantiate_parameters (loop
, analyze_scalar_evolution (uloop
, def
));
4363 if (chrec_contains_undetermined (scev
))
4366 base
= initial_condition_in_loop_num (scev
, loop
->num
);
4367 step
= evolution_part_in_loop_num (scev
, loop
->num
);
4370 || TREE_CODE (step
) != INTEGER_CST
4371 || tree_contains_chrecs (base
, NULL
)
4372 || chrec_contains_symbols_defined_in_loop (base
, loop
->num
))
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
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. */
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
)
4403 def
= gimple_assign_lhs (stmt
);
4405 if (TREE_CODE (def
) != SSA_NAME
)
4408 type
= TREE_TYPE (def
);
4409 if (!INTEGRAL_TYPE_P (type
)
4410 || !TYPE_OVERFLOW_UNDEFINED (type
))
4413 scev
= instantiate_parameters (loop
, analyze_scalar_evolution (loop
, def
));
4414 if (chrec_contains_undetermined (scev
))
4417 base
= initial_condition_in_loop_num (scev
, loop
->num
);
4418 step
= evolution_part_in_loop_num (scev
, loop
->num
);
4421 || TREE_CODE (step
) != INTEGER_CST
4422 || tree_contains_chrecs (base
, NULL
)
4423 || chrec_contains_symbols_defined_in_loop (base
, loop
->num
))
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
4446 - signed variables should not overflow when flag_wrapv is not set.
4450 infer_loop_bounds_from_undefined (class loop
*loop
, basic_block
*bbs
)
4453 gimple_stmt_iterator bsi
;
4457 for (i
= 0; i
< loop
->num_nodes
; 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
);
4475 infer_loop_bounds_from_signedness (loop
, stmt
);
4476 infer_loop_bounds_from_pointer_arith (loop
, stmt
);
4483 /* Compare wide ints, callback for qsort. */
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. */
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
];
4510 else if (wi::ltu_p (index
, bound
))
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. */
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. */
4544 /* If an overflow occurred, ignore the result. */
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 ())
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
;
4574 /* If an overflow occurred, ignore the result. */
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
));
4585 bb_bounds
.put (gimple_bb (elt
->stmt
), index
);
4586 else if ((ptrdiff_t)*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
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. */
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 ())
4623 ptrdiff_t bound_index
= queue_index
;
4627 queue
= queues
[queue_index
];
4630 /* OK, we later inserted the BB with lower priority, skip it. */
4631 if (*block_priority
.get (bb
) > queue_index
)
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
))
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
)))
4654 block_priority
.put (e
->dest
, bound_index
);
4656 else if (*entry
< bound_index
)
4659 *entry
= bound_index
;
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);
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
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
;
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
)
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
)
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
4724 queue
.safe_push (loop
->header
);
4725 visited
= BITMAP_ALLOC (NULL
);
4726 bitmap_set_bit (visited
, loop
->header
->index
);
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
))
4744 if (gimple_has_side_effects (stmt
))
4753 /* If no bounding statement is found, continue the walk. */
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
4769 || (bb
->flags
& BB_IRREDUCIBLE_LOOP
))
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. */
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
,
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. */
4803 get_upper_bound_based_on_builtin_expr_with_prob (gcond
*cond
)
4808 tree lhs
= gimple_cond_lhs (cond
);
4809 if (TREE_CODE (lhs
) != SSA_NAME
)
4812 gimple
*stmt
= SSA_NAME_DEF_STMT (gimple_cond_lhs (cond
));
4813 gcall
*def
= dyn_cast
<gcall
*> (stmt
);
4817 tree decl
= gimple_call_fndecl (def
);
4819 || !fndecl_built_in_p (decl
, BUILT_IN_EXPECT_WITH_PROBABILITY
)
4820 || gimple_call_num_args (stmt
) != 3)
4823 tree c
= gimple_call_arg (def
, 1);
4824 tree condt
= TREE_TYPE (lhs
);
4825 tree res
= fold_build2 (gimple_cond_code (cond
),
4827 gimple_cond_rhs (cond
));
4828 if (TREE_CODE (res
) != INTEGER_CST
)
4832 tree prob
= gimple_call_arg (def
, 2);
4833 tree t
= TREE_TYPE (prob
);
4835 = build_real_from_int_cst (t
,
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
)
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. */
4852 estimate_numbers_of_iterations (class loop
*loop
)
4856 class tree_niter_desc niter_desc
;
4861 /* Give up if we already have tried to compute an estimation. */
4862 if (loop
->estimate_state
!= EST_NOT_COMPUTED
)
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
;
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
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
)
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
);
4907 gcond
*cond
= dyn_cast
<gcond
*> (stmt
);
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
,
4919 if (!number_of_iterations_exit (loop
, ex
, &niter_desc
,
4920 false, false, body
))
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),
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
);
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. */
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. */
4978 estimated_loop_iterations_int (class loop
*loop
)
4981 HOST_WIDE_INT hwi_nit
;
4983 if (!estimated_loop_iterations (loop
, &nit
))
4986 if (!wi::fits_shwi_p (nit
))
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. */
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. */
5014 max_loop_iterations_int (class loop
*loop
)
5017 HOST_WIDE_INT hwi_nit
;
5019 if (!max_loop_iterations (loop
, &nit
))
5022 if (!wi::fits_shwi_p (nit
))
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. */
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. */
5049 likely_max_loop_iterations_int (class loop
*loop
)
5052 HOST_WIDE_INT hwi_nit
;
5054 if (!likely_max_loop_iterations (loop
, &nit
))
5057 if (!wi::fits_shwi_p (nit
))
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. */
5069 estimated_stmt_executions_int (class loop
*loop
)
5071 HOST_WIDE_INT nit
= estimated_loop_iterations_int (loop
);
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. */
5088 max_stmt_executions (class loop
*loop
, widest_int
*nit
)
5090 widest_int nit_minus_one
;
5092 if (!max_loop_iterations (loop
, nit
))
5095 nit_minus_one
= *nit
;
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. */
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
))
5114 nit_minus_one
= *nit
;
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. */
5126 estimated_stmt_executions (class loop
*loop
, widest_int
*nit
)
5128 widest_int nit_minus_one
;
5130 if (!estimated_loop_iterations (loop
, nit
))
5133 nit_minus_one
= *nit
;
5137 return wi::gtu_p (*nit
, nit_minus_one
);
5140 /* Records estimates on numbers of iterations of loops. */
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. */
5158 stmt_dominates_stmt_p (gimple
*s1
, gimple
*s2
)
5160 basic_block bb1
= gimple_bb (s1
), bb2
= gimple_bb (s2
);
5168 gimple_stmt_iterator bsi
;
5170 if (gimple_code (s2
) == GIMPLE_PHI
)
5173 if (gimple_code (s1
) == GIMPLE_PHI
)
5176 for (bsi
= gsi_start_bb (bb1
); gsi_stmt (bsi
) != s2
; gsi_next (&bsi
))
5177 if (gsi_stmt (bsi
) == s1
)
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. */
5200 n_of_executions_at_most (gimple
*stmt
,
5201 class nb_iter_bound
*niter_bound
,
5204 widest_int bound
= widest_int::from (niter_bound
->bound
, SIGNED
);
5205 tree nit_type
= TREE_TYPE (niter
), e
;
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
))
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
))
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
)
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
;
5253 if (gimple_has_side_effects (gsi_stmt (bsi
)))
5257 || !wi::fits_to_tree_p (bound
, nit_type
))
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. */
5271 nowrap_type_p (tree type
)
5273 if (ANY_INTEGRAL_TYPE_P (type
)
5274 && TYPE_OVERFLOW_UNDEFINED (type
))
5277 if (POINTER_TYPE_P (type
))
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. */
5287 loop_exits_before_overflow (tree base
, tree step
,
5288 gimple
*at_stmt
, class loop
*loop
)
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
));
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
),
5330 && integer_nonzerop (e
))
5332 fold_undefer_and_ignore_overflow_warnings ();
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 ();
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
))
5362 /* Only consider control IV with same step. */
5363 if (!operand_equal_p (step
, civ
->step
, 0))
5366 /* Done proving if this is a no-overflow control IV. */
5367 if (operand_equal_p (base
, civ
->base
, 0))
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))
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
5390 if (POINTER_TYPE_P (TREE_TYPE (base
)))
5391 code
= POINTER_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))
5403 if (tree_int_cst_sign_bit (step
))
5406 extreme
= lower_bound_in_type (type
, type
);
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
))
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:
5441 # RANGE [0, 4294967294] NONZERO 65535
5442 # i_21 = PHI <0(3), i_18(9)>
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
5455 # PT = nonlocal escaped
5460 # RANGE [1, 65535] NONZERO 65535
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, ...). */
5480 scev_var_range_cant_overflow (tree var
, tree step
, class loop
*loop
)
5483 wide_int minv
, maxv
, diff
, step_wi
;
5485 if (TREE_CODE (step
) != INTEGER_CST
|| !INTEGRAL_TYPE_P (TREE_TYPE (var
)))
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
))
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 ())
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
;
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. */
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
))
5557 if (integer_zerop (step
))
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
)))
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
)
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
))
5575 if (loop_exits_before_overflow (base
, step
, at_stmt
, loop
))
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
)))
5583 /* At this point we still don't have a proof that the iv does not
5584 overflow: give up. */
5588 /* Frees the information on upper bounds on numbers of iterations of LOOP. */
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
;
5604 loop
->bounds
= NULL
;
5606 for (civ
= loop
->control_ivs
; civ
;)
5608 struct control_iv
*next
= civ
->next
;
5612 loop
->control_ivs
= NULL
;
5615 /* Frees the information on upper bounds on numbers of iterations of loops. */
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
5628 substitute_in_loop_info (class loop
*loop
, tree name
, tree val
)
5630 loop
->nb_iterations
= simplify_replace_tree (loop
->nb_iterations
, name
, val
);