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