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