OSDN Git Service

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