]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/gcc/tree-ssa-loop-niter.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / gcc / tree-ssa-loop-niter.c
1 /* Functions to determine/estimate number of iterations of a loop.
2    Copyright (C) 2004, 2005, 2006, 2007 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 2, 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 COPYING.  If not, write to the Free
18 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301, USA.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "rtl.h"
27 #include "tm_p.h"
28 #include "hard-reg-set.h"
29 #include "basic-block.h"
30 #include "output.h"
31 #include "diagnostic.h"
32 #include "intl.h"
33 #include "tree-flow.h"
34 #include "tree-dump.h"
35 #include "cfgloop.h"
36 #include "tree-pass.h"
37 #include "ggc.h"
38 #include "tree-chrec.h"
39 #include "tree-scalar-evolution.h"
40 #include "tree-data-ref.h"
41 #include "params.h"
42 #include "flags.h"
43 #include "toplev.h"
44 #include "tree-inline.h"
45
46 #define SWAP(X, Y) do { void *tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
47
48
49 /*
50
51    Analysis of number of iterations of an affine exit test.
52
53 */
54
55 /* Returns true if ARG is either NULL_TREE or constant zero.  Unlike
56    integer_zerop, it does not care about overflow flags.  */
57
58 bool
59 zero_p (tree arg)
60 {
61   if (!arg)
62     return true;
63
64   if (TREE_CODE (arg) != INTEGER_CST)
65     return false;
66
67   return (TREE_INT_CST_LOW (arg) == 0 && TREE_INT_CST_HIGH (arg) == 0);
68 }
69
70 /* Returns true if ARG a nonzero constant.  Unlike integer_nonzerop, it does
71    not care about overflow flags.  */
72
73 static bool
74 nonzero_p (tree arg)
75 {
76   if (!arg)
77     return false;
78
79   if (TREE_CODE (arg) != INTEGER_CST)
80     return false;
81
82   return (TREE_INT_CST_LOW (arg) != 0 || TREE_INT_CST_HIGH (arg) != 0);
83 }
84
85 /* Returns inverse of X modulo 2^s, where MASK = 2^s-1.  */
86
87 static tree
88 inverse (tree x, tree mask)
89 {
90   tree type = TREE_TYPE (x);
91   tree rslt;
92   unsigned ctr = tree_floor_log2 (mask);
93
94   if (TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
95     {
96       unsigned HOST_WIDE_INT ix;
97       unsigned HOST_WIDE_INT imask;
98       unsigned HOST_WIDE_INT irslt = 1;
99
100       gcc_assert (cst_and_fits_in_hwi (x));
101       gcc_assert (cst_and_fits_in_hwi (mask));
102
103       ix = int_cst_value (x);
104       imask = int_cst_value (mask);
105
106       for (; ctr; ctr--)
107         {
108           irslt *= ix;
109           ix *= ix;
110         }
111       irslt &= imask;
112
113       rslt = build_int_cst_type (type, irslt);
114     }
115   else
116     {
117       rslt = build_int_cst (type, 1);
118       for (; ctr; ctr--)
119         {
120           rslt = int_const_binop (MULT_EXPR, rslt, x, 0);
121           x = int_const_binop (MULT_EXPR, x, x, 0);
122         }
123       rslt = int_const_binop (BIT_AND_EXPR, rslt, mask, 0);
124     }
125
126   return rslt;
127 }
128
129 /* Determines number of iterations of loop whose ending condition
130    is IV <> FINAL.  TYPE is the type of the iv.  The number of
131    iterations is stored to NITER.  NEVER_INFINITE is true if
132    we know that the exit must be taken eventually, i.e., that the IV
133    ever reaches the value FINAL (we derived this earlier, and possibly set
134    NITER->assumptions to make sure this is the case).  */
135
136 static bool
137 number_of_iterations_ne (tree type, affine_iv *iv, tree final,
138                          struct tree_niter_desc *niter, bool never_infinite)
139 {
140   tree niter_type = unsigned_type_for (type);
141   tree s, c, d, bits, assumption, tmp, bound;
142
143   niter->control = *iv;
144   niter->bound = final;
145   niter->cmp = NE_EXPR;
146
147   /* Rearrange the terms so that we get inequality s * i <> c, with s
148      positive.  Also cast everything to the unsigned type.  */
149   if (tree_int_cst_sign_bit (iv->step))
150     {
151       s = fold_convert (niter_type,
152                         fold_build1 (NEGATE_EXPR, type, iv->step));
153       c = fold_build2 (MINUS_EXPR, niter_type,
154                        fold_convert (niter_type, iv->base),
155                        fold_convert (niter_type, final));
156     }
157   else
158     {
159       s = fold_convert (niter_type, iv->step);
160       c = fold_build2 (MINUS_EXPR, niter_type,
161                        fold_convert (niter_type, final),
162                        fold_convert (niter_type, iv->base));
163     }
164
165   /* First the trivial cases -- when the step is 1.  */
166   if (integer_onep (s))
167     {
168       niter->niter = c;
169       return true;
170     }
171
172   /* Let nsd (step, size of mode) = d.  If d does not divide c, the loop
173      is infinite.  Otherwise, the number of iterations is
174      (inverse(s/d) * (c/d)) mod (size of mode/d).  */
175   bits = num_ending_zeros (s);
176   bound = build_low_bits_mask (niter_type,
177                                (TYPE_PRECISION (niter_type)
178                                 - tree_low_cst (bits, 1)));
179
180   d = fold_binary_to_constant (LSHIFT_EXPR, niter_type,
181                                build_int_cst (niter_type, 1), bits);
182   s = fold_binary_to_constant (RSHIFT_EXPR, niter_type, s, bits);
183
184   if (!never_infinite)
185     {
186       /* If we cannot assume that the loop is not infinite, record the
187          assumptions for divisibility of c.  */
188       assumption = fold_build2 (FLOOR_MOD_EXPR, niter_type, c, d);
189       assumption = fold_build2 (EQ_EXPR, boolean_type_node,
190                                 assumption, build_int_cst (niter_type, 0));
191       if (!nonzero_p (assumption))
192         niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
193                                           niter->assumptions, assumption);
194     }
195       
196   c = fold_build2 (EXACT_DIV_EXPR, niter_type, c, d);
197   tmp = fold_build2 (MULT_EXPR, niter_type, c, inverse (s, bound));
198   niter->niter = fold_build2 (BIT_AND_EXPR, niter_type, tmp, bound);
199   return true;
200 }
201
202 /* Checks whether we can determine the final value of the control variable
203    of the loop with ending condition IV0 < IV1 (computed in TYPE).
204    DELTA is the difference IV1->base - IV0->base, STEP is the absolute value
205    of the step.  The assumptions necessary to ensure that the computation
206    of the final value does not overflow are recorded in NITER.  If we
207    find the final value, we adjust DELTA and return TRUE.  Otherwise
208    we return false.  */
209
210 static bool
211 number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
212                                struct tree_niter_desc *niter,
213                                tree *delta, tree step)
214 {
215   tree niter_type = TREE_TYPE (step);
216   tree mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
217   tree tmod;
218   tree assumption = boolean_true_node, bound, noloop;
219
220   if (TREE_CODE (mod) != INTEGER_CST)
221     return false;
222   if (nonzero_p (mod))
223     mod = fold_build2 (MINUS_EXPR, niter_type, step, mod);
224   tmod = fold_convert (type, mod);
225
226   if (nonzero_p (iv0->step))
227     {
228       /* The final value of the iv is iv1->base + MOD, assuming that this
229          computation does not overflow, and that
230          iv0->base <= iv1->base + MOD.  */
231       if (!iv1->no_overflow && !zero_p (mod))
232         {
233           bound = fold_build2 (MINUS_EXPR, type,
234                                TYPE_MAX_VALUE (type), tmod);
235           assumption = fold_build2 (LE_EXPR, boolean_type_node,
236                                     iv1->base, bound);
237           if (zero_p (assumption))
238             return false;
239         }
240       noloop = fold_build2 (GT_EXPR, boolean_type_node,
241                             iv0->base,
242                             fold_build2 (PLUS_EXPR, type,
243                                          iv1->base, tmod));
244     }
245   else
246     {
247       /* The final value of the iv is iv0->base - MOD, assuming that this
248          computation does not overflow, and that
249          iv0->base - MOD <= iv1->base. */
250       if (!iv0->no_overflow && !zero_p (mod))
251         {
252           bound = fold_build2 (PLUS_EXPR, type,
253                                TYPE_MIN_VALUE (type), tmod);
254           assumption = fold_build2 (GE_EXPR, boolean_type_node,
255                                     iv0->base, bound);
256           if (zero_p (assumption))
257             return false;
258         }
259       noloop = fold_build2 (GT_EXPR, boolean_type_node,
260                             fold_build2 (MINUS_EXPR, type,
261                                          iv0->base, tmod),
262                             iv1->base);
263     }
264
265   if (!nonzero_p (assumption))
266     niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
267                                       niter->assumptions,
268                                       assumption);
269   if (!zero_p (noloop))
270     niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
271                                       niter->may_be_zero,
272                                       noloop);
273   *delta = fold_build2 (PLUS_EXPR, niter_type, *delta, mod);
274   return true;
275 }
276
277 /* Add assertions to NITER that ensure that the control variable of the loop
278    with ending condition IV0 < IV1 does not overflow.  Types of IV0 and IV1
279    are TYPE.  Returns false if we can prove that there is an overflow, true
280    otherwise.  STEP is the absolute value of the step.  */
281
282 static bool
283 assert_no_overflow_lt (tree type, affine_iv *iv0, affine_iv *iv1,
284                        struct tree_niter_desc *niter, tree step)
285 {
286   tree bound, d, assumption, diff;
287   tree niter_type = TREE_TYPE (step);
288
289   if (nonzero_p (iv0->step))
290     {
291       /* for (i = iv0->base; i < iv1->base; i += iv0->step) */
292       if (iv0->no_overflow)
293         return true;
294
295       /* If iv0->base is a constant, we can determine the last value before
296          overflow precisely; otherwise we conservatively assume
297          MAX - STEP + 1.  */
298
299       if (TREE_CODE (iv0->base) == INTEGER_CST)
300         {
301           d = fold_build2 (MINUS_EXPR, niter_type,
302                            fold_convert (niter_type, TYPE_MAX_VALUE (type)),
303                            fold_convert (niter_type, iv0->base));
304           diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
305         }
306       else
307         diff = fold_build2 (MINUS_EXPR, niter_type, step,
308                             build_int_cst (niter_type, 1));
309       bound = fold_build2 (MINUS_EXPR, type,
310                            TYPE_MAX_VALUE (type), fold_convert (type, diff));
311       assumption = fold_build2 (LE_EXPR, boolean_type_node,
312                                 iv1->base, bound);
313     }
314   else
315     {
316       /* for (i = iv1->base; i > iv0->base; i += iv1->step) */
317       if (iv1->no_overflow)
318         return true;
319
320       if (TREE_CODE (iv1->base) == INTEGER_CST)
321         {
322           d = fold_build2 (MINUS_EXPR, niter_type,
323                            fold_convert (niter_type, iv1->base),
324                            fold_convert (niter_type, TYPE_MIN_VALUE (type)));
325           diff = fold_build2 (FLOOR_MOD_EXPR, niter_type, d, step);
326         }
327       else
328         diff = fold_build2 (MINUS_EXPR, niter_type, step,
329                             build_int_cst (niter_type, 1));
330       bound = fold_build2 (PLUS_EXPR, type,
331                            TYPE_MIN_VALUE (type), fold_convert (type, diff));
332       assumption = fold_build2 (GE_EXPR, boolean_type_node,
333                                 iv0->base, bound);
334     }
335
336   if (zero_p (assumption))
337     return false;
338   if (!nonzero_p (assumption))
339     niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
340                                       niter->assumptions, assumption);
341     
342   iv0->no_overflow = true;
343   iv1->no_overflow = true;
344   return true;
345 }
346
347 /* Add an assumption to NITER that a loop whose ending condition
348    is IV0 < IV1 rolls.  TYPE is the type of the control iv.  */
349
350 static void
351 assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
352                       struct tree_niter_desc *niter)
353 {
354   tree assumption = boolean_true_node, bound, diff;
355   tree mbz, mbzl, mbzr;
356
357   if (nonzero_p (iv0->step))
358     {
359       diff = fold_build2 (MINUS_EXPR, type,
360                           iv0->step, build_int_cst (type, 1));
361
362       /* We need to know that iv0->base >= MIN + iv0->step - 1.  Since
363          0 address never belongs to any object, we can assume this for
364          pointers.  */
365       if (!POINTER_TYPE_P (type))
366         {
367           bound = fold_build2 (PLUS_EXPR, type,
368                                TYPE_MIN_VALUE (type), diff);
369           assumption = fold_build2 (GE_EXPR, boolean_type_node,
370                                     iv0->base, bound);
371         }
372
373       /* And then we can compute iv0->base - diff, and compare it with
374          iv1->base.  */      
375       mbzl = fold_build2 (MINUS_EXPR, type, iv0->base, diff);
376       mbzr = iv1->base;
377     }
378   else
379     {
380       diff = fold_build2 (PLUS_EXPR, type,
381                           iv1->step, build_int_cst (type, 1));
382
383       if (!POINTER_TYPE_P (type))
384         {
385           bound = fold_build2 (PLUS_EXPR, type,
386                                TYPE_MAX_VALUE (type), diff);
387           assumption = fold_build2 (LE_EXPR, boolean_type_node,
388                                     iv1->base, bound);
389         }
390
391       mbzl = iv0->base;
392       mbzr = fold_build2 (MINUS_EXPR, type, iv1->base, diff);
393     }
394
395   mbz = fold_build2 (GT_EXPR, boolean_type_node, mbzl, mbzr);
396
397   if (!nonzero_p (assumption))
398     niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
399                                       niter->assumptions, assumption);
400   if (!zero_p (mbz))
401     niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
402                                       niter->may_be_zero, mbz);
403 }
404
405 /* Determines number of iterations of loop whose ending condition
406    is IV0 < IV1.  TYPE is the type of the iv.  The number of
407    iterations is stored to NITER.  */
408
409 static bool
410 number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
411                          struct tree_niter_desc *niter,
412                          bool never_infinite ATTRIBUTE_UNUSED)
413 {
414   tree niter_type = unsigned_type_for (type);
415   tree delta, step, s;
416
417   if (nonzero_p (iv0->step))
418     {
419       niter->control = *iv0;
420       niter->cmp = LT_EXPR;
421       niter->bound = iv1->base;
422     }
423   else
424     {
425       niter->control = *iv1;
426       niter->cmp = GT_EXPR;
427       niter->bound = iv0->base;
428     }
429
430   delta = fold_build2 (MINUS_EXPR, niter_type,
431                        fold_convert (niter_type, iv1->base),
432                        fold_convert (niter_type, iv0->base));
433
434   /* First handle the special case that the step is +-1.  */
435   if ((iv0->step && integer_onep (iv0->step)
436        && zero_p (iv1->step))
437       || (iv1->step && integer_all_onesp (iv1->step)
438           && zero_p (iv0->step)))
439     {
440       /* for (i = iv0->base; i < iv1->base; i++)
441
442          or
443
444          for (i = iv1->base; i > iv0->base; i--).
445              
446          In both cases # of iterations is iv1->base - iv0->base, assuming that
447          iv1->base >= iv0->base.  */
448       niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
449                                         iv1->base, iv0->base);
450       niter->niter = delta;
451       return true;
452     }
453
454   if (nonzero_p (iv0->step))
455     step = fold_convert (niter_type, iv0->step);
456   else
457     step = fold_convert (niter_type,
458                          fold_build1 (NEGATE_EXPR, type, iv1->step));
459
460   /* If we can determine the final value of the control iv exactly, we can
461      transform the condition to != comparison.  In particular, this will be
462      the case if DELTA is constant.  */
463   if (number_of_iterations_lt_to_ne (type, iv0, iv1, niter, &delta, step))
464     {
465       affine_iv zps;
466
467       zps.base = build_int_cst (niter_type, 0);
468       zps.step = step;
469       /* number_of_iterations_lt_to_ne will add assumptions that ensure that
470          zps does not overflow.  */
471       zps.no_overflow = true;
472
473       return number_of_iterations_ne (type, &zps, delta, niter, true);
474     }
475
476   /* Make sure that the control iv does not overflow.  */
477   if (!assert_no_overflow_lt (type, iv0, iv1, niter, step))
478     return false;
479
480   /* We determine the number of iterations as (delta + step - 1) / step.  For
481      this to work, we must know that iv1->base >= iv0->base - step + 1,
482      otherwise the loop does not roll.  */
483   assert_loop_rolls_lt (type, iv0, iv1, niter);
484
485   s = fold_build2 (MINUS_EXPR, niter_type,
486                    step, build_int_cst (niter_type, 1));
487   delta = fold_build2 (PLUS_EXPR, niter_type, delta, s);
488   niter->niter = fold_build2 (FLOOR_DIV_EXPR, niter_type, delta, step);
489   return true;
490 }
491
492 /* Determines number of iterations of loop whose ending condition
493    is IV0 <= IV1.  TYPE is the type of the iv.  The number of
494    iterations is stored to NITER.  NEVER_INFINITE is true if
495    we know that this condition must eventually become false (we derived this
496    earlier, and possibly set NITER->assumptions to make sure this
497    is the case).  */
498
499 static bool
500 number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
501                          struct tree_niter_desc *niter, bool never_infinite)
502 {
503   tree assumption;
504
505   /* Say that IV0 is the control variable.  Then IV0 <= IV1 iff
506      IV0 < IV1 + 1, assuming that IV1 is not equal to the greatest
507      value of the type.  This we must know anyway, since if it is
508      equal to this value, the loop rolls forever.  */
509
510   if (!never_infinite)
511     {
512       if (nonzero_p (iv0->step))
513         assumption = fold_build2 (NE_EXPR, boolean_type_node,
514                                   iv1->base, TYPE_MAX_VALUE (type));
515       else
516         assumption = fold_build2 (NE_EXPR, boolean_type_node,
517                                   iv0->base, TYPE_MIN_VALUE (type));
518
519       if (zero_p (assumption))
520         return false;
521       if (!nonzero_p (assumption))
522         niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
523                                           niter->assumptions, assumption);
524     }
525
526   if (nonzero_p (iv0->step))
527     iv1->base = fold_build2 (PLUS_EXPR, type,
528                              iv1->base, build_int_cst (type, 1));
529   else
530     iv0->base = fold_build2 (MINUS_EXPR, type,
531                              iv0->base, build_int_cst (type, 1));
532   return number_of_iterations_lt (type, iv0, iv1, niter, never_infinite);
533 }
534
535 /* Determine the number of iterations according to condition (for staying
536    inside loop) which compares two induction variables using comparison
537    operator CODE.  The induction variable on left side of the comparison
538    is IV0, the right-hand side is IV1.  Both induction variables must have
539    type TYPE, which must be an integer or pointer type.  The steps of the
540    ivs must be constants (or NULL_TREE, which is interpreted as constant zero).
541
542    ONLY_EXIT is true if we are sure this is the only way the loop could be
543    exited (including possibly non-returning function calls, exceptions, etc.)
544    -- in this case we can use the information whether the control induction
545    variables can overflow or not in a more efficient way.
546    
547    The results (number of iterations and assumptions as described in
548    comments at struct tree_niter_desc in tree-flow.h) are stored to NITER.
549    Returns false if it fails to determine number of iterations, true if it
550    was determined (possibly with some assumptions).  */
551
552 static bool
553 number_of_iterations_cond (tree type, affine_iv *iv0, enum tree_code code,
554                            affine_iv *iv1, struct tree_niter_desc *niter,
555                            bool only_exit)
556 {
557   bool never_infinite;
558
559   /* The meaning of these assumptions is this:
560      if !assumptions
561        then the rest of information does not have to be valid
562      if may_be_zero then the loop does not roll, even if
563        niter != 0.  */
564   niter->assumptions = boolean_true_node;
565   niter->may_be_zero = boolean_false_node;
566   niter->niter = NULL_TREE;
567   niter->additional_info = boolean_true_node;
568
569   niter->bound = NULL_TREE;
570   niter->cmp = ERROR_MARK;
571
572   /* Make < comparison from > ones, and for NE_EXPR comparisons, ensure that
573      the control variable is on lhs.  */
574   if (code == GE_EXPR || code == GT_EXPR
575       || (code == NE_EXPR && zero_p (iv0->step)))
576     {
577       SWAP (iv0, iv1);
578       code = swap_tree_comparison (code);
579     }
580
581   if (!only_exit)
582     {
583       /* If this is not the only possible exit from the loop, the information
584          that the induction variables cannot overflow as derived from
585          signedness analysis cannot be relied upon.  We use them e.g. in the
586          following way:  given loop for (i = 0; i <= n; i++), if i is
587          signed, it cannot overflow, thus this loop is equivalent to
588          for (i = 0; i < n + 1; i++);  however, if n == MAX, but the loop
589          is exited in some other way before i overflows, this transformation
590          is incorrect (the new loop exits immediately).  */
591       iv0->no_overflow = false;
592       iv1->no_overflow = false;
593     }
594
595   if (POINTER_TYPE_P (type))
596     {
597       /* Comparison of pointers is undefined unless both iv0 and iv1 point
598          to the same object.  If they do, the control variable cannot wrap
599          (as wrap around the bounds of memory will never return a pointer
600          that would be guaranteed to point to the same object, even if we
601          avoid undefined behavior by casting to size_t and back).  The
602          restrictions on pointer arithmetics and comparisons of pointers
603          ensure that using the no-overflow assumptions is correct in this
604          case even if ONLY_EXIT is false.  */
605       iv0->no_overflow = true;
606       iv1->no_overflow = true;
607     }
608
609   /* If the control induction variable does not overflow, the loop obviously
610      cannot be infinite.  */
611   if (!zero_p (iv0->step) && iv0->no_overflow)
612     never_infinite = true;
613   else if (!zero_p (iv1->step) && iv1->no_overflow)
614     never_infinite = true;
615   else
616     never_infinite = false;
617
618   /* We can handle the case when neither of the sides of the comparison is
619      invariant, provided that the test is NE_EXPR.  This rarely occurs in
620      practice, but it is simple enough to manage.  */
621   if (!zero_p (iv0->step) && !zero_p (iv1->step))
622     {
623       if (code != NE_EXPR)
624         return false;
625
626       iv0->step = fold_binary_to_constant (MINUS_EXPR, type,
627                                            iv0->step, iv1->step);
628       iv0->no_overflow = false;
629       iv1->step = NULL_TREE;
630       iv1->no_overflow = true;
631     }
632
633   /* If the result of the comparison is a constant,  the loop is weird.  More
634      precise handling would be possible, but the situation is not common enough
635      to waste time on it.  */
636   if (zero_p (iv0->step) && zero_p (iv1->step))
637     return false;
638
639   /* Ignore loops of while (i-- < 10) type.  */
640   if (code != NE_EXPR)
641     {
642       if (iv0->step && tree_int_cst_sign_bit (iv0->step))
643         return false;
644
645       if (!zero_p (iv1->step) && !tree_int_cst_sign_bit (iv1->step))
646         return false;
647     }
648
649   /* If the loop exits immediately, there is nothing to do.  */
650   if (zero_p (fold_build2 (code, boolean_type_node, iv0->base, iv1->base)))
651     {
652       niter->niter = build_int_cst (unsigned_type_for (type), 0);
653       return true;
654     }
655
656   /* OK, now we know we have a senseful loop.  Handle several cases, depending
657      on what comparison operator is used.  */
658   switch (code)
659     {
660     case NE_EXPR:
661       gcc_assert (zero_p (iv1->step));
662       return number_of_iterations_ne (type, iv0, iv1->base, niter, never_infinite);
663     case LT_EXPR:
664       return number_of_iterations_lt (type, iv0, iv1, niter, never_infinite);
665     case LE_EXPR:
666       return number_of_iterations_le (type, iv0, iv1, niter, never_infinite);
667     default:
668       gcc_unreachable ();
669     }
670 }
671
672 /* Substitute NEW for OLD in EXPR and fold the result.  */
673
674 static tree
675 simplify_replace_tree (tree expr, tree old, tree new)
676 {
677   unsigned i, n;
678   tree ret = NULL_TREE, e, se;
679
680   if (!expr)
681     return NULL_TREE;
682
683   if (expr == old
684       || operand_equal_p (expr, old, 0))
685     return unshare_expr (new);
686
687   if (!EXPR_P (expr))
688     return expr;
689
690   n = TREE_CODE_LENGTH (TREE_CODE (expr));
691   for (i = 0; i < n; i++)
692     {
693       e = TREE_OPERAND (expr, i);
694       se = simplify_replace_tree (e, old, new);
695       if (e == se)
696         continue;
697
698       if (!ret)
699         ret = copy_node (expr);
700
701       TREE_OPERAND (ret, i) = se;
702     }
703
704   return (ret ? fold (ret) : expr);
705 }
706
707 /* Expand definitions of ssa names in EXPR as long as they are simple
708    enough, and return the new expression.  */
709
710 tree
711 expand_simple_operations (tree expr)
712 {
713   unsigned i, n;
714   tree ret = NULL_TREE, e, ee, stmt;
715   enum tree_code code;
716
717   if (expr == NULL_TREE)
718     return expr;
719
720   if (is_gimple_min_invariant (expr))
721     return expr;
722
723   code = TREE_CODE (expr);
724   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
725     {
726       n = TREE_CODE_LENGTH (code);
727       for (i = 0; i < n; i++)
728         {
729           e = TREE_OPERAND (expr, i);
730           ee = expand_simple_operations (e);
731           if (e == ee)
732             continue;
733
734           if (!ret)
735             ret = copy_node (expr);
736
737           TREE_OPERAND (ret, i) = ee;
738         }
739
740       if (!ret)
741         return expr;
742
743       fold_defer_overflow_warnings ();
744       ret = fold (ret);
745       fold_undefer_and_ignore_overflow_warnings ();
746       return ret;
747     }
748
749   if (TREE_CODE (expr) != SSA_NAME)
750     return expr;
751
752   stmt = SSA_NAME_DEF_STMT (expr);
753   if (TREE_CODE (stmt) != MODIFY_EXPR)
754     return expr;
755
756   e = TREE_OPERAND (stmt, 1);
757   if (/* Casts are simple.  */
758       TREE_CODE (e) != NOP_EXPR
759       && TREE_CODE (e) != CONVERT_EXPR
760       /* Copies are simple.  */
761       && TREE_CODE (e) != SSA_NAME
762       /* Assignments of invariants are simple.  */
763       && !is_gimple_min_invariant (e)
764       /* And increments and decrements by a constant are simple.  */
765       && !((TREE_CODE (e) == PLUS_EXPR
766             || TREE_CODE (e) == MINUS_EXPR)
767            && is_gimple_min_invariant (TREE_OPERAND (e, 1))))
768     return expr;
769
770   return expand_simple_operations (e);
771 }
772
773 /* Tries to simplify EXPR using the condition COND.  Returns the simplified
774    expression (or EXPR unchanged, if no simplification was possible).  */
775
776 static tree
777 tree_simplify_using_condition_1 (tree cond, tree expr)
778 {
779   bool changed;
780   tree e, te, e0, e1, e2, notcond;
781   enum tree_code code = TREE_CODE (expr);
782
783   if (code == INTEGER_CST)
784     return expr;
785
786   if (code == TRUTH_OR_EXPR
787       || code == TRUTH_AND_EXPR
788       || code == COND_EXPR)
789     {
790       changed = false;
791
792       e0 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 0));
793       if (TREE_OPERAND (expr, 0) != e0)
794         changed = true;
795
796       e1 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 1));
797       if (TREE_OPERAND (expr, 1) != e1)
798         changed = true;
799
800       if (code == COND_EXPR)
801         {
802           e2 = tree_simplify_using_condition_1 (cond, TREE_OPERAND (expr, 2));
803           if (TREE_OPERAND (expr, 2) != e2)
804             changed = true;
805         }
806       else
807         e2 = NULL_TREE;
808
809       if (changed)
810         {
811           if (code == COND_EXPR)
812             expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
813           else
814             expr = fold_build2 (code, boolean_type_node, e0, e1);
815         }
816
817       return expr;
818     }
819
820   /* In case COND is equality, we may be able to simplify EXPR by copy/constant
821      propagation, and vice versa.  Fold does not handle this, since it is
822      considered too expensive.  */
823   if (TREE_CODE (cond) == EQ_EXPR)
824     {
825       e0 = TREE_OPERAND (cond, 0);
826       e1 = TREE_OPERAND (cond, 1);
827
828       /* We know that e0 == e1.  Check whether we cannot simplify expr
829          using this fact.  */
830       e = simplify_replace_tree (expr, e0, e1);
831       if (zero_p (e) || nonzero_p (e))
832         return e;
833
834       e = simplify_replace_tree (expr, e1, e0);
835       if (zero_p (e) || nonzero_p (e))
836         return e;
837     }
838   if (TREE_CODE (expr) == EQ_EXPR)
839     {
840       e0 = TREE_OPERAND (expr, 0);
841       e1 = TREE_OPERAND (expr, 1);
842
843       /* If e0 == e1 (EXPR) implies !COND, then EXPR cannot be true.  */
844       e = simplify_replace_tree (cond, e0, e1);
845       if (zero_p (e))
846         return e;
847       e = simplify_replace_tree (cond, e1, e0);
848       if (zero_p (e))
849         return e;
850     }
851   if (TREE_CODE (expr) == NE_EXPR)
852     {
853       e0 = TREE_OPERAND (expr, 0);
854       e1 = TREE_OPERAND (expr, 1);
855
856       /* If e0 == e1 (!EXPR) implies !COND, then EXPR must be true.  */
857       e = simplify_replace_tree (cond, e0, e1);
858       if (zero_p (e))
859         return boolean_true_node;
860       e = simplify_replace_tree (cond, e1, e0);
861       if (zero_p (e))
862         return boolean_true_node;
863     }
864
865   te = expand_simple_operations (expr);
866
867   /* Check whether COND ==> EXPR.  */
868   notcond = invert_truthvalue (cond);
869   e = fold_binary (TRUTH_OR_EXPR, boolean_type_node, notcond, te);
870   if (nonzero_p (e))
871     return e;
872
873   /* Check whether COND ==> not EXPR.  */
874   e = fold_binary (TRUTH_AND_EXPR, boolean_type_node, cond, te);
875   if (e && zero_p (e))
876     return e;
877
878   return expr;
879 }
880
881 /* Tries to simplify EXPR using the condition COND.  Returns the simplified
882    expression (or EXPR unchanged, if no simplification was possible).
883    Wrapper around tree_simplify_using_condition_1 that ensures that chains
884    of simple operations in definitions of ssa names in COND are expanded,
885    so that things like casts or incrementing the value of the bound before
886    the loop do not cause us to fail.  */
887
888 static tree
889 tree_simplify_using_condition (tree cond, tree expr)
890 {
891   cond = expand_simple_operations (cond);
892
893   return tree_simplify_using_condition_1 (cond, expr);
894 }
895
896 /* The maximum number of dominator BBs we search for conditions
897    of loop header copies we use for simplifying a conditional
898    expression.  */
899 #define MAX_DOMINATORS_TO_WALK 8
900
901 /* Tries to simplify EXPR using the conditions on entry to LOOP.
902    Record the conditions used for simplification to CONDS_USED.
903    Returns the simplified expression (or EXPR unchanged, if no
904    simplification was possible).*/
905
906 static tree
907 simplify_using_initial_conditions (struct loop *loop, tree expr,
908                                    tree *conds_used)
909 {
910   edge e;
911   basic_block bb;
912   tree exp, cond;
913   int cnt = 0;
914
915   if (TREE_CODE (expr) == INTEGER_CST)
916     return expr;
917
918   /* Limit walking the dominators to avoid quadraticness in
919      the number of BBs times the number of loops in degenerate
920      cases.  */
921   for (bb = loop->header;
922        bb != ENTRY_BLOCK_PTR && cnt < MAX_DOMINATORS_TO_WALK;
923        bb = get_immediate_dominator (CDI_DOMINATORS, bb))
924     {
925       if (!single_pred_p (bb))
926         continue;
927       e = single_pred_edge (bb);
928
929       if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
930         continue;
931
932       cond = COND_EXPR_COND (last_stmt (e->src));
933       if (e->flags & EDGE_FALSE_VALUE)
934         cond = invert_truthvalue (cond);
935       exp = tree_simplify_using_condition (cond, expr);
936
937       if (exp != expr)
938         *conds_used = fold_build2 (TRUTH_AND_EXPR,
939                                    boolean_type_node,
940                                    *conds_used,
941                                    cond);
942
943       expr = exp;
944       ++cnt;
945     }
946
947   return expr;
948 }
949
950 /* Tries to simplify EXPR using the evolutions of the loop invariants
951    in the superloops of LOOP.  Returns the simplified expression
952    (or EXPR unchanged, if no simplification was possible).  */
953
954 static tree
955 simplify_using_outer_evolutions (struct loop *loop, tree expr)
956 {
957   enum tree_code code = TREE_CODE (expr);
958   bool changed;
959   tree e, e0, e1, e2;
960
961   if (is_gimple_min_invariant (expr))
962     return expr;
963
964   if (code == TRUTH_OR_EXPR
965       || code == TRUTH_AND_EXPR
966       || code == COND_EXPR)
967     {
968       changed = false;
969
970       e0 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 0));
971       if (TREE_OPERAND (expr, 0) != e0)
972         changed = true;
973
974       e1 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 1));
975       if (TREE_OPERAND (expr, 1) != e1)
976         changed = true;
977
978       if (code == COND_EXPR)
979         {
980           e2 = simplify_using_outer_evolutions (loop, TREE_OPERAND (expr, 2));
981           if (TREE_OPERAND (expr, 2) != e2)
982             changed = true;
983         }
984       else
985         e2 = NULL_TREE;
986
987       if (changed)
988         {
989           if (code == COND_EXPR)
990             expr = fold_build3 (code, boolean_type_node, e0, e1, e2);
991           else
992             expr = fold_build2 (code, boolean_type_node, e0, e1);
993         }
994
995       return expr;
996     }
997
998   e = instantiate_parameters (loop, expr);
999   if (is_gimple_min_invariant (e))
1000     return e;
1001
1002   return expr;
1003 }
1004
1005 /* Returns true if EXIT is the only possible exit from LOOP.  */
1006
1007 static bool
1008 loop_only_exit_p (struct loop *loop, edge exit)
1009 {
1010   basic_block *body;
1011   block_stmt_iterator bsi;
1012   unsigned i;
1013   tree call;
1014
1015   if (exit != loop->single_exit)
1016     return false;
1017
1018   body = get_loop_body (loop);
1019   for (i = 0; i < loop->num_nodes; i++)
1020     {
1021       for (bsi = bsi_start (body[0]); !bsi_end_p (bsi); bsi_next (&bsi))
1022         {
1023           call = get_call_expr_in (bsi_stmt (bsi));
1024           if (call && TREE_SIDE_EFFECTS (call))
1025             {
1026               free (body);
1027               return false;
1028             }
1029         }
1030     }
1031
1032   free (body);
1033   return true;
1034 }
1035
1036 /* Stores description of number of iterations of LOOP derived from
1037    EXIT (an exit edge of the LOOP) in NITER.  Returns true if some
1038    useful information could be derived (and fields of NITER has
1039    meaning described in comments at struct tree_niter_desc
1040    declaration), false otherwise.  If WARN is true and
1041    -Wunsafe-loop-optimizations was given, warn if the optimizer is going to use
1042    potentially unsafe assumptions.  */
1043
1044 bool
1045 number_of_iterations_exit (struct loop *loop, edge exit,
1046                            struct tree_niter_desc *niter,
1047                            bool warn)
1048 {
1049   tree stmt, cond, type;
1050   tree op0, op1;
1051   enum tree_code code;
1052   affine_iv iv0, iv1;
1053
1054   if (!dominated_by_p (CDI_DOMINATORS, loop->latch, exit->src))
1055     return false;
1056
1057   niter->assumptions = boolean_false_node;
1058   stmt = last_stmt (exit->src);
1059   if (!stmt || TREE_CODE (stmt) != COND_EXPR)
1060     return false;
1061
1062   /* We want the condition for staying inside loop.  */
1063   cond = COND_EXPR_COND (stmt);
1064   if (exit->flags & EDGE_TRUE_VALUE)
1065     cond = invert_truthvalue (cond);
1066
1067   code = TREE_CODE (cond);
1068   switch (code)
1069     {
1070     case GT_EXPR:
1071     case GE_EXPR:
1072     case NE_EXPR:
1073     case LT_EXPR:
1074     case LE_EXPR:
1075       break;
1076
1077     default:
1078       return false;
1079     }
1080   
1081   op0 = TREE_OPERAND (cond, 0);
1082   op1 = TREE_OPERAND (cond, 1);
1083   type = TREE_TYPE (op0);
1084
1085   if (TREE_CODE (type) != INTEGER_TYPE
1086       && !POINTER_TYPE_P (type))
1087     return false;
1088      
1089   if (!simple_iv (loop, stmt, op0, &iv0, false))
1090     return false;
1091   if (!simple_iv (loop, stmt, op1, &iv1, false))
1092     return false;
1093
1094   /* We don't want to see undefined signed overflow warnings while
1095      computing the nmber of iterations.  */
1096   fold_defer_overflow_warnings ();
1097
1098   iv0.base = expand_simple_operations (iv0.base);
1099   iv1.base = expand_simple_operations (iv1.base);
1100   if (!number_of_iterations_cond (type, &iv0, code, &iv1, niter,
1101                                   loop_only_exit_p (loop, exit)))
1102     {
1103       fold_undefer_and_ignore_overflow_warnings ();
1104       return false;
1105     }
1106
1107   if (optimize >= 3)
1108     {
1109       niter->assumptions = simplify_using_outer_evolutions (loop,
1110                                                             niter->assumptions);
1111       niter->may_be_zero = simplify_using_outer_evolutions (loop,
1112                                                             niter->may_be_zero);
1113       niter->niter = simplify_using_outer_evolutions (loop, niter->niter);
1114     }
1115
1116   niter->additional_info = boolean_true_node;
1117   niter->assumptions
1118           = simplify_using_initial_conditions (loop,
1119                                                niter->assumptions,
1120                                                &niter->additional_info);
1121   niter->may_be_zero
1122           = simplify_using_initial_conditions (loop,
1123                                                niter->may_be_zero,
1124                                                &niter->additional_info);
1125
1126   fold_undefer_and_ignore_overflow_warnings ();
1127
1128   if (integer_onep (niter->assumptions))
1129     return true;
1130
1131   /* With -funsafe-loop-optimizations we assume that nothing bad can happen.
1132      But if we can prove that there is overflow or some other source of weird
1133      behavior, ignore the loop even with -funsafe-loop-optimizations.  */
1134   if (integer_zerop (niter->assumptions))
1135     return false;
1136
1137   if (flag_unsafe_loop_optimizations)
1138     niter->assumptions = boolean_true_node;
1139
1140   if (warn)
1141     {
1142       const char *wording;
1143       location_t loc = EXPR_LOCATION (stmt);
1144   
1145       /* We can provide a more specific warning if one of the operator is
1146          constant and the other advances by +1 or -1.  */
1147       if (!zero_p (iv1.step)
1148           ? (zero_p (iv0.step)
1149              && (integer_onep (iv1.step) || integer_all_onesp (iv1.step)))
1150           : (iv0.step
1151              && (integer_onep (iv0.step) || integer_all_onesp (iv0.step))))
1152         wording =
1153           flag_unsafe_loop_optimizations
1154           ? N_("assuming that the loop is not infinite")
1155           : N_("cannot optimize possibly infinite loops");
1156       else
1157         wording = 
1158           flag_unsafe_loop_optimizations
1159           ? N_("assuming that the loop counter does not overflow")
1160           : N_("cannot optimize loop, the loop counter may overflow");
1161
1162       if (LOCATION_LINE (loc) > 0)
1163         warning (OPT_Wunsafe_loop_optimizations, "%H%s", &loc, gettext (wording));
1164       else
1165         warning (OPT_Wunsafe_loop_optimizations, "%s", gettext (wording));
1166     }
1167
1168   return flag_unsafe_loop_optimizations;
1169 }
1170
1171 /* Try to determine the number of iterations of LOOP.  If we succeed,
1172    expression giving number of iterations is returned and *EXIT is
1173    set to the edge from that the information is obtained.  Otherwise
1174    chrec_dont_know is returned.  */
1175
1176 tree
1177 find_loop_niter (struct loop *loop, edge *exit)
1178 {
1179   unsigned n_exits, i;
1180   edge *exits = get_loop_exit_edges (loop, &n_exits);
1181   edge ex;
1182   tree niter = NULL_TREE, aniter;
1183   struct tree_niter_desc desc;
1184
1185   *exit = NULL;
1186   for (i = 0; i < n_exits; i++)
1187     {
1188       ex = exits[i];
1189       if (!just_once_each_iteration_p (loop, ex->src))
1190         continue;
1191
1192       if (!number_of_iterations_exit (loop, ex, &desc, false))
1193         continue;
1194
1195       if (nonzero_p (desc.may_be_zero))
1196         {
1197           /* We exit in the first iteration through this exit.
1198              We won't find anything better.  */
1199           niter = build_int_cst (unsigned_type_node, 0);
1200           *exit = ex;
1201           break;
1202         }
1203
1204       if (!zero_p (desc.may_be_zero))
1205         continue;
1206
1207       aniter = desc.niter;
1208
1209       if (!niter)
1210         {
1211           /* Nothing recorded yet.  */
1212           niter = aniter;
1213           *exit = ex;
1214           continue;
1215         }
1216
1217       /* Prefer constants, the lower the better.  */
1218       if (TREE_CODE (aniter) != INTEGER_CST)
1219         continue;
1220
1221       if (TREE_CODE (niter) != INTEGER_CST)
1222         {
1223           niter = aniter;
1224           *exit = ex;
1225           continue;
1226         }
1227
1228       if (tree_int_cst_lt (aniter, niter))
1229         {
1230           niter = aniter;
1231           *exit = ex;
1232           continue;
1233         }
1234     }
1235   free (exits);
1236
1237   return niter ? niter : chrec_dont_know;
1238 }
1239
1240 /*
1241
1242    Analysis of a number of iterations of a loop by a brute-force evaluation.
1243
1244 */
1245
1246 /* Bound on the number of iterations we try to evaluate.  */
1247
1248 #define MAX_ITERATIONS_TO_TRACK \
1249   ((unsigned) PARAM_VALUE (PARAM_MAX_ITERATIONS_TO_TRACK))
1250
1251 /* Returns the loop phi node of LOOP such that ssa name X is derived from its
1252    result by a chain of operations such that all but exactly one of their
1253    operands are constants.  */
1254
1255 static tree
1256 chain_of_csts_start (struct loop *loop, tree x)
1257 {
1258   tree stmt = SSA_NAME_DEF_STMT (x);
1259   tree use;
1260   basic_block bb = bb_for_stmt (stmt);
1261
1262   if (!bb
1263       || !flow_bb_inside_loop_p (loop, bb))
1264     return NULL_TREE;
1265   
1266   if (TREE_CODE (stmt) == PHI_NODE)
1267     {
1268       if (bb == loop->header)
1269         return stmt;
1270
1271       return NULL_TREE;
1272     }
1273
1274   if (TREE_CODE (stmt) != MODIFY_EXPR)
1275     return NULL_TREE;
1276
1277   if (!ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
1278     return NULL_TREE;
1279   if (SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF) == NULL_DEF_OPERAND_P)
1280     return NULL_TREE;
1281
1282   use = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1283   if (use == NULL_USE_OPERAND_P)
1284     return NULL_TREE;
1285
1286   return chain_of_csts_start (loop, use);
1287 }
1288
1289 /* Determines whether the expression X is derived from a result of a phi node
1290    in header of LOOP such that
1291
1292    * the derivation of X consists only from operations with constants
1293    * the initial value of the phi node is constant
1294    * the value of the phi node in the next iteration can be derived from the
1295      value in the current iteration by a chain of operations with constants.
1296    
1297    If such phi node exists, it is returned.  If X is a constant, X is returned
1298    unchanged.  Otherwise NULL_TREE is returned.  */
1299
1300 static tree
1301 get_base_for (struct loop *loop, tree x)
1302 {
1303   tree phi, init, next;
1304
1305   if (is_gimple_min_invariant (x))
1306     return x;
1307
1308   phi = chain_of_csts_start (loop, x);
1309   if (!phi)
1310     return NULL_TREE;
1311
1312   init = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
1313   next = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop));
1314
1315   if (TREE_CODE (next) != SSA_NAME)
1316     return NULL_TREE;
1317
1318   if (!is_gimple_min_invariant (init))
1319     return NULL_TREE;
1320
1321   if (chain_of_csts_start (loop, next) != phi)
1322     return NULL_TREE;
1323
1324   return phi;
1325 }
1326
1327 /* Given an expression X, then 
1328  
1329    * if X is NULL_TREE, we return the constant BASE.
1330    * otherwise X is a SSA name, whose value in the considered loop is derived
1331      by a chain of operations with constant from a result of a phi node in
1332      the header of the loop.  Then we return value of X when the value of the
1333      result of this phi node is given by the constant BASE.  */
1334
1335 static tree
1336 get_val_for (tree x, tree base)
1337 {
1338   tree stmt, nx, val;
1339   use_operand_p op;
1340   ssa_op_iter iter;
1341
1342   gcc_assert (is_gimple_min_invariant (base));
1343
1344   if (!x)
1345     return base;
1346
1347   stmt = SSA_NAME_DEF_STMT (x);
1348   if (TREE_CODE (stmt) == PHI_NODE)
1349     return base;
1350
1351   FOR_EACH_SSA_USE_OPERAND (op, stmt, iter, SSA_OP_USE)
1352     {
1353       nx = USE_FROM_PTR (op);
1354       val = get_val_for (nx, base);
1355       SET_USE (op, val);
1356       val = fold (TREE_OPERAND (stmt, 1));
1357       SET_USE (op, nx);
1358       /* only iterate loop once.  */
1359       return val;
1360     }
1361
1362   /* Should never reach here.  */
1363   gcc_unreachable();
1364 }
1365
1366 /* Tries to count the number of iterations of LOOP till it exits by EXIT
1367    by brute force -- i.e. by determining the value of the operands of the
1368    condition at EXIT in first few iterations of the loop (assuming that
1369    these values are constant) and determining the first one in that the
1370    condition is not satisfied.  Returns the constant giving the number
1371    of the iterations of LOOP if successful, chrec_dont_know otherwise.  */
1372
1373 tree
1374 loop_niter_by_eval (struct loop *loop, edge exit)
1375 {
1376   tree cond, cnd, acnd;
1377   tree op[2], val[2], next[2], aval[2], phi[2];
1378   unsigned i, j;
1379   enum tree_code cmp;
1380
1381   cond = last_stmt (exit->src);
1382   if (!cond || TREE_CODE (cond) != COND_EXPR)
1383     return chrec_dont_know;
1384
1385   cnd = COND_EXPR_COND (cond);
1386   if (exit->flags & EDGE_TRUE_VALUE)
1387     cnd = invert_truthvalue (cnd);
1388
1389   cmp = TREE_CODE (cnd);
1390   switch (cmp)
1391     {
1392     case EQ_EXPR:
1393     case NE_EXPR:
1394     case GT_EXPR:
1395     case GE_EXPR:
1396     case LT_EXPR:
1397     case LE_EXPR:
1398       for (j = 0; j < 2; j++)
1399         op[j] = TREE_OPERAND (cnd, j);
1400       break;
1401
1402     default:
1403       return chrec_dont_know;
1404     }
1405
1406   for (j = 0; j < 2; j++)
1407     {
1408       phi[j] = get_base_for (loop, op[j]);
1409       if (!phi[j])
1410         return chrec_dont_know;
1411     }
1412
1413   for (j = 0; j < 2; j++)
1414     {
1415       if (TREE_CODE (phi[j]) == PHI_NODE)
1416         {
1417           val[j] = PHI_ARG_DEF_FROM_EDGE (phi[j], loop_preheader_edge (loop));
1418           next[j] = PHI_ARG_DEF_FROM_EDGE (phi[j], loop_latch_edge (loop));
1419         }
1420       else
1421         {
1422           val[j] = phi[j];
1423           next[j] = NULL_TREE;
1424           op[j] = NULL_TREE;
1425         }
1426     }
1427
1428   /* Don't issue signed overflow warnings.  */
1429   fold_defer_overflow_warnings ();
1430
1431   for (i = 0; i < MAX_ITERATIONS_TO_TRACK; i++)
1432     {
1433       for (j = 0; j < 2; j++)
1434         aval[j] = get_val_for (op[j], val[j]);
1435
1436       acnd = fold_binary (cmp, boolean_type_node, aval[0], aval[1]);
1437       if (acnd && zero_p (acnd))
1438         {
1439           fold_undefer_and_ignore_overflow_warnings ();
1440           if (dump_file && (dump_flags & TDF_DETAILS))
1441             fprintf (dump_file,
1442                      "Proved that loop %d iterates %d times using brute force.\n",
1443                      loop->num, i);
1444           return build_int_cst (unsigned_type_node, i);
1445         }
1446
1447       for (j = 0; j < 2; j++)
1448         {
1449           val[j] = get_val_for (next[j], val[j]);
1450           if (!is_gimple_min_invariant (val[j]))
1451             {
1452               fold_undefer_and_ignore_overflow_warnings ();
1453               return chrec_dont_know;
1454             }
1455         }
1456     }
1457
1458   fold_undefer_and_ignore_overflow_warnings ();
1459
1460   return chrec_dont_know;
1461 }
1462
1463 /* Finds the exit of the LOOP by that the loop exits after a constant
1464    number of iterations and stores the exit edge to *EXIT.  The constant
1465    giving the number of iterations of LOOP is returned.  The number of
1466    iterations is determined using loop_niter_by_eval (i.e. by brute force
1467    evaluation).  If we are unable to find the exit for that loop_niter_by_eval
1468    determines the number of iterations, chrec_dont_know is returned.  */
1469
1470 tree
1471 find_loop_niter_by_eval (struct loop *loop, edge *exit)
1472 {
1473   unsigned n_exits, i;
1474   edge *exits = get_loop_exit_edges (loop, &n_exits);
1475   edge ex;
1476   tree niter = NULL_TREE, aniter;
1477
1478   *exit = NULL;
1479   for (i = 0; i < n_exits; i++)
1480     {
1481       ex = exits[i];
1482       if (!just_once_each_iteration_p (loop, ex->src))
1483         continue;
1484
1485       aniter = loop_niter_by_eval (loop, ex);
1486       if (chrec_contains_undetermined (aniter))
1487         continue;
1488
1489       if (niter
1490           && !tree_int_cst_lt (aniter, niter))
1491         continue;
1492
1493       niter = aniter;
1494       *exit = ex;
1495     }
1496   free (exits);
1497
1498   return niter ? niter : chrec_dont_know;
1499 }
1500
1501 /*
1502
1503    Analysis of upper bounds on number of iterations of a loop.
1504
1505 */
1506
1507 /* Returns true if we can prove that COND ==> VAL >= 0.  */
1508
1509 static bool
1510 implies_nonnegative_p (tree cond, tree val)
1511 {
1512   tree type = TREE_TYPE (val);
1513   tree compare;
1514
1515   if (tree_expr_nonnegative_p (val))
1516     return true;
1517
1518   if (nonzero_p (cond))
1519     return false;
1520
1521   compare = fold_build2 (GE_EXPR,
1522                          boolean_type_node, val, build_int_cst (type, 0));
1523   compare = tree_simplify_using_condition_1 (cond, compare);
1524
1525   return nonzero_p (compare);
1526 }
1527
1528 /* Returns true if we can prove that COND ==> A >= B.  */
1529
1530 static bool
1531 implies_ge_p (tree cond, tree a, tree b)
1532 {
1533   tree compare = fold_build2 (GE_EXPR, boolean_type_node, a, b);
1534
1535   if (nonzero_p (compare))
1536     return true;
1537
1538   if (nonzero_p (cond))
1539     return false;
1540
1541   compare = tree_simplify_using_condition_1 (cond, compare);
1542
1543   return nonzero_p (compare);
1544 }
1545
1546 /* Returns a constant upper bound on the value of expression VAL.  VAL
1547    is considered to be unsigned.  If its type is signed, its value must
1548    be nonnegative.
1549    
1550    The condition ADDITIONAL must be satisfied (for example, if VAL is
1551    "(unsigned) n" and ADDITIONAL is "n > 0", then we can derive that
1552    VAL is at most (unsigned) MAX_INT).  */
1553  
1554 static double_int
1555 derive_constant_upper_bound (tree val, tree additional)
1556 {
1557   tree type = TREE_TYPE (val);
1558   tree op0, op1, subtype, maxt;
1559   double_int bnd, max, mmax, cst;
1560
1561   if (INTEGRAL_TYPE_P (type))
1562     maxt = TYPE_MAX_VALUE (type);
1563   else
1564     maxt = upper_bound_in_type (type, type);
1565
1566   max = tree_to_double_int (maxt);
1567
1568   switch (TREE_CODE (val))
1569     {
1570     case INTEGER_CST:
1571       return tree_to_double_int (val);
1572
1573     case NOP_EXPR:
1574     case CONVERT_EXPR:
1575       op0 = TREE_OPERAND (val, 0);
1576       subtype = TREE_TYPE (op0);
1577       if (!TYPE_UNSIGNED (subtype)
1578           /* If TYPE is also signed, the fact that VAL is nonnegative implies
1579              that OP0 is nonnegative.  */
1580           && TYPE_UNSIGNED (type)
1581           && !implies_nonnegative_p (additional, op0))
1582         {
1583           /* If we cannot prove that the casted expression is nonnegative,
1584              we cannot establish more useful upper bound than the precision
1585              of the type gives us.  */
1586           return max;
1587         }
1588
1589       /* We now know that op0 is an nonnegative value.  Try deriving an upper
1590          bound for it.  */
1591       bnd = derive_constant_upper_bound (op0, additional);
1592
1593       /* If the bound does not fit in TYPE, max. value of TYPE could be
1594          attained.  */
1595       if (double_int_ucmp (max, bnd) < 0)
1596         return max;
1597
1598       return bnd;
1599
1600     case PLUS_EXPR:
1601     case MINUS_EXPR:
1602       op0 = TREE_OPERAND (val, 0);
1603       op1 = TREE_OPERAND (val, 1);
1604
1605       if (TREE_CODE (op1) != INTEGER_CST
1606           || !implies_nonnegative_p (additional, op0))
1607         return max;
1608
1609       /* Canonicalize to OP0 - CST.  Consider CST to be signed, in order to
1610          choose the most logical way how to treat this constant regardless
1611          of the signedness of the type.  */
1612       cst = tree_to_double_int (op1);
1613       cst = double_int_sext (cst, TYPE_PRECISION (type));
1614       if (TREE_CODE (val) == PLUS_EXPR)
1615         cst = double_int_neg (cst);
1616
1617       bnd = derive_constant_upper_bound (op0, additional);
1618
1619       if (double_int_negative_p (cst))
1620         {
1621           cst = double_int_neg (cst);
1622           /* Avoid CST == 0x80000...  */
1623           if (double_int_negative_p (cst))
1624             return max;;
1625
1626           /* OP0 + CST.  We need to check that
1627              BND <= MAX (type) - CST.  */
1628
1629           mmax = double_int_add (max, double_int_neg (cst));
1630           if (double_int_ucmp (bnd, mmax) > 0)
1631             return max;
1632
1633           return double_int_add (bnd, cst);
1634         }
1635       else
1636         {
1637           /* OP0 - CST, where CST >= 0.
1638
1639              If TYPE is signed, we have already verified that OP0 >= 0, and we
1640              know that the result is nonnegative.  This implies that
1641              VAL <= BND - CST.
1642
1643              If TYPE is unsigned, we must additionally know that OP0 >= CST,
1644              otherwise the operation underflows.
1645            */
1646
1647           /* This should only happen if the type is unsigned; however, for
1648              programs that use overflowing signed arithmetics even with
1649              -fno-wrapv, this condition may also be true for signed values.  */
1650           if (double_int_ucmp (bnd, cst) < 0)
1651             return max;
1652
1653           if (TYPE_UNSIGNED (type)
1654               && !implies_ge_p (additional,
1655                                 op0, double_int_to_tree (type, cst)))
1656             return max;
1657
1658           bnd = double_int_add (bnd, double_int_neg (cst));
1659         }
1660
1661       return bnd;
1662
1663     case FLOOR_DIV_EXPR:
1664     case EXACT_DIV_EXPR:
1665       op0 = TREE_OPERAND (val, 0);
1666       op1 = TREE_OPERAND (val, 1);
1667       if (TREE_CODE (op1) != INTEGER_CST
1668           || tree_int_cst_sign_bit (op1))
1669         return max;
1670
1671       bnd = derive_constant_upper_bound (op0, additional);
1672       return double_int_udiv (bnd, tree_to_double_int (op1), FLOOR_DIV_EXPR);
1673
1674     default: 
1675       return max;
1676     }
1677 }
1678
1679 /* Records that AT_STMT is executed at most BOUND times in LOOP.  The
1680    additional condition ADDITIONAL is recorded with the bound.  */
1681
1682 void
1683 record_estimate (struct loop *loop, tree bound, tree additional, tree at_stmt)
1684 {
1685   struct nb_iter_bound *elt = xmalloc (sizeof (struct nb_iter_bound));
1686   double_int i_bound = derive_constant_upper_bound (bound, additional);
1687   tree c_bound = double_int_to_tree (unsigned_type_for (TREE_TYPE (bound)),
1688                                      i_bound);
1689
1690   if (dump_file && (dump_flags & TDF_DETAILS))
1691     {
1692       fprintf (dump_file, "Statements after ");
1693       print_generic_expr (dump_file, at_stmt, TDF_SLIM);
1694       fprintf (dump_file, " are executed at most ");
1695       print_generic_expr (dump_file, bound, TDF_SLIM);
1696       fprintf (dump_file, " (bounded by ");
1697       print_generic_expr (dump_file, c_bound, TDF_SLIM);
1698       fprintf (dump_file, ") times in loop %d.\n", loop->num);
1699     }
1700
1701   elt->bound = c_bound;
1702   elt->at_stmt = at_stmt;
1703   elt->next = loop->bounds;
1704   loop->bounds = elt;
1705 }
1706
1707 /* Initialize LOOP->ESTIMATED_NB_ITERATIONS with the lowest safe
1708    approximation of the number of iterations for LOOP.  */
1709
1710 static void
1711 compute_estimated_nb_iterations (struct loop *loop)
1712 {
1713   struct nb_iter_bound *bound;
1714   
1715   for (bound = loop->bounds; bound; bound = bound->next)
1716     {
1717       if (TREE_CODE (bound->bound) != INTEGER_CST)
1718         continue;
1719
1720       /* Update only when there is no previous estimation, or when the current
1721          estimation is smaller.  */
1722       if (chrec_contains_undetermined (loop->estimated_nb_iterations)
1723           || tree_int_cst_lt (bound->bound, loop->estimated_nb_iterations))
1724         loop->estimated_nb_iterations = bound->bound;
1725     }
1726 }
1727
1728 /* The following analyzers are extracting informations on the bounds
1729    of LOOP from the following undefined behaviors:
1730
1731    - data references should not access elements over the statically
1732      allocated size,
1733
1734    - signed variables should not overflow when flag_wrapv is not set.
1735 */
1736
1737 static void
1738 infer_loop_bounds_from_undefined (struct loop *loop)
1739 {
1740   unsigned i;
1741   basic_block bb, *bbs;
1742   block_stmt_iterator bsi;
1743   
1744   bbs = get_loop_body (loop);
1745
1746   for (i = 0; i < loop->num_nodes; i++)
1747     {
1748       bb = bbs[i];
1749
1750       /* If BB is not executed in each iteration of the loop, we cannot
1751          use the operations in it to infer reliable upper bound on the
1752          # of iterations of the loop.  */
1753       if (!dominated_by_p (CDI_DOMINATORS, loop->latch, bb))
1754         continue;
1755
1756       for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1757         {
1758           tree stmt = bsi_stmt (bsi);
1759
1760           switch (TREE_CODE (stmt))
1761             {
1762             case MODIFY_EXPR:
1763               {
1764                 tree op0 = TREE_OPERAND (stmt, 0);
1765                 tree op1 = TREE_OPERAND (stmt, 1);
1766
1767                 /* For each array access, analyze its access function
1768                    and record a bound on the loop iteration domain.  */
1769                 if (TREE_CODE (op1) == ARRAY_REF 
1770                     && !array_ref_contains_indirect_ref (op1))
1771                   estimate_iters_using_array (stmt, op1);
1772
1773                 if (TREE_CODE (op0) == ARRAY_REF 
1774                     && !array_ref_contains_indirect_ref (op0))
1775                   estimate_iters_using_array (stmt, op0);
1776
1777                 /* For each signed type variable in LOOP, analyze its
1778                    scalar evolution and record a bound of the loop
1779                    based on the type's ranges.  */
1780                 else if (!flag_wrapv && TREE_CODE (op0) == SSA_NAME)
1781                   {
1782                     tree init, step, diff, estimation;
1783                     tree scev = instantiate_parameters 
1784                       (loop, analyze_scalar_evolution (loop, op0));
1785                     tree type = chrec_type (scev);
1786
1787                     if (chrec_contains_undetermined (scev)
1788                         || TYPE_OVERFLOW_WRAPS (type))
1789                       break;
1790
1791                     init = initial_condition_in_loop_num (scev, loop->num);
1792                     step = evolution_part_in_loop_num (scev, loop->num);
1793
1794                     if (init == NULL_TREE
1795                         || step == NULL_TREE
1796                         || TREE_CODE (init) != INTEGER_CST
1797                         || TREE_CODE (step) != INTEGER_CST
1798                         || TYPE_MIN_VALUE (type) == NULL_TREE
1799                         || TYPE_MAX_VALUE (type) == NULL_TREE)
1800                       break;
1801
1802                     if (integer_nonzerop (step))
1803                       {
1804                         tree utype;
1805
1806                         if (tree_int_cst_lt (step, integer_zero_node))
1807                           diff = fold_build2 (MINUS_EXPR, type, init,
1808                                               TYPE_MIN_VALUE (type));
1809                         else
1810                           diff = fold_build2 (MINUS_EXPR, type,
1811                                               TYPE_MAX_VALUE (type), init);
1812
1813                         utype = unsigned_type_for (type);
1814                         estimation = fold_build2 (CEIL_DIV_EXPR, type, diff,
1815                                                   step);
1816                         record_estimate (loop,
1817                                          fold_convert (utype, estimation),
1818                                          boolean_true_node, stmt);
1819                       }
1820                   }
1821
1822                 break;
1823               }
1824
1825             case CALL_EXPR:
1826               {
1827                 tree args;
1828
1829                 for (args = TREE_OPERAND (stmt, 1); args;
1830                      args = TREE_CHAIN (args))
1831                   if (TREE_CODE (TREE_VALUE (args)) == ARRAY_REF
1832                       && !array_ref_contains_indirect_ref (TREE_VALUE (args)))
1833                     estimate_iters_using_array (stmt, TREE_VALUE (args));
1834
1835                 break;
1836               }
1837
1838             default:
1839               break;
1840             }
1841         }
1842     }
1843
1844   compute_estimated_nb_iterations (loop);
1845   free (bbs);
1846 }
1847
1848 /* Records estimates on numbers of iterations of LOOP.  */
1849
1850 static void
1851 estimate_numbers_of_iterations_loop (struct loop *loop)
1852 {
1853   edge *exits;
1854   tree niter, type;
1855   unsigned i, n_exits;
1856   struct tree_niter_desc niter_desc;
1857
1858   /* Give up if we already have tried to compute an estimation.  */
1859   if (loop->estimated_nb_iterations == chrec_dont_know
1860       /* Or when we already have an estimation.  */
1861       || (loop->estimated_nb_iterations != NULL_TREE
1862           && TREE_CODE (loop->estimated_nb_iterations) == INTEGER_CST))
1863     return;
1864   else
1865     loop->estimated_nb_iterations = chrec_dont_know;
1866
1867   exits = get_loop_exit_edges (loop, &n_exits);
1868   for (i = 0; i < n_exits; i++)
1869     {
1870       if (!number_of_iterations_exit (loop, exits[i], &niter_desc, false))
1871         continue;
1872
1873       niter = niter_desc.niter;
1874       type = TREE_TYPE (niter);
1875       if (!zero_p (niter_desc.may_be_zero)
1876           && !nonzero_p (niter_desc.may_be_zero))
1877         niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
1878                         build_int_cst (type, 0),
1879                         niter);
1880       record_estimate (loop, niter,
1881                        niter_desc.additional_info,
1882                        last_stmt (exits[i]->src));
1883     }
1884   free (exits);
1885   
1886   if (chrec_contains_undetermined (loop->estimated_nb_iterations))
1887     infer_loop_bounds_from_undefined (loop);
1888 }
1889
1890 /* Records estimates on numbers of iterations of LOOPS.  */
1891
1892 void
1893 estimate_numbers_of_iterations (struct loops *loops)
1894 {
1895   unsigned i;
1896   struct loop *loop;
1897
1898   /* We don't want to issue signed overflow warnings while getting
1899      loop iteration estimates.  */
1900   fold_defer_overflow_warnings ();
1901
1902   for (i = 1; i < loops->num; i++)
1903     {
1904       loop = loops->parray[i];
1905       if (loop)
1906         estimate_numbers_of_iterations_loop (loop);
1907     }
1908
1909   fold_undefer_and_ignore_overflow_warnings ();
1910 }
1911
1912 /* Returns true if statement S1 dominates statement S2.  */
1913
1914 static bool
1915 stmt_dominates_stmt_p (tree s1, tree s2)
1916 {
1917   basic_block bb1 = bb_for_stmt (s1), bb2 = bb_for_stmt (s2);
1918
1919   if (!bb1
1920       || s1 == s2)
1921     return true;
1922
1923   if (bb1 == bb2)
1924     {
1925       block_stmt_iterator bsi;
1926
1927       for (bsi = bsi_start (bb1); bsi_stmt (bsi) != s2; bsi_next (&bsi))
1928         if (bsi_stmt (bsi) == s1)
1929           return true;
1930
1931       return false;
1932     }
1933
1934   return dominated_by_p (CDI_DOMINATORS, bb2, bb1);
1935 }
1936
1937 /* Returns true when we can prove that the number of executions of
1938    STMT in the loop is at most NITER, according to the fact
1939    that the statement NITER_BOUND->at_stmt is executed at most
1940    NITER_BOUND->bound times.  */
1941
1942 static bool
1943 n_of_executions_at_most (tree stmt,
1944                          struct nb_iter_bound *niter_bound, 
1945                          tree niter)
1946 {
1947   tree cond;
1948   tree bound = niter_bound->bound;
1949   tree bound_type = TREE_TYPE (bound);
1950   tree nit_type = TREE_TYPE (niter);
1951   enum tree_code cmp;
1952
1953   gcc_assert (TYPE_UNSIGNED (bound_type)
1954               && TYPE_UNSIGNED (nit_type)
1955               && is_gimple_min_invariant (bound));
1956   if (TYPE_PRECISION (nit_type) > TYPE_PRECISION (bound_type))
1957     bound = fold_convert (nit_type, bound);
1958   else
1959     niter = fold_convert (bound_type, niter);
1960
1961   /* After the statement niter_bound->at_stmt we know that anything is
1962      executed at most BOUND times.  */
1963   if (stmt && stmt_dominates_stmt_p (niter_bound->at_stmt, stmt))
1964     cmp = GE_EXPR;
1965   /* Before the statement niter_bound->at_stmt we know that anything
1966      is executed at most BOUND + 1 times.  */
1967   else
1968     cmp = GT_EXPR;
1969
1970   cond = fold_binary (cmp, boolean_type_node, niter, bound);
1971   return nonzero_p (cond);
1972 }
1973
1974 /* Returns true if the arithmetics in TYPE can be assumed not to wrap.  */
1975
1976 bool
1977 nowrap_type_p (tree type)
1978 {
1979   if (INTEGRAL_TYPE_P (type)
1980       && TYPE_OVERFLOW_UNDEFINED (type))
1981     return true;
1982
1983   if (POINTER_TYPE_P (type))
1984     return true;
1985
1986   return false;
1987 }
1988
1989 /* Return false only when the induction variable BASE + STEP * I is
1990    known to not overflow: i.e. when the number of iterations is small
1991    enough with respect to the step and initial condition in order to
1992    keep the evolution confined in TYPEs bounds.  Return true when the
1993    iv is known to overflow or when the property is not computable.
1994  
1995    USE_OVERFLOW_SEMANTICS is true if this function should assume that
1996    the rules for overflow of the given language apply (e.g., that signed
1997    arithmetics in C does not overflow).  */
1998
1999 bool
2000 scev_probably_wraps_p (tree base, tree step, 
2001                        tree at_stmt, struct loop *loop,
2002                        bool use_overflow_semantics)
2003 {
2004   struct nb_iter_bound *bound;
2005   tree delta, step_abs;
2006   tree unsigned_type, valid_niter;
2007   tree type = TREE_TYPE (step);
2008
2009   /* FIXME: We really need something like
2010      http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html.
2011
2012      We used to test for the following situation that frequently appears
2013      during address arithmetics:
2014          
2015        D.1621_13 = (long unsigned intD.4) D.1620_12;
2016        D.1622_14 = D.1621_13 * 8;
2017        D.1623_15 = (doubleD.29 *) D.1622_14;
2018
2019      And derived that the sequence corresponding to D_14
2020      can be proved to not wrap because it is used for computing a
2021      memory access; however, this is not really the case -- for example,
2022      if D_12 = (unsigned char) [254,+,1], then D_14 has values
2023      2032, 2040, 0, 8, ..., but the code is still legal.  */
2024
2025   if (chrec_contains_undetermined (base)
2026       || chrec_contains_undetermined (step)
2027       || TREE_CODE (step) != INTEGER_CST)
2028     return true;
2029
2030   if (zero_p (step))
2031     return false;
2032
2033   /* If we can use the fact that signed and pointer arithmetics does not
2034      wrap, we are done.  */
2035   if (use_overflow_semantics && nowrap_type_p (type))
2036     return false;
2037
2038   /* Don't issue signed overflow warnings.  */
2039   fold_defer_overflow_warnings ();
2040
2041   /* Otherwise, compute the number of iterations before we reach the
2042      bound of the type, and verify that the loop is exited before this
2043      occurs.  */
2044   unsigned_type = unsigned_type_for (type);
2045   base = fold_convert (unsigned_type, base);
2046
2047   if (tree_int_cst_sign_bit (step))
2048     {
2049       tree extreme = fold_convert (unsigned_type,
2050                                    lower_bound_in_type (type, type));
2051       delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
2052       step_abs = fold_build1 (NEGATE_EXPR, unsigned_type,
2053                               fold_convert (unsigned_type, step));
2054     }
2055   else
2056     {
2057       tree extreme = fold_convert (unsigned_type,
2058                                    upper_bound_in_type (type, type));
2059       delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
2060       step_abs = fold_convert (unsigned_type, step);
2061     }
2062
2063   valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step_abs);
2064
2065   estimate_numbers_of_iterations_loop (loop);
2066   for (bound = loop->bounds; bound; bound = bound->next)
2067     {
2068       if (n_of_executions_at_most (at_stmt, bound, valid_niter))
2069         {
2070           fold_undefer_and_ignore_overflow_warnings ();
2071           return false;
2072         }
2073     }
2074
2075   fold_undefer_and_ignore_overflow_warnings ();
2076
2077   /* At this point we still don't have a proof that the iv does not
2078      overflow: give up.  */
2079   return true;
2080 }
2081
2082 /* Frees the information on upper bounds on numbers of iterations of LOOP.  */
2083
2084 void
2085 free_numbers_of_iterations_estimates_loop (struct loop *loop)
2086 {
2087   struct nb_iter_bound *bound, *next;
2088
2089   loop->nb_iterations = NULL;
2090   loop->estimated_nb_iterations = NULL;
2091   for (bound = loop->bounds; bound; bound = next)
2092     {
2093       next = bound->next;
2094       free (bound);
2095     }
2096
2097   loop->bounds = NULL;
2098 }
2099
2100 /* Frees the information on upper bounds on numbers of iterations of LOOPS.  */
2101
2102 void
2103 free_numbers_of_iterations_estimates (struct loops *loops)
2104 {
2105   unsigned i;
2106   struct loop *loop;
2107
2108   for (i = 1; i < loops->num; i++)
2109     {
2110       loop = loops->parray[i];
2111       if (loop)
2112         free_numbers_of_iterations_estimates_loop (loop);
2113     }
2114 }
2115
2116 /* Substitute value VAL for ssa name NAME inside expressions held
2117    at LOOP.  */
2118
2119 void
2120 substitute_in_loop_info (struct loop *loop, tree name, tree val)
2121 {
2122   loop->nb_iterations = simplify_replace_tree (loop->nb_iterations, name, val);
2123   loop->estimated_nb_iterations
2124           = simplify_replace_tree (loop->estimated_nb_iterations, name, val);
2125 }