OSDN Git Service

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