xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/tree-scalar-evolution.c (revision 82d56013d7b633d116a93943de88e08335357a7c)
1 /* Scalar evolution detector.
2    Copyright (C) 2003-2019 Free Software Foundation, Inc.
3    Contributed by Sebastian Pop <s.pop@laposte.net>
4 
5 This file is part of GCC.
6 
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11 
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20 
21 /*
22    Description:
23 
24    This pass analyzes the evolution of scalar variables in loop
25    structures.  The algorithm is based on the SSA representation,
26    and on the loop hierarchy tree.  This algorithm is not based on
27    the notion of versions of a variable, as it was the case for the
28    previous implementations of the scalar evolution algorithm, but
29    it assumes that each defined name is unique.
30 
31    The notation used in this file is called "chains of recurrences",
32    and has been proposed by Eugene Zima, Robert Van Engelen, and
33    others for describing induction variables in programs.  For example
34    "b -> {0, +, 2}_1" means that the scalar variable "b" is equal to 0
35    when entering in the loop_1 and has a step 2 in this loop, in other
36    words "for (b = 0; b < N; b+=2);".  Note that the coefficients of
37    this chain of recurrence (or chrec [shrek]) can contain the name of
38    other variables, in which case they are called parametric chrecs.
39    For example, "b -> {a, +, 2}_1" means that the initial value of "b"
40    is the value of "a".  In most of the cases these parametric chrecs
41    are fully instantiated before their use because symbolic names can
42    hide some difficult cases such as self-references described later
43    (see the Fibonacci example).
44 
45    A short sketch of the algorithm is:
46 
47    Given a scalar variable to be analyzed, follow the SSA edge to
48    its definition:
49 
50    - When the definition is a GIMPLE_ASSIGN: if the right hand side
51    (RHS) of the definition cannot be statically analyzed, the answer
52    of the analyzer is: "don't know".
53    Otherwise, for all the variables that are not yet analyzed in the
54    RHS, try to determine their evolution, and finally try to
55    evaluate the operation of the RHS that gives the evolution
56    function of the analyzed variable.
57 
58    - When the definition is a condition-phi-node: determine the
59    evolution function for all the branches of the phi node, and
60    finally merge these evolutions (see chrec_merge).
61 
62    - When the definition is a loop-phi-node: determine its initial
63    condition, that is the SSA edge defined in an outer loop, and
64    keep it symbolic.  Then determine the SSA edges that are defined
65    in the body of the loop.  Follow the inner edges until ending on
66    another loop-phi-node of the same analyzed loop.  If the reached
67    loop-phi-node is not the starting loop-phi-node, then we keep
68    this definition under a symbolic form.  If the reached
69    loop-phi-node is the same as the starting one, then we compute a
70    symbolic stride on the return path.  The result is then the
71    symbolic chrec {initial_condition, +, symbolic_stride}_loop.
72 
73    Examples:
74 
75    Example 1: Illustration of the basic algorithm.
76 
77    | a = 3
78    | loop_1
79    |   b = phi (a, c)
80    |   c = b + 1
81    |   if (c > 10) exit_loop
82    | endloop
83 
84    Suppose that we want to know the number of iterations of the
85    loop_1.  The exit_loop is controlled by a COND_EXPR (c > 10).  We
86    ask the scalar evolution analyzer two questions: what's the
87    scalar evolution (scev) of "c", and what's the scev of "10".  For
88    "10" the answer is "10" since it is a scalar constant.  For the
89    scalar variable "c", it follows the SSA edge to its definition,
90    "c = b + 1", and then asks again what's the scev of "b".
91    Following the SSA edge, we end on a loop-phi-node "b = phi (a,
92    c)", where the initial condition is "a", and the inner loop edge
93    is "c".  The initial condition is kept under a symbolic form (it
94    may be the case that the copy constant propagation has done its
95    work and we end with the constant "3" as one of the edges of the
96    loop-phi-node).  The update edge is followed to the end of the
97    loop, and until reaching again the starting loop-phi-node: b -> c
98    -> b.  At this point we have drawn a path from "b" to "b" from
99    which we compute the stride in the loop: in this example it is
100    "+1".  The resulting scev for "b" is "b -> {a, +, 1}_1".  Now
101    that the scev for "b" is known, it is possible to compute the
102    scev for "c", that is "c -> {a + 1, +, 1}_1".  In order to
103    determine the number of iterations in the loop_1, we have to
104    instantiate_parameters (loop_1, {a + 1, +, 1}_1), that gives after some
105    more analysis the scev {4, +, 1}_1, or in other words, this is
106    the function "f (x) = x + 4", where x is the iteration count of
107    the loop_1.  Now we have to solve the inequality "x + 4 > 10",
108    and take the smallest iteration number for which the loop is
109    exited: x = 7.  This loop runs from x = 0 to x = 7, and in total
110    there are 8 iterations.  In terms of loop normalization, we have
111    created a variable that is implicitly defined, "x" or just "_1",
112    and all the other analyzed scalars of the loop are defined in
113    function of this variable:
114 
115    a -> 3
116    b -> {3, +, 1}_1
117    c -> {4, +, 1}_1
118 
119    or in terms of a C program:
120 
121    | a = 3
122    | for (x = 0; x <= 7; x++)
123    |   {
124    |     b = x + 3
125    |     c = x + 4
126    |   }
127 
128    Example 2a: Illustration of the algorithm on nested loops.
129 
130    | loop_1
131    |   a = phi (1, b)
132    |   c = a + 2
133    |   loop_2  10 times
134    |     b = phi (c, d)
135    |     d = b + 3
136    |   endloop
137    | endloop
138 
139    For analyzing the scalar evolution of "a", the algorithm follows
140    the SSA edge into the loop's body: "a -> b".  "b" is an inner
141    loop-phi-node, and its analysis as in Example 1, gives:
142 
143    b -> {c, +, 3}_2
144    d -> {c + 3, +, 3}_2
145 
146    Following the SSA edge for the initial condition, we end on "c = a
147    + 2", and then on the starting loop-phi-node "a".  From this point,
148    the loop stride is computed: back on "c = a + 2" we get a "+2" in
149    the loop_1, then on the loop-phi-node "b" we compute the overall
150    effect of the inner loop that is "b = c + 30", and we get a "+30"
151    in the loop_1.  That means that the overall stride in loop_1 is
152    equal to "+32", and the result is:
153 
154    a -> {1, +, 32}_1
155    c -> {3, +, 32}_1
156 
157    Example 2b: Multivariate chains of recurrences.
158 
159    | loop_1
160    |   k = phi (0, k + 1)
161    |   loop_2  4 times
162    |     j = phi (0, j + 1)
163    |     loop_3 4 times
164    |       i = phi (0, i + 1)
165    |       A[j + k] = ...
166    |     endloop
167    |   endloop
168    | endloop
169 
170    Analyzing the access function of array A with
171    instantiate_parameters (loop_1, "j + k"), we obtain the
172    instantiation and the analysis of the scalar variables "j" and "k"
173    in loop_1.  This leads to the scalar evolution {4, +, 1}_1: the end
174    value of loop_2 for "j" is 4, and the evolution of "k" in loop_1 is
175    {0, +, 1}_1.  To obtain the evolution function in loop_3 and
176    instantiate the scalar variables up to loop_1, one has to use:
177    instantiate_scev (block_before_loop (loop_1), loop_3, "j + k").
178    The result of this call is {{0, +, 1}_1, +, 1}_2.
179 
180    Example 3: Higher degree polynomials.
181 
182    | loop_1
183    |   a = phi (2, b)
184    |   c = phi (5, d)
185    |   b = a + 1
186    |   d = c + a
187    | endloop
188 
189    a -> {2, +, 1}_1
190    b -> {3, +, 1}_1
191    c -> {5, +, a}_1
192    d -> {5 + a, +, a}_1
193 
194    instantiate_parameters (loop_1, {5, +, a}_1) -> {5, +, 2, +, 1}_1
195    instantiate_parameters (loop_1, {5 + a, +, a}_1) -> {7, +, 3, +, 1}_1
196 
197    Example 4: Lucas, Fibonacci, or mixers in general.
198 
199    | loop_1
200    |   a = phi (1, b)
201    |   c = phi (3, d)
202    |   b = c
203    |   d = c + a
204    | endloop
205 
206    a -> (1, c)_1
207    c -> {3, +, a}_1
208 
209    The syntax "(1, c)_1" stands for a PEELED_CHREC that has the
210    following semantics: during the first iteration of the loop_1, the
211    variable contains the value 1, and then it contains the value "c".
212    Note that this syntax is close to the syntax of the loop-phi-node:
213    "a -> (1, c)_1" vs. "a = phi (1, c)".
214 
215    The symbolic chrec representation contains all the semantics of the
216    original code.  What is more difficult is to use this information.
217 
218    Example 5: Flip-flops, or exchangers.
219 
220    | loop_1
221    |   a = phi (1, b)
222    |   c = phi (3, d)
223    |   b = c
224    |   d = a
225    | endloop
226 
227    a -> (1, c)_1
228    c -> (3, a)_1
229 
230    Based on these symbolic chrecs, it is possible to refine this
231    information into the more precise PERIODIC_CHRECs:
232 
233    a -> |1, 3|_1
234    c -> |3, 1|_1
235 
236    This transformation is not yet implemented.
237 
238    Further readings:
239 
240    You can find a more detailed description of the algorithm in:
241    http://icps.u-strasbg.fr/~pop/DEA_03_Pop.pdf
242    http://icps.u-strasbg.fr/~pop/DEA_03_Pop.ps.gz.  But note that
243    this is a preliminary report and some of the details of the
244    algorithm have changed.  I'm working on a research report that
245    updates the description of the algorithms to reflect the design
246    choices used in this implementation.
247 
248    A set of slides show a high level overview of the algorithm and run
249    an example through the scalar evolution analyzer:
250    http://cri.ensmp.fr/~pop/gcc/mar04/slides.pdf
251 
252    The slides that I have presented at the GCC Summit'04 are available
253    at: http://cri.ensmp.fr/~pop/gcc/20040604/gccsummit-lno-spop.pdf
254 */
255 
256 #include "config.h"
257 #include "system.h"
258 #include "coretypes.h"
259 #include "backend.h"
260 #include "target.h"
261 #include "rtl.h"
262 #include "optabs-query.h"
263 #include "tree.h"
264 #include "gimple.h"
265 #include "ssa.h"
266 #include "gimple-pretty-print.h"
267 #include "fold-const.h"
268 #include "gimplify.h"
269 #include "gimple-iterator.h"
270 #include "gimplify-me.h"
271 #include "tree-cfg.h"
272 #include "tree-ssa-loop-ivopts.h"
273 #include "tree-ssa-loop-manip.h"
274 #include "tree-ssa-loop-niter.h"
275 #include "tree-ssa-loop.h"
276 #include "tree-ssa.h"
277 #include "cfgloop.h"
278 #include "tree-chrec.h"
279 #include "tree-affine.h"
280 #include "tree-scalar-evolution.h"
281 #include "dumpfile.h"
282 #include "params.h"
283 #include "tree-ssa-propagate.h"
284 #include "gimple-fold.h"
285 #include "tree-into-ssa.h"
286 #include "builtins.h"
287 #include "case-cfn-macros.h"
288 
289 static tree analyze_scalar_evolution_1 (struct loop *, tree);
290 static tree analyze_scalar_evolution_for_address_of (struct loop *loop,
291 						     tree var);
292 
293 /* The cached information about an SSA name with version NAME_VERSION,
294    claiming that below basic block with index INSTANTIATED_BELOW, the
295    value of the SSA name can be expressed as CHREC.  */
296 
297 struct GTY((for_user)) scev_info_str {
298   unsigned int name_version;
299   int instantiated_below;
300   tree chrec;
301 };
302 
303 /* Counters for the scev database.  */
304 static unsigned nb_set_scev = 0;
305 static unsigned nb_get_scev = 0;
306 
307 /* The following trees are unique elements.  Thus the comparison of
308    another element to these elements should be done on the pointer to
309    these trees, and not on their value.  */
310 
311 /* The SSA_NAMEs that are not yet analyzed are qualified with NULL_TREE.  */
312 tree chrec_not_analyzed_yet;
313 
314 /* Reserved to the cases where the analyzer has detected an
315    undecidable property at compile time.  */
316 tree chrec_dont_know;
317 
318 /* When the analyzer has detected that a property will never
319    happen, then it qualifies it with chrec_known.  */
320 tree chrec_known;
321 
322 struct scev_info_hasher : ggc_ptr_hash<scev_info_str>
323 {
324   static hashval_t hash (scev_info_str *i);
325   static bool equal (const scev_info_str *a, const scev_info_str *b);
326 };
327 
328 static GTY (()) hash_table<scev_info_hasher> *scalar_evolution_info;
329 
330 
331 /* Constructs a new SCEV_INFO_STR structure for VAR and INSTANTIATED_BELOW.  */
332 
333 static inline struct scev_info_str *
334 new_scev_info_str (basic_block instantiated_below, tree var)
335 {
336   struct scev_info_str *res;
337 
338   res = ggc_alloc<scev_info_str> ();
339   res->name_version = SSA_NAME_VERSION (var);
340   res->chrec = chrec_not_analyzed_yet;
341   res->instantiated_below = instantiated_below->index;
342 
343   return res;
344 }
345 
346 /* Computes a hash function for database element ELT.  */
347 
348 hashval_t
349 scev_info_hasher::hash (scev_info_str *elt)
350 {
351   return elt->name_version ^ elt->instantiated_below;
352 }
353 
354 /* Compares database elements E1 and E2.  */
355 
356 bool
357 scev_info_hasher::equal (const scev_info_str *elt1, const scev_info_str *elt2)
358 {
359   return (elt1->name_version == elt2->name_version
360 	  && elt1->instantiated_below == elt2->instantiated_below);
361 }
362 
363 /* Get the scalar evolution of VAR for INSTANTIATED_BELOW basic block.
364    A first query on VAR returns chrec_not_analyzed_yet.  */
365 
366 static tree *
367 find_var_scev_info (basic_block instantiated_below, tree var)
368 {
369   struct scev_info_str *res;
370   struct scev_info_str tmp;
371 
372   tmp.name_version = SSA_NAME_VERSION (var);
373   tmp.instantiated_below = instantiated_below->index;
374   scev_info_str **slot = scalar_evolution_info->find_slot (&tmp, INSERT);
375 
376   if (!*slot)
377     *slot = new_scev_info_str (instantiated_below, var);
378   res = *slot;
379 
380   return &res->chrec;
381 }
382 
383 
384 /* Hashtable helpers for a temporary hash-table used when
385    analyzing a scalar evolution, instantiating a CHREC or
386    resolving mixers.  */
387 
388 struct instantiate_cache_type
389 {
390   htab_t map;
391   vec<scev_info_str> entries;
392 
393   instantiate_cache_type () : map (NULL), entries (vNULL) {}
394   ~instantiate_cache_type ();
395   tree get (unsigned slot) { return entries[slot].chrec; }
396   void set (unsigned slot, tree chrec) { entries[slot].chrec = chrec; }
397 };
398 
399 instantiate_cache_type::~instantiate_cache_type ()
400 {
401   if (map != NULL)
402     {
403       htab_delete (map);
404       entries.release ();
405     }
406 }
407 
408 /* Cache to avoid infinite recursion when instantiating an SSA name.
409    Live during the outermost analyze_scalar_evolution, instantiate_scev
410    or resolve_mixers call.  */
411 static instantiate_cache_type *global_cache;
412 
413 
414 /* Return true when CHREC contains symbolic names defined in
415    LOOP_NB.  */
416 
417 bool
418 chrec_contains_symbols_defined_in_loop (const_tree chrec, unsigned loop_nb)
419 {
420   int i, n;
421 
422   if (chrec == NULL_TREE)
423     return false;
424 
425   if (is_gimple_min_invariant (chrec))
426     return false;
427 
428   if (TREE_CODE (chrec) == SSA_NAME)
429     {
430       gimple *def;
431       loop_p def_loop, loop;
432 
433       if (SSA_NAME_IS_DEFAULT_DEF (chrec))
434 	return false;
435 
436       def = SSA_NAME_DEF_STMT (chrec);
437       def_loop = loop_containing_stmt (def);
438       loop = get_loop (cfun, loop_nb);
439 
440       if (def_loop == NULL)
441 	return false;
442 
443       if (loop == def_loop || flow_loop_nested_p (loop, def_loop))
444 	return true;
445 
446       return false;
447     }
448 
449   n = TREE_OPERAND_LENGTH (chrec);
450   for (i = 0; i < n; i++)
451     if (chrec_contains_symbols_defined_in_loop (TREE_OPERAND (chrec, i),
452 						loop_nb))
453       return true;
454   return false;
455 }
456 
457 /* Return true when PHI is a loop-phi-node.  */
458 
459 static bool
460 loop_phi_node_p (gimple *phi)
461 {
462   /* The implementation of this function is based on the following
463      property: "all the loop-phi-nodes of a loop are contained in the
464      loop's header basic block".  */
465 
466   return loop_containing_stmt (phi)->header == gimple_bb (phi);
467 }
468 
469 /* Compute the scalar evolution for EVOLUTION_FN after crossing LOOP.
470    In general, in the case of multivariate evolutions we want to get
471    the evolution in different loops.  LOOP specifies the level for
472    which to get the evolution.
473 
474    Example:
475 
476    | for (j = 0; j < 100; j++)
477    |   {
478    |     for (k = 0; k < 100; k++)
479    |       {
480    |         i = k + j;   - Here the value of i is a function of j, k.
481    |       }
482    |      ... = i         - Here the value of i is a function of j.
483    |   }
484    | ... = i              - Here the value of i is a scalar.
485 
486    Example:
487 
488    | i_0 = ...
489    | loop_1 10 times
490    |   i_1 = phi (i_0, i_2)
491    |   i_2 = i_1 + 2
492    | endloop
493 
494    This loop has the same effect as:
495    LOOP_1 has the same effect as:
496 
497    | i_1 = i_0 + 20
498 
499    The overall effect of the loop, "i_0 + 20" in the previous example,
500    is obtained by passing in the parameters: LOOP = 1,
501    EVOLUTION_FN = {i_0, +, 2}_1.
502 */
503 
504 tree
505 compute_overall_effect_of_inner_loop (struct loop *loop, tree evolution_fn)
506 {
507   bool val = false;
508 
509   if (evolution_fn == chrec_dont_know)
510     return chrec_dont_know;
511 
512   else if (TREE_CODE (evolution_fn) == POLYNOMIAL_CHREC)
513     {
514       struct loop *inner_loop = get_chrec_loop (evolution_fn);
515 
516       if (inner_loop == loop
517 	  || flow_loop_nested_p (loop, inner_loop))
518 	{
519 	  tree nb_iter = number_of_latch_executions (inner_loop);
520 
521 	  if (nb_iter == chrec_dont_know)
522 	    return chrec_dont_know;
523 	  else
524 	    {
525 	      tree res;
526 
527 	      /* evolution_fn is the evolution function in LOOP.  Get
528 		 its value in the nb_iter-th iteration.  */
529 	      res = chrec_apply (inner_loop->num, evolution_fn, nb_iter);
530 
531 	      if (chrec_contains_symbols_defined_in_loop (res, loop->num))
532 		res = instantiate_parameters (loop, res);
533 
534 	      /* Continue the computation until ending on a parent of LOOP.  */
535 	      return compute_overall_effect_of_inner_loop (loop, res);
536 	    }
537 	}
538       else
539 	return evolution_fn;
540      }
541 
542   /* If the evolution function is an invariant, there is nothing to do.  */
543   else if (no_evolution_in_loop_p (evolution_fn, loop->num, &val) && val)
544     return evolution_fn;
545 
546   else
547     return chrec_dont_know;
548 }
549 
550 /* Associate CHREC to SCALAR.  */
551 
552 static void
553 set_scalar_evolution (basic_block instantiated_below, tree scalar, tree chrec)
554 {
555   tree *scalar_info;
556 
557   if (TREE_CODE (scalar) != SSA_NAME)
558     return;
559 
560   scalar_info = find_var_scev_info (instantiated_below, scalar);
561 
562   if (dump_file)
563     {
564       if (dump_flags & TDF_SCEV)
565 	{
566 	  fprintf (dump_file, "(set_scalar_evolution \n");
567 	  fprintf (dump_file, "  instantiated_below = %d \n",
568 		   instantiated_below->index);
569 	  fprintf (dump_file, "  (scalar = ");
570 	  print_generic_expr (dump_file, scalar);
571 	  fprintf (dump_file, ")\n  (scalar_evolution = ");
572 	  print_generic_expr (dump_file, chrec);
573 	  fprintf (dump_file, "))\n");
574 	}
575       if (dump_flags & TDF_STATS)
576 	nb_set_scev++;
577     }
578 
579   *scalar_info = chrec;
580 }
581 
582 /* Retrieve the chrec associated to SCALAR instantiated below
583    INSTANTIATED_BELOW block.  */
584 
585 static tree
586 get_scalar_evolution (basic_block instantiated_below, tree scalar)
587 {
588   tree res;
589 
590   if (dump_file)
591     {
592       if (dump_flags & TDF_SCEV)
593 	{
594 	  fprintf (dump_file, "(get_scalar_evolution \n");
595 	  fprintf (dump_file, "  (scalar = ");
596 	  print_generic_expr (dump_file, scalar);
597 	  fprintf (dump_file, ")\n");
598 	}
599       if (dump_flags & TDF_STATS)
600 	nb_get_scev++;
601     }
602 
603   if (VECTOR_TYPE_P (TREE_TYPE (scalar))
604       || TREE_CODE (TREE_TYPE (scalar)) == COMPLEX_TYPE)
605     /* For chrec_dont_know we keep the symbolic form.  */
606     res = scalar;
607   else
608     switch (TREE_CODE (scalar))
609       {
610       case SSA_NAME:
611         if (SSA_NAME_IS_DEFAULT_DEF (scalar))
612 	  res = scalar;
613 	else
614 	  res = *find_var_scev_info (instantiated_below, scalar);
615 	break;
616 
617       case REAL_CST:
618       case FIXED_CST:
619       case INTEGER_CST:
620 	res = scalar;
621 	break;
622 
623       default:
624 	res = chrec_not_analyzed_yet;
625 	break;
626       }
627 
628   if (dump_file && (dump_flags & TDF_SCEV))
629     {
630       fprintf (dump_file, "  (scalar_evolution = ");
631       print_generic_expr (dump_file, res);
632       fprintf (dump_file, "))\n");
633     }
634 
635   return res;
636 }
637 
638 /* Helper function for add_to_evolution.  Returns the evolution
639    function for an assignment of the form "a = b + c", where "a" and
640    "b" are on the strongly connected component.  CHREC_BEFORE is the
641    information that we already have collected up to this point.
642    TO_ADD is the evolution of "c".
643 
644    When CHREC_BEFORE has an evolution part in LOOP_NB, add to this
645    evolution the expression TO_ADD, otherwise construct an evolution
646    part for this loop.  */
647 
648 static tree
649 add_to_evolution_1 (unsigned loop_nb, tree chrec_before, tree to_add,
650 		    gimple *at_stmt)
651 {
652   tree type, left, right;
653   struct loop *loop = get_loop (cfun, loop_nb), *chloop;
654 
655   switch (TREE_CODE (chrec_before))
656     {
657     case POLYNOMIAL_CHREC:
658       chloop = get_chrec_loop (chrec_before);
659       if (chloop == loop
660 	  || flow_loop_nested_p (chloop, loop))
661 	{
662 	  unsigned var;
663 
664 	  type = chrec_type (chrec_before);
665 
666 	  /* When there is no evolution part in this loop, build it.  */
667 	  if (chloop != loop)
668 	    {
669 	      var = loop_nb;
670 	      left = chrec_before;
671 	      right = SCALAR_FLOAT_TYPE_P (type)
672 		? build_real (type, dconst0)
673 		: build_int_cst (type, 0);
674 	    }
675 	  else
676 	    {
677 	      var = CHREC_VARIABLE (chrec_before);
678 	      left = CHREC_LEFT (chrec_before);
679 	      right = CHREC_RIGHT (chrec_before);
680 	    }
681 
682 	  to_add = chrec_convert (type, to_add, at_stmt);
683 	  right = chrec_convert_rhs (type, right, at_stmt);
684 	  right = chrec_fold_plus (chrec_type (right), right, to_add);
685 	  return build_polynomial_chrec (var, left, right);
686 	}
687       else
688 	{
689 	  gcc_assert (flow_loop_nested_p (loop, chloop));
690 
691 	  /* Search the evolution in LOOP_NB.  */
692 	  left = add_to_evolution_1 (loop_nb, CHREC_LEFT (chrec_before),
693 				     to_add, at_stmt);
694 	  right = CHREC_RIGHT (chrec_before);
695 	  right = chrec_convert_rhs (chrec_type (left), right, at_stmt);
696 	  return build_polynomial_chrec (CHREC_VARIABLE (chrec_before),
697 					 left, right);
698 	}
699 
700     default:
701       /* These nodes do not depend on a loop.  */
702       if (chrec_before == chrec_dont_know)
703 	return chrec_dont_know;
704 
705       left = chrec_before;
706       right = chrec_convert_rhs (chrec_type (left), to_add, at_stmt);
707       return build_polynomial_chrec (loop_nb, left, right);
708     }
709 }
710 
711 /* Add TO_ADD to the evolution part of CHREC_BEFORE in the dimension
712    of LOOP_NB.
713 
714    Description (provided for completeness, for those who read code in
715    a plane, and for my poor 62 bytes brain that would have forgotten
716    all this in the next two or three months):
717 
718    The algorithm of translation of programs from the SSA representation
719    into the chrecs syntax is based on a pattern matching.  After having
720    reconstructed the overall tree expression for a loop, there are only
721    two cases that can arise:
722 
723    1. a = loop-phi (init, a + expr)
724    2. a = loop-phi (init, expr)
725 
726    where EXPR is either a scalar constant with respect to the analyzed
727    loop (this is a degree 0 polynomial), or an expression containing
728    other loop-phi definitions (these are higher degree polynomials).
729 
730    Examples:
731 
732    1.
733    | init = ...
734    | loop_1
735    |   a = phi (init, a + 5)
736    | endloop
737 
738    2.
739    | inita = ...
740    | initb = ...
741    | loop_1
742    |   a = phi (inita, 2 * b + 3)
743    |   b = phi (initb, b + 1)
744    | endloop
745 
746    For the first case, the semantics of the SSA representation is:
747 
748    | a (x) = init + \sum_{j = 0}^{x - 1} expr (j)
749 
750    that is, there is a loop index "x" that determines the scalar value
751    of the variable during the loop execution.  During the first
752    iteration, the value is that of the initial condition INIT, while
753    during the subsequent iterations, it is the sum of the initial
754    condition with the sum of all the values of EXPR from the initial
755    iteration to the before last considered iteration.
756 
757    For the second case, the semantics of the SSA program is:
758 
759    | a (x) = init, if x = 0;
760    |         expr (x - 1), otherwise.
761 
762    The second case corresponds to the PEELED_CHREC, whose syntax is
763    close to the syntax of a loop-phi-node:
764 
765    | phi (init, expr)  vs.  (init, expr)_x
766 
767    The proof of the translation algorithm for the first case is a
768    proof by structural induction based on the degree of EXPR.
769 
770    Degree 0:
771    When EXPR is a constant with respect to the analyzed loop, or in
772    other words when EXPR is a polynomial of degree 0, the evolution of
773    the variable A in the loop is an affine function with an initial
774    condition INIT, and a step EXPR.  In order to show this, we start
775    from the semantics of the SSA representation:
776 
777    f (x) = init + \sum_{j = 0}^{x - 1} expr (j)
778 
779    and since "expr (j)" is a constant with respect to "j",
780 
781    f (x) = init + x * expr
782 
783    Finally, based on the semantics of the pure sum chrecs, by
784    identification we get the corresponding chrecs syntax:
785 
786    f (x) = init * \binom{x}{0} + expr * \binom{x}{1}
787    f (x) -> {init, +, expr}_x
788 
789    Higher degree:
790    Suppose that EXPR is a polynomial of degree N with respect to the
791    analyzed loop_x for which we have already determined that it is
792    written under the chrecs syntax:
793 
794    | expr (x)  ->  {b_0, +, b_1, +, ..., +, b_{n-1}} (x)
795 
796    We start from the semantics of the SSA program:
797 
798    | f (x) = init + \sum_{j = 0}^{x - 1} expr (j)
799    |
800    | f (x) = init + \sum_{j = 0}^{x - 1}
801    |                (b_0 * \binom{j}{0} + ... + b_{n-1} * \binom{j}{n-1})
802    |
803    | f (x) = init + \sum_{j = 0}^{x - 1}
804    |                \sum_{k = 0}^{n - 1} (b_k * \binom{j}{k})
805    |
806    | f (x) = init + \sum_{k = 0}^{n - 1}
807    |                (b_k * \sum_{j = 0}^{x - 1} \binom{j}{k})
808    |
809    | f (x) = init + \sum_{k = 0}^{n - 1}
810    |                (b_k * \binom{x}{k + 1})
811    |
812    | f (x) = init + b_0 * \binom{x}{1} + ...
813    |              + b_{n-1} * \binom{x}{n}
814    |
815    | f (x) = init * \binom{x}{0} + b_0 * \binom{x}{1} + ...
816    |                             + b_{n-1} * \binom{x}{n}
817    |
818 
819    And finally from the definition of the chrecs syntax, we identify:
820    | f (x)  ->  {init, +, b_0, +, ..., +, b_{n-1}}_x
821 
822    This shows the mechanism that stands behind the add_to_evolution
823    function.  An important point is that the use of symbolic
824    parameters avoids the need of an analysis schedule.
825 
826    Example:
827 
828    | inita = ...
829    | initb = ...
830    | loop_1
831    |   a = phi (inita, a + 2 + b)
832    |   b = phi (initb, b + 1)
833    | endloop
834 
835    When analyzing "a", the algorithm keeps "b" symbolically:
836 
837    | a  ->  {inita, +, 2 + b}_1
838 
839    Then, after instantiation, the analyzer ends on the evolution:
840 
841    | a  ->  {inita, +, 2 + initb, +, 1}_1
842 
843 */
844 
845 static tree
846 add_to_evolution (unsigned loop_nb, tree chrec_before, enum tree_code code,
847 		  tree to_add, gimple *at_stmt)
848 {
849   tree type = chrec_type (to_add);
850   tree res = NULL_TREE;
851 
852   if (to_add == NULL_TREE)
853     return chrec_before;
854 
855   /* TO_ADD is either a scalar, or a parameter.  TO_ADD is not
856      instantiated at this point.  */
857   if (TREE_CODE (to_add) == POLYNOMIAL_CHREC)
858     /* This should not happen.  */
859     return chrec_dont_know;
860 
861   if (dump_file && (dump_flags & TDF_SCEV))
862     {
863       fprintf (dump_file, "(add_to_evolution \n");
864       fprintf (dump_file, "  (loop_nb = %d)\n", loop_nb);
865       fprintf (dump_file, "  (chrec_before = ");
866       print_generic_expr (dump_file, chrec_before);
867       fprintf (dump_file, ")\n  (to_add = ");
868       print_generic_expr (dump_file, to_add);
869       fprintf (dump_file, ")\n");
870     }
871 
872   if (code == MINUS_EXPR)
873     to_add = chrec_fold_multiply (type, to_add, SCALAR_FLOAT_TYPE_P (type)
874 				  ? build_real (type, dconstm1)
875 				  : build_int_cst_type (type, -1));
876 
877   res = add_to_evolution_1 (loop_nb, chrec_before, to_add, at_stmt);
878 
879   if (dump_file && (dump_flags & TDF_SCEV))
880     {
881       fprintf (dump_file, "  (res = ");
882       print_generic_expr (dump_file, res);
883       fprintf (dump_file, "))\n");
884     }
885 
886   return res;
887 }
888 
889 
890 
891 /* This section selects the loops that will be good candidates for the
892    scalar evolution analysis.  For the moment, greedily select all the
893    loop nests we could analyze.  */
894 
895 /* For a loop with a single exit edge, return the COND_EXPR that
896    guards the exit edge.  If the expression is too difficult to
897    analyze, then give up.  */
898 
899 gcond *
900 get_loop_exit_condition (const struct loop *loop)
901 {
902   gcond *res = NULL;
903   edge exit_edge = single_exit (loop);
904 
905   if (dump_file && (dump_flags & TDF_SCEV))
906     fprintf (dump_file, "(get_loop_exit_condition \n  ");
907 
908   if (exit_edge)
909     {
910       gimple *stmt;
911 
912       stmt = last_stmt (exit_edge->src);
913       if (gcond *cond_stmt = safe_dyn_cast <gcond *> (stmt))
914 	res = cond_stmt;
915     }
916 
917   if (dump_file && (dump_flags & TDF_SCEV))
918     {
919       print_gimple_stmt (dump_file, res, 0);
920       fprintf (dump_file, ")\n");
921     }
922 
923   return res;
924 }
925 
926 
927 /* Depth first search algorithm.  */
928 
929 enum t_bool {
930   t_false,
931   t_true,
932   t_dont_know
933 };
934 
935 
936 static t_bool follow_ssa_edge (struct loop *loop, gimple *, gphi *,
937 			       tree *, int);
938 
939 /* Follow the ssa edge into the binary expression RHS0 CODE RHS1.
940    Return true if the strongly connected component has been found.  */
941 
942 static t_bool
943 follow_ssa_edge_binary (struct loop *loop, gimple *at_stmt,
944 			tree type, tree rhs0, enum tree_code code, tree rhs1,
945 			gphi *halting_phi, tree *evolution_of_loop,
946 			int limit)
947 {
948   t_bool res = t_false;
949   tree evol;
950 
951   switch (code)
952     {
953     case POINTER_PLUS_EXPR:
954     case PLUS_EXPR:
955       if (TREE_CODE (rhs0) == SSA_NAME)
956 	{
957 	  if (TREE_CODE (rhs1) == SSA_NAME)
958 	    {
959 	      /* Match an assignment under the form:
960 		 "a = b + c".  */
961 
962 	      /* We want only assignments of form "name + name" contribute to
963 		 LIMIT, as the other cases do not necessarily contribute to
964 		 the complexity of the expression.  */
965 	      limit++;
966 
967 	      evol = *evolution_of_loop;
968 	      evol = add_to_evolution
969 		  (loop->num,
970 		   chrec_convert (type, evol, at_stmt),
971 		   code, rhs1, at_stmt);
972 	      res = follow_ssa_edge
973 		(loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, &evol, limit);
974 	      if (res == t_true)
975 		*evolution_of_loop = evol;
976 	      else if (res == t_false)
977 		{
978 		  *evolution_of_loop = add_to_evolution
979 		      (loop->num,
980 		       chrec_convert (type, *evolution_of_loop, at_stmt),
981 		       code, rhs0, at_stmt);
982 		  res = follow_ssa_edge
983 		    (loop, SSA_NAME_DEF_STMT (rhs1), halting_phi,
984 		     evolution_of_loop, limit);
985 		  if (res == t_true)
986 		    ;
987 		  else if (res == t_dont_know)
988 		    *evolution_of_loop = chrec_dont_know;
989 		}
990 
991 	      else if (res == t_dont_know)
992 		*evolution_of_loop = chrec_dont_know;
993 	    }
994 
995 	  else
996 	    {
997 	      /* Match an assignment under the form:
998 		 "a = b + ...".  */
999 	      *evolution_of_loop = add_to_evolution
1000 		  (loop->num, chrec_convert (type, *evolution_of_loop,
1001 					     at_stmt),
1002 		   code, rhs1, at_stmt);
1003 	      res = follow_ssa_edge
1004 		(loop, SSA_NAME_DEF_STMT (rhs0), halting_phi,
1005 		 evolution_of_loop, limit);
1006 	      if (res == t_true)
1007 		;
1008 	      else if (res == t_dont_know)
1009 		*evolution_of_loop = chrec_dont_know;
1010 	    }
1011 	}
1012 
1013       else if (TREE_CODE (rhs1) == SSA_NAME)
1014 	{
1015 	  /* Match an assignment under the form:
1016 	     "a = ... + c".  */
1017 	  *evolution_of_loop = add_to_evolution
1018 	      (loop->num, chrec_convert (type, *evolution_of_loop,
1019 					 at_stmt),
1020 	       code, rhs0, at_stmt);
1021 	  res = follow_ssa_edge
1022 	    (loop, SSA_NAME_DEF_STMT (rhs1), halting_phi,
1023 	     evolution_of_loop, limit);
1024 	  if (res == t_true)
1025 	    ;
1026 	  else if (res == t_dont_know)
1027 	    *evolution_of_loop = chrec_dont_know;
1028 	}
1029 
1030       else
1031 	/* Otherwise, match an assignment under the form:
1032 	   "a = ... + ...".  */
1033 	/* And there is nothing to do.  */
1034 	res = t_false;
1035       break;
1036 
1037     case MINUS_EXPR:
1038       /* This case is under the form "opnd0 = rhs0 - rhs1".  */
1039       if (TREE_CODE (rhs0) == SSA_NAME)
1040 	{
1041 	  /* Match an assignment under the form:
1042 	     "a = b - ...".  */
1043 
1044 	  /* We want only assignments of form "name - name" contribute to
1045 	     LIMIT, as the other cases do not necessarily contribute to
1046 	     the complexity of the expression.  */
1047 	  if (TREE_CODE (rhs1) == SSA_NAME)
1048 	    limit++;
1049 
1050 	  *evolution_of_loop = add_to_evolution
1051 	      (loop->num, chrec_convert (type, *evolution_of_loop, at_stmt),
1052 	       MINUS_EXPR, rhs1, at_stmt);
1053 	  res = follow_ssa_edge (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi,
1054 				 evolution_of_loop, limit);
1055 	  if (res == t_true)
1056 	    ;
1057 	  else if (res == t_dont_know)
1058 	    *evolution_of_loop = chrec_dont_know;
1059 	}
1060       else
1061 	/* Otherwise, match an assignment under the form:
1062 	   "a = ... - ...".  */
1063 	/* And there is nothing to do.  */
1064 	res = t_false;
1065       break;
1066 
1067     default:
1068       res = t_false;
1069     }
1070 
1071   return res;
1072 }
1073 
1074 /* Follow the ssa edge into the expression EXPR.
1075    Return true if the strongly connected component has been found.  */
1076 
1077 static t_bool
1078 follow_ssa_edge_expr (struct loop *loop, gimple *at_stmt, tree expr,
1079 		      gphi *halting_phi, tree *evolution_of_loop,
1080 		      int limit)
1081 {
1082   enum tree_code code = TREE_CODE (expr);
1083   tree type = TREE_TYPE (expr), rhs0, rhs1;
1084   t_bool res;
1085 
1086   /* The EXPR is one of the following cases:
1087      - an SSA_NAME,
1088      - an INTEGER_CST,
1089      - a PLUS_EXPR,
1090      - a POINTER_PLUS_EXPR,
1091      - a MINUS_EXPR,
1092      - an ASSERT_EXPR,
1093      - other cases are not yet handled.  */
1094 
1095   switch (code)
1096     {
1097     CASE_CONVERT:
1098       /* This assignment is under the form "a_1 = (cast) rhs.  */
1099       res = follow_ssa_edge_expr (loop, at_stmt, TREE_OPERAND (expr, 0),
1100 				  halting_phi, evolution_of_loop, limit);
1101       *evolution_of_loop = chrec_convert (type, *evolution_of_loop, at_stmt);
1102       break;
1103 
1104     case INTEGER_CST:
1105       /* This assignment is under the form "a_1 = 7".  */
1106       res = t_false;
1107       break;
1108 
1109     case SSA_NAME:
1110       /* This assignment is under the form: "a_1 = b_2".  */
1111       res = follow_ssa_edge
1112 	(loop, SSA_NAME_DEF_STMT (expr), halting_phi, evolution_of_loop, limit);
1113       break;
1114 
1115     case POINTER_PLUS_EXPR:
1116     case PLUS_EXPR:
1117     case MINUS_EXPR:
1118       /* This case is under the form "rhs0 +- rhs1".  */
1119       rhs0 = TREE_OPERAND (expr, 0);
1120       rhs1 = TREE_OPERAND (expr, 1);
1121       type = TREE_TYPE (rhs0);
1122       STRIP_USELESS_TYPE_CONVERSION (rhs0);
1123       STRIP_USELESS_TYPE_CONVERSION (rhs1);
1124       res = follow_ssa_edge_binary (loop, at_stmt, type, rhs0, code, rhs1,
1125 				    halting_phi, evolution_of_loop, limit);
1126       break;
1127 
1128     case ADDR_EXPR:
1129       /* Handle &MEM[ptr + CST] which is equivalent to POINTER_PLUS_EXPR.  */
1130       if (TREE_CODE (TREE_OPERAND (expr, 0)) == MEM_REF)
1131 	{
1132 	  expr = TREE_OPERAND (expr, 0);
1133 	  rhs0 = TREE_OPERAND (expr, 0);
1134 	  rhs1 = TREE_OPERAND (expr, 1);
1135 	  type = TREE_TYPE (rhs0);
1136 	  STRIP_USELESS_TYPE_CONVERSION (rhs0);
1137 	  STRIP_USELESS_TYPE_CONVERSION (rhs1);
1138 	  res = follow_ssa_edge_binary (loop, at_stmt, type,
1139 					rhs0, POINTER_PLUS_EXPR, rhs1,
1140 					halting_phi, evolution_of_loop, limit);
1141 	}
1142       else
1143 	res = t_false;
1144       break;
1145 
1146     case ASSERT_EXPR:
1147       /* This assignment is of the form: "a_1 = ASSERT_EXPR <a_2, ...>"
1148 	 It must be handled as a copy assignment of the form a_1 = a_2.  */
1149       rhs0 = ASSERT_EXPR_VAR (expr);
1150       if (TREE_CODE (rhs0) == SSA_NAME)
1151 	res = follow_ssa_edge (loop, SSA_NAME_DEF_STMT (rhs0),
1152 			       halting_phi, evolution_of_loop, limit);
1153       else
1154 	res = t_false;
1155       break;
1156 
1157     default:
1158       res = t_false;
1159       break;
1160     }
1161 
1162   return res;
1163 }
1164 
1165 /* Follow the ssa edge into the right hand side of an assignment STMT.
1166    Return true if the strongly connected component has been found.  */
1167 
1168 static t_bool
1169 follow_ssa_edge_in_rhs (struct loop *loop, gimple *stmt,
1170 			gphi *halting_phi, tree *evolution_of_loop,
1171 			int limit)
1172 {
1173   enum tree_code code = gimple_assign_rhs_code (stmt);
1174   tree type = gimple_expr_type (stmt), rhs1, rhs2;
1175   t_bool res;
1176 
1177   switch (code)
1178     {
1179     CASE_CONVERT:
1180       /* This assignment is under the form "a_1 = (cast) rhs.  */
1181       res = follow_ssa_edge_expr (loop, stmt, gimple_assign_rhs1 (stmt),
1182 				  halting_phi, evolution_of_loop, limit);
1183       *evolution_of_loop = chrec_convert (type, *evolution_of_loop, stmt);
1184       break;
1185 
1186     case POINTER_PLUS_EXPR:
1187     case PLUS_EXPR:
1188     case MINUS_EXPR:
1189       rhs1 = gimple_assign_rhs1 (stmt);
1190       rhs2 = gimple_assign_rhs2 (stmt);
1191       type = TREE_TYPE (rhs1);
1192       res = follow_ssa_edge_binary (loop, stmt, type, rhs1, code, rhs2,
1193 				    halting_phi, evolution_of_loop, limit);
1194       break;
1195 
1196     default:
1197       if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
1198 	res = follow_ssa_edge_expr (loop, stmt, gimple_assign_rhs1 (stmt),
1199 				    halting_phi, evolution_of_loop, limit);
1200       else
1201 	res = t_false;
1202       break;
1203     }
1204 
1205   return res;
1206 }
1207 
1208 /* Checks whether the I-th argument of a PHI comes from a backedge.  */
1209 
1210 static bool
1211 backedge_phi_arg_p (gphi *phi, int i)
1212 {
1213   const_edge e = gimple_phi_arg_edge (phi, i);
1214 
1215   /* We would in fact like to test EDGE_DFS_BACK here, but we do not care
1216      about updating it anywhere, and this should work as well most of the
1217      time.  */
1218   if (e->flags & EDGE_IRREDUCIBLE_LOOP)
1219     return true;
1220 
1221   return false;
1222 }
1223 
1224 /* Helper function for one branch of the condition-phi-node.  Return
1225    true if the strongly connected component has been found following
1226    this path.  */
1227 
1228 static inline t_bool
1229 follow_ssa_edge_in_condition_phi_branch (int i,
1230 					 struct loop *loop,
1231 					 gphi *condition_phi,
1232 					 gphi *halting_phi,
1233 					 tree *evolution_of_branch,
1234 					 tree init_cond, int limit)
1235 {
1236   tree branch = PHI_ARG_DEF (condition_phi, i);
1237   *evolution_of_branch = chrec_dont_know;
1238 
1239   /* Do not follow back edges (they must belong to an irreducible loop, which
1240      we really do not want to worry about).  */
1241   if (backedge_phi_arg_p (condition_phi, i))
1242     return t_false;
1243 
1244   if (TREE_CODE (branch) == SSA_NAME)
1245     {
1246       *evolution_of_branch = init_cond;
1247       return follow_ssa_edge (loop, SSA_NAME_DEF_STMT (branch), halting_phi,
1248 			      evolution_of_branch, limit);
1249     }
1250 
1251   /* This case occurs when one of the condition branches sets
1252      the variable to a constant: i.e. a phi-node like
1253      "a_2 = PHI <a_7(5), 2(6)>;".
1254 
1255      FIXME:  This case have to be refined correctly:
1256      in some cases it is possible to say something better than
1257      chrec_dont_know, for example using a wrap-around notation.  */
1258   return t_false;
1259 }
1260 
1261 /* This function merges the branches of a condition-phi-node in a
1262    loop.  */
1263 
1264 static t_bool
1265 follow_ssa_edge_in_condition_phi (struct loop *loop,
1266 				  gphi *condition_phi,
1267 				  gphi *halting_phi,
1268 				  tree *evolution_of_loop, int limit)
1269 {
1270   int i, n;
1271   tree init = *evolution_of_loop;
1272   tree evolution_of_branch;
1273   t_bool res = follow_ssa_edge_in_condition_phi_branch (0, loop, condition_phi,
1274 							halting_phi,
1275 							&evolution_of_branch,
1276 							init, limit);
1277   if (res == t_false || res == t_dont_know)
1278     return res;
1279 
1280   *evolution_of_loop = evolution_of_branch;
1281 
1282   n = gimple_phi_num_args (condition_phi);
1283   for (i = 1; i < n; i++)
1284     {
1285       /* Quickly give up when the evolution of one of the branches is
1286 	 not known.  */
1287       if (*evolution_of_loop == chrec_dont_know)
1288 	return t_true;
1289 
1290       /* Increase the limit by the PHI argument number to avoid exponential
1291 	 time and memory complexity.  */
1292       res = follow_ssa_edge_in_condition_phi_branch (i, loop, condition_phi,
1293 						     halting_phi,
1294 						     &evolution_of_branch,
1295 						     init, limit + i);
1296       if (res == t_false || res == t_dont_know)
1297 	return res;
1298 
1299       *evolution_of_loop = chrec_merge (*evolution_of_loop,
1300 					evolution_of_branch);
1301     }
1302 
1303   return t_true;
1304 }
1305 
1306 /* Follow an SSA edge in an inner loop.  It computes the overall
1307    effect of the loop, and following the symbolic initial conditions,
1308    it follows the edges in the parent loop.  The inner loop is
1309    considered as a single statement.  */
1310 
1311 static t_bool
1312 follow_ssa_edge_inner_loop_phi (struct loop *outer_loop,
1313 				gphi *loop_phi_node,
1314 				gphi *halting_phi,
1315 				tree *evolution_of_loop, int limit)
1316 {
1317   struct loop *loop = loop_containing_stmt (loop_phi_node);
1318   tree ev = analyze_scalar_evolution (loop, PHI_RESULT (loop_phi_node));
1319 
1320   /* Sometimes, the inner loop is too difficult to analyze, and the
1321      result of the analysis is a symbolic parameter.  */
1322   if (ev == PHI_RESULT (loop_phi_node))
1323     {
1324       t_bool res = t_false;
1325       int i, n = gimple_phi_num_args (loop_phi_node);
1326 
1327       for (i = 0; i < n; i++)
1328 	{
1329 	  tree arg = PHI_ARG_DEF (loop_phi_node, i);
1330 	  basic_block bb;
1331 
1332 	  /* Follow the edges that exit the inner loop.  */
1333 	  bb = gimple_phi_arg_edge (loop_phi_node, i)->src;
1334 	  if (!flow_bb_inside_loop_p (loop, bb))
1335 	    res = follow_ssa_edge_expr (outer_loop, loop_phi_node,
1336 					arg, halting_phi,
1337 					evolution_of_loop, limit);
1338 	  if (res == t_true)
1339 	    break;
1340 	}
1341 
1342       /* If the path crosses this loop-phi, give up.  */
1343       if (res == t_true)
1344 	*evolution_of_loop = chrec_dont_know;
1345 
1346       return res;
1347     }
1348 
1349   /* Otherwise, compute the overall effect of the inner loop.  */
1350   ev = compute_overall_effect_of_inner_loop (loop, ev);
1351   return follow_ssa_edge_expr (outer_loop, loop_phi_node, ev, halting_phi,
1352 			       evolution_of_loop, limit);
1353 }
1354 
1355 /* Follow an SSA edge from a loop-phi-node to itself, constructing a
1356    path that is analyzed on the return walk.  */
1357 
1358 static t_bool
1359 follow_ssa_edge (struct loop *loop, gimple *def, gphi *halting_phi,
1360 		 tree *evolution_of_loop, int limit)
1361 {
1362   struct loop *def_loop;
1363 
1364   if (gimple_nop_p (def))
1365     return t_false;
1366 
1367   /* Give up if the path is longer than the MAX that we allow.  */
1368   if (limit > PARAM_VALUE (PARAM_SCEV_MAX_EXPR_COMPLEXITY))
1369     return t_dont_know;
1370 
1371   def_loop = loop_containing_stmt (def);
1372 
1373   switch (gimple_code (def))
1374     {
1375     case GIMPLE_PHI:
1376       if (!loop_phi_node_p (def))
1377 	/* DEF is a condition-phi-node.  Follow the branches, and
1378 	   record their evolutions.  Finally, merge the collected
1379 	   information and set the approximation to the main
1380 	   variable.  */
1381 	return follow_ssa_edge_in_condition_phi
1382 	  (loop, as_a <gphi *> (def), halting_phi, evolution_of_loop,
1383 	   limit);
1384 
1385       /* When the analyzed phi is the halting_phi, the
1386 	 depth-first search is over: we have found a path from
1387 	 the halting_phi to itself in the loop.  */
1388       if (def == halting_phi)
1389 	return t_true;
1390 
1391       /* Otherwise, the evolution of the HALTING_PHI depends
1392 	 on the evolution of another loop-phi-node, i.e. the
1393 	 evolution function is a higher degree polynomial.  */
1394       if (def_loop == loop)
1395 	return t_false;
1396 
1397       /* Inner loop.  */
1398       if (flow_loop_nested_p (loop, def_loop))
1399 	return follow_ssa_edge_inner_loop_phi
1400 	  (loop, as_a <gphi *> (def), halting_phi, evolution_of_loop,
1401 	   limit + 1);
1402 
1403       /* Outer loop.  */
1404       return t_false;
1405 
1406     case GIMPLE_ASSIGN:
1407       return follow_ssa_edge_in_rhs (loop, def, halting_phi,
1408 				     evolution_of_loop, limit);
1409 
1410     default:
1411       /* At this level of abstraction, the program is just a set
1412 	 of GIMPLE_ASSIGNs and PHI_NODEs.  In principle there is no
1413 	 other node to be handled.  */
1414       return t_false;
1415     }
1416 }
1417 
1418 
1419 /* Simplify PEELED_CHREC represented by (init_cond, arg) in LOOP.
1420    Handle below case and return the corresponding POLYNOMIAL_CHREC:
1421 
1422    # i_17 = PHI <i_13(5), 0(3)>
1423    # _20 = PHI <_5(5), start_4(D)(3)>
1424    ...
1425    i_13 = i_17 + 1;
1426    _5 = start_4(D) + i_13;
1427 
1428    Though variable _20 appears as a PEELED_CHREC in the form of
1429    (start_4, _5)_LOOP, it's a POLYNOMIAL_CHREC like {start_4, 1}_LOOP.
1430 
1431    See PR41488.  */
1432 
1433 static tree
1434 simplify_peeled_chrec (struct loop *loop, tree arg, tree init_cond)
1435 {
1436   aff_tree aff1, aff2;
1437   tree ev, left, right, type, step_val;
1438   hash_map<tree, name_expansion *> *peeled_chrec_map = NULL;
1439 
1440   ev = instantiate_parameters (loop, analyze_scalar_evolution (loop, arg));
1441   if (ev == NULL_TREE || TREE_CODE (ev) != POLYNOMIAL_CHREC)
1442     return chrec_dont_know;
1443 
1444   left = CHREC_LEFT (ev);
1445   right = CHREC_RIGHT (ev);
1446   type = TREE_TYPE (left);
1447   step_val = chrec_fold_plus (type, init_cond, right);
1448 
1449   /* Transform (init, {left, right}_LOOP)_LOOP to {init, right}_LOOP
1450      if "left" equals to "init + right".  */
1451   if (operand_equal_p (left, step_val, 0))
1452     {
1453       if (dump_file && (dump_flags & TDF_SCEV))
1454 	fprintf (dump_file, "Simplify PEELED_CHREC into POLYNOMIAL_CHREC.\n");
1455 
1456       return build_polynomial_chrec (loop->num, init_cond, right);
1457     }
1458 
1459   /* The affine code only deals with pointer and integer types.  */
1460   if (!POINTER_TYPE_P (type)
1461       && !INTEGRAL_TYPE_P (type))
1462     return chrec_dont_know;
1463 
1464   /* Try harder to check if they are equal.  */
1465   tree_to_aff_combination_expand (left, type, &aff1, &peeled_chrec_map);
1466   tree_to_aff_combination_expand (step_val, type, &aff2, &peeled_chrec_map);
1467   free_affine_expand_cache (&peeled_chrec_map);
1468   aff_combination_scale (&aff2, -1);
1469   aff_combination_add (&aff1, &aff2);
1470 
1471   /* Transform (init, {left, right}_LOOP)_LOOP to {init, right}_LOOP
1472      if "left" equals to "init + right".  */
1473   if (aff_combination_zero_p (&aff1))
1474     {
1475       if (dump_file && (dump_flags & TDF_SCEV))
1476 	fprintf (dump_file, "Simplify PEELED_CHREC into POLYNOMIAL_CHREC.\n");
1477 
1478       return build_polynomial_chrec (loop->num, init_cond, right);
1479     }
1480   return chrec_dont_know;
1481 }
1482 
1483 /* Given a LOOP_PHI_NODE, this function determines the evolution
1484    function from LOOP_PHI_NODE to LOOP_PHI_NODE in the loop.  */
1485 
1486 static tree
1487 analyze_evolution_in_loop (gphi *loop_phi_node,
1488 			   tree init_cond)
1489 {
1490   int i, n = gimple_phi_num_args (loop_phi_node);
1491   tree evolution_function = chrec_not_analyzed_yet;
1492   struct loop *loop = loop_containing_stmt (loop_phi_node);
1493   basic_block bb;
1494   static bool simplify_peeled_chrec_p = true;
1495 
1496   if (dump_file && (dump_flags & TDF_SCEV))
1497     {
1498       fprintf (dump_file, "(analyze_evolution_in_loop \n");
1499       fprintf (dump_file, "  (loop_phi_node = ");
1500       print_gimple_stmt (dump_file, loop_phi_node, 0);
1501       fprintf (dump_file, ")\n");
1502     }
1503 
1504   for (i = 0; i < n; i++)
1505     {
1506       tree arg = PHI_ARG_DEF (loop_phi_node, i);
1507       gimple *ssa_chain;
1508       tree ev_fn;
1509       t_bool res;
1510 
1511       /* Select the edges that enter the loop body.  */
1512       bb = gimple_phi_arg_edge (loop_phi_node, i)->src;
1513       if (!flow_bb_inside_loop_p (loop, bb))
1514 	continue;
1515 
1516       if (TREE_CODE (arg) == SSA_NAME)
1517 	{
1518 	  bool val = false;
1519 
1520 	  ssa_chain = SSA_NAME_DEF_STMT (arg);
1521 
1522 	  /* Pass in the initial condition to the follow edge function.  */
1523 	  ev_fn = init_cond;
1524 	  res = follow_ssa_edge (loop, ssa_chain, loop_phi_node, &ev_fn, 0);
1525 
1526 	  /* If ev_fn has no evolution in the inner loop, and the
1527 	     init_cond is not equal to ev_fn, then we have an
1528 	     ambiguity between two possible values, as we cannot know
1529 	     the number of iterations at this point.  */
1530 	  if (TREE_CODE (ev_fn) != POLYNOMIAL_CHREC
1531 	      && no_evolution_in_loop_p (ev_fn, loop->num, &val) && val
1532 	      && !operand_equal_p (init_cond, ev_fn, 0))
1533 	    ev_fn = chrec_dont_know;
1534 	}
1535       else
1536 	res = t_false;
1537 
1538       /* When it is impossible to go back on the same
1539 	 loop_phi_node by following the ssa edges, the
1540 	 evolution is represented by a peeled chrec, i.e. the
1541 	 first iteration, EV_FN has the value INIT_COND, then
1542 	 all the other iterations it has the value of ARG.
1543 	 For the moment, PEELED_CHREC nodes are not built.  */
1544       if (res != t_true)
1545 	{
1546 	  ev_fn = chrec_dont_know;
1547 	  /* Try to recognize POLYNOMIAL_CHREC which appears in
1548 	     the form of PEELED_CHREC, but guard the process with
1549 	     a bool variable to keep the analyzer from infinite
1550 	     recurrence for real PEELED_RECs.  */
1551 	  if (simplify_peeled_chrec_p && TREE_CODE (arg) == SSA_NAME)
1552 	    {
1553 	      simplify_peeled_chrec_p = false;
1554 	      ev_fn = simplify_peeled_chrec (loop, arg, init_cond);
1555 	      simplify_peeled_chrec_p = true;
1556 	    }
1557 	}
1558 
1559       /* When there are multiple back edges of the loop (which in fact never
1560 	 happens currently, but nevertheless), merge their evolutions.  */
1561       evolution_function = chrec_merge (evolution_function, ev_fn);
1562 
1563       if (evolution_function == chrec_dont_know)
1564 	break;
1565     }
1566 
1567   if (dump_file && (dump_flags & TDF_SCEV))
1568     {
1569       fprintf (dump_file, "  (evolution_function = ");
1570       print_generic_expr (dump_file, evolution_function);
1571       fprintf (dump_file, "))\n");
1572     }
1573 
1574   return evolution_function;
1575 }
1576 
1577 /* Looks to see if VAR is a copy of a constant (via straightforward assignments
1578    or degenerate phi's).  If so, returns the constant; else, returns VAR.  */
1579 
1580 static tree
1581 follow_copies_to_constant (tree var)
1582 {
1583   tree res = var;
1584   while (TREE_CODE (res) == SSA_NAME
1585 	 /* We face not updated SSA form in multiple places and this walk
1586 	    may end up in sibling loops so we have to guard it.  */
1587 	 && !name_registered_for_update_p (res))
1588     {
1589       gimple *def = SSA_NAME_DEF_STMT (res);
1590       if (gphi *phi = dyn_cast <gphi *> (def))
1591 	{
1592 	  if (tree rhs = degenerate_phi_result (phi))
1593 	    res = rhs;
1594 	  else
1595 	    break;
1596 	}
1597       else if (gimple_assign_single_p (def))
1598 	/* Will exit loop if not an SSA_NAME.  */
1599 	res = gimple_assign_rhs1 (def);
1600       else
1601 	break;
1602     }
1603   if (CONSTANT_CLASS_P (res))
1604     return res;
1605   return var;
1606 }
1607 
1608 /* Given a loop-phi-node, return the initial conditions of the
1609    variable on entry of the loop.  When the CCP has propagated
1610    constants into the loop-phi-node, the initial condition is
1611    instantiated, otherwise the initial condition is kept symbolic.
1612    This analyzer does not analyze the evolution outside the current
1613    loop, and leaves this task to the on-demand tree reconstructor.  */
1614 
1615 static tree
1616 analyze_initial_condition (gphi *loop_phi_node)
1617 {
1618   int i, n;
1619   tree init_cond = chrec_not_analyzed_yet;
1620   struct loop *loop = loop_containing_stmt (loop_phi_node);
1621 
1622   if (dump_file && (dump_flags & TDF_SCEV))
1623     {
1624       fprintf (dump_file, "(analyze_initial_condition \n");
1625       fprintf (dump_file, "  (loop_phi_node = \n");
1626       print_gimple_stmt (dump_file, loop_phi_node, 0);
1627       fprintf (dump_file, ")\n");
1628     }
1629 
1630   n = gimple_phi_num_args (loop_phi_node);
1631   for (i = 0; i < n; i++)
1632     {
1633       tree branch = PHI_ARG_DEF (loop_phi_node, i);
1634       basic_block bb = gimple_phi_arg_edge (loop_phi_node, i)->src;
1635 
1636       /* When the branch is oriented to the loop's body, it does
1637      	 not contribute to the initial condition.  */
1638       if (flow_bb_inside_loop_p (loop, bb))
1639        	continue;
1640 
1641       if (init_cond == chrec_not_analyzed_yet)
1642 	{
1643 	  init_cond = branch;
1644 	  continue;
1645 	}
1646 
1647       if (TREE_CODE (branch) == SSA_NAME)
1648 	{
1649 	  init_cond = chrec_dont_know;
1650       	  break;
1651 	}
1652 
1653       init_cond = chrec_merge (init_cond, branch);
1654     }
1655 
1656   /* Ooops -- a loop without an entry???  */
1657   if (init_cond == chrec_not_analyzed_yet)
1658     init_cond = chrec_dont_know;
1659 
1660   /* We may not have fully constant propagated IL.  Handle degenerate PHIs here
1661      to not miss important early loop unrollings.  */
1662   init_cond = follow_copies_to_constant (init_cond);
1663 
1664   if (dump_file && (dump_flags & TDF_SCEV))
1665     {
1666       fprintf (dump_file, "  (init_cond = ");
1667       print_generic_expr (dump_file, init_cond);
1668       fprintf (dump_file, "))\n");
1669     }
1670 
1671   return init_cond;
1672 }
1673 
1674 /* Analyze the scalar evolution for LOOP_PHI_NODE.  */
1675 
1676 static tree
1677 interpret_loop_phi (struct loop *loop, gphi *loop_phi_node)
1678 {
1679   tree res;
1680   struct loop *phi_loop = loop_containing_stmt (loop_phi_node);
1681   tree init_cond;
1682 
1683   gcc_assert (phi_loop == loop);
1684 
1685   /* Otherwise really interpret the loop phi.  */
1686   init_cond = analyze_initial_condition (loop_phi_node);
1687   res = analyze_evolution_in_loop (loop_phi_node, init_cond);
1688 
1689   /* Verify we maintained the correct initial condition throughout
1690      possible conversions in the SSA chain.  */
1691   if (res != chrec_dont_know)
1692     {
1693       tree new_init = res;
1694       if (CONVERT_EXPR_P (res)
1695 	  && TREE_CODE (TREE_OPERAND (res, 0)) == POLYNOMIAL_CHREC)
1696 	new_init = fold_convert (TREE_TYPE (res),
1697 				 CHREC_LEFT (TREE_OPERAND (res, 0)));
1698       else if (TREE_CODE (res) == POLYNOMIAL_CHREC)
1699 	new_init = CHREC_LEFT (res);
1700       STRIP_USELESS_TYPE_CONVERSION (new_init);
1701       if (TREE_CODE (new_init) == POLYNOMIAL_CHREC
1702 	  || !operand_equal_p (init_cond, new_init, 0))
1703 	return chrec_dont_know;
1704     }
1705 
1706   return res;
1707 }
1708 
1709 /* This function merges the branches of a condition-phi-node,
1710    contained in the outermost loop, and whose arguments are already
1711    analyzed.  */
1712 
1713 static tree
1714 interpret_condition_phi (struct loop *loop, gphi *condition_phi)
1715 {
1716   int i, n = gimple_phi_num_args (condition_phi);
1717   tree res = chrec_not_analyzed_yet;
1718 
1719   for (i = 0; i < n; i++)
1720     {
1721       tree branch_chrec;
1722 
1723       if (backedge_phi_arg_p (condition_phi, i))
1724 	{
1725 	  res = chrec_dont_know;
1726 	  break;
1727 	}
1728 
1729       branch_chrec = analyze_scalar_evolution
1730 	(loop, PHI_ARG_DEF (condition_phi, i));
1731 
1732       res = chrec_merge (res, branch_chrec);
1733       if (res == chrec_dont_know)
1734 	break;
1735     }
1736 
1737   return res;
1738 }
1739 
1740 /* Interpret the operation RHS1 OP RHS2.  If we didn't
1741    analyze this node before, follow the definitions until ending
1742    either on an analyzed GIMPLE_ASSIGN, or on a loop-phi-node.  On the
1743    return path, this function propagates evolutions (ala constant copy
1744    propagation).  OPND1 is not a GIMPLE expression because we could
1745    analyze the effect of an inner loop: see interpret_loop_phi.  */
1746 
1747 static tree
1748 interpret_rhs_expr (struct loop *loop, gimple *at_stmt,
1749 		    tree type, tree rhs1, enum tree_code code, tree rhs2)
1750 {
1751   tree res, chrec1, chrec2, ctype;
1752   gimple *def;
1753 
1754   if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
1755     {
1756       if (is_gimple_min_invariant (rhs1))
1757 	return chrec_convert (type, rhs1, at_stmt);
1758 
1759       if (code == SSA_NAME)
1760 	return chrec_convert (type, analyze_scalar_evolution (loop, rhs1),
1761 			      at_stmt);
1762 
1763       if (code == ASSERT_EXPR)
1764 	{
1765 	  rhs1 = ASSERT_EXPR_VAR (rhs1);
1766 	  return chrec_convert (type, analyze_scalar_evolution (loop, rhs1),
1767 				at_stmt);
1768 	}
1769     }
1770 
1771   switch (code)
1772     {
1773     case ADDR_EXPR:
1774       if (TREE_CODE (TREE_OPERAND (rhs1, 0)) == MEM_REF
1775 	  || handled_component_p (TREE_OPERAND (rhs1, 0)))
1776         {
1777 	  machine_mode mode;
1778 	  poly_int64 bitsize, bitpos;
1779 	  int unsignedp, reversep;
1780 	  int volatilep = 0;
1781 	  tree base, offset;
1782 	  tree chrec3;
1783 	  tree unitpos;
1784 
1785 	  base = get_inner_reference (TREE_OPERAND (rhs1, 0),
1786 				      &bitsize, &bitpos, &offset, &mode,
1787 				      &unsignedp, &reversep, &volatilep);
1788 
1789 	  if (TREE_CODE (base) == MEM_REF)
1790 	    {
1791 	      rhs2 = TREE_OPERAND (base, 1);
1792 	      rhs1 = TREE_OPERAND (base, 0);
1793 
1794 	      chrec1 = analyze_scalar_evolution (loop, rhs1);
1795 	      chrec2 = analyze_scalar_evolution (loop, rhs2);
1796 	      chrec1 = chrec_convert (type, chrec1, at_stmt);
1797 	      chrec2 = chrec_convert (TREE_TYPE (rhs2), chrec2, at_stmt);
1798 	      chrec1 = instantiate_parameters (loop, chrec1);
1799 	      chrec2 = instantiate_parameters (loop, chrec2);
1800 	      res = chrec_fold_plus (type, chrec1, chrec2);
1801 	    }
1802 	  else
1803 	    {
1804 	      chrec1 = analyze_scalar_evolution_for_address_of (loop, base);
1805 	      chrec1 = chrec_convert (type, chrec1, at_stmt);
1806 	      res = chrec1;
1807 	    }
1808 
1809 	  if (offset != NULL_TREE)
1810 	    {
1811 	      chrec2 = analyze_scalar_evolution (loop, offset);
1812 	      chrec2 = chrec_convert (TREE_TYPE (offset), chrec2, at_stmt);
1813 	      chrec2 = instantiate_parameters (loop, chrec2);
1814 	      res = chrec_fold_plus (type, res, chrec2);
1815 	    }
1816 
1817 	  if (maybe_ne (bitpos, 0))
1818 	    {
1819 	      unitpos = size_int (exact_div (bitpos, BITS_PER_UNIT));
1820 	      chrec3 = analyze_scalar_evolution (loop, unitpos);
1821 	      chrec3 = chrec_convert (TREE_TYPE (unitpos), chrec3, at_stmt);
1822 	      chrec3 = instantiate_parameters (loop, chrec3);
1823 	      res = chrec_fold_plus (type, res, chrec3);
1824 	    }
1825         }
1826       else
1827 	res = chrec_dont_know;
1828       break;
1829 
1830     case POINTER_PLUS_EXPR:
1831       chrec1 = analyze_scalar_evolution (loop, rhs1);
1832       chrec2 = analyze_scalar_evolution (loop, rhs2);
1833       chrec1 = chrec_convert (type, chrec1, at_stmt);
1834       chrec2 = chrec_convert (TREE_TYPE (rhs2), chrec2, at_stmt);
1835       chrec1 = instantiate_parameters (loop, chrec1);
1836       chrec2 = instantiate_parameters (loop, chrec2);
1837       res = chrec_fold_plus (type, chrec1, chrec2);
1838       break;
1839 
1840     case PLUS_EXPR:
1841       chrec1 = analyze_scalar_evolution (loop, rhs1);
1842       chrec2 = analyze_scalar_evolution (loop, rhs2);
1843       ctype = type;
1844       /* When the stmt is conditionally executed re-write the CHREC
1845          into a form that has well-defined behavior on overflow.  */
1846       if (at_stmt
1847 	  && INTEGRAL_TYPE_P (type)
1848 	  && ! TYPE_OVERFLOW_WRAPS (type)
1849 	  && ! dominated_by_p (CDI_DOMINATORS, loop->latch,
1850 			       gimple_bb (at_stmt)))
1851 	ctype = unsigned_type_for (type);
1852       chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1853       chrec2 = chrec_convert (ctype, chrec2, at_stmt);
1854       chrec1 = instantiate_parameters (loop, chrec1);
1855       chrec2 = instantiate_parameters (loop, chrec2);
1856       res = chrec_fold_plus (ctype, chrec1, chrec2);
1857       if (type != ctype)
1858 	res = chrec_convert (type, res, at_stmt);
1859       break;
1860 
1861     case MINUS_EXPR:
1862       chrec1 = analyze_scalar_evolution (loop, rhs1);
1863       chrec2 = analyze_scalar_evolution (loop, rhs2);
1864       ctype = type;
1865       /* When the stmt is conditionally executed re-write the CHREC
1866          into a form that has well-defined behavior on overflow.  */
1867       if (at_stmt
1868 	  && INTEGRAL_TYPE_P (type)
1869 	  && ! TYPE_OVERFLOW_WRAPS (type)
1870 	  && ! dominated_by_p (CDI_DOMINATORS,
1871 			       loop->latch, gimple_bb (at_stmt)))
1872 	ctype = unsigned_type_for (type);
1873       chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1874       chrec2 = chrec_convert (ctype, chrec2, at_stmt);
1875       chrec1 = instantiate_parameters (loop, chrec1);
1876       chrec2 = instantiate_parameters (loop, chrec2);
1877       res = chrec_fold_minus (ctype, chrec1, chrec2);
1878       if (type != ctype)
1879 	res = chrec_convert (type, res, at_stmt);
1880       break;
1881 
1882     case NEGATE_EXPR:
1883       chrec1 = analyze_scalar_evolution (loop, rhs1);
1884       ctype = type;
1885       /* When the stmt is conditionally executed re-write the CHREC
1886          into a form that has well-defined behavior on overflow.  */
1887       if (at_stmt
1888 	  && INTEGRAL_TYPE_P (type)
1889 	  && ! TYPE_OVERFLOW_WRAPS (type)
1890 	  && ! dominated_by_p (CDI_DOMINATORS,
1891 			       loop->latch, gimple_bb (at_stmt)))
1892 	ctype = unsigned_type_for (type);
1893       chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1894       /* TYPE may be integer, real or complex, so use fold_convert.  */
1895       chrec1 = instantiate_parameters (loop, chrec1);
1896       res = chrec_fold_multiply (ctype, chrec1,
1897 				 fold_convert (ctype, integer_minus_one_node));
1898       if (type != ctype)
1899 	res = chrec_convert (type, res, at_stmt);
1900       break;
1901 
1902     case BIT_NOT_EXPR:
1903       /* Handle ~X as -1 - X.  */
1904       chrec1 = analyze_scalar_evolution (loop, rhs1);
1905       chrec1 = chrec_convert (type, chrec1, at_stmt);
1906       chrec1 = instantiate_parameters (loop, chrec1);
1907       res = chrec_fold_minus (type,
1908 			      fold_convert (type, integer_minus_one_node),
1909 			      chrec1);
1910       break;
1911 
1912     case MULT_EXPR:
1913       chrec1 = analyze_scalar_evolution (loop, rhs1);
1914       chrec2 = analyze_scalar_evolution (loop, rhs2);
1915       ctype = type;
1916       /* When the stmt is conditionally executed re-write the CHREC
1917          into a form that has well-defined behavior on overflow.  */
1918       if (at_stmt
1919 	  && INTEGRAL_TYPE_P (type)
1920 	  && ! TYPE_OVERFLOW_WRAPS (type)
1921 	  && ! dominated_by_p (CDI_DOMINATORS,
1922 			       loop->latch, gimple_bb (at_stmt)))
1923 	ctype = unsigned_type_for (type);
1924       chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1925       chrec2 = chrec_convert (ctype, chrec2, at_stmt);
1926       chrec1 = instantiate_parameters (loop, chrec1);
1927       chrec2 = instantiate_parameters (loop, chrec2);
1928       res = chrec_fold_multiply (ctype, chrec1, chrec2);
1929       if (type != ctype)
1930 	res = chrec_convert (type, res, at_stmt);
1931       break;
1932 
1933     case LSHIFT_EXPR:
1934       {
1935 	/* Handle A<<B as A * (1<<B).  */
1936 	tree uns = unsigned_type_for (type);
1937 	chrec1 = analyze_scalar_evolution (loop, rhs1);
1938 	chrec2 = analyze_scalar_evolution (loop, rhs2);
1939 	chrec1 = chrec_convert (uns, chrec1, at_stmt);
1940 	chrec1 = instantiate_parameters (loop, chrec1);
1941 	chrec2 = instantiate_parameters (loop, chrec2);
1942 
1943 	tree one = build_int_cst (uns, 1);
1944 	chrec2 = fold_build2 (LSHIFT_EXPR, uns, one, chrec2);
1945 	res = chrec_fold_multiply (uns, chrec1, chrec2);
1946 	res = chrec_convert (type, res, at_stmt);
1947       }
1948       break;
1949 
1950     CASE_CONVERT:
1951       /* In case we have a truncation of a widened operation that in
1952          the truncated type has undefined overflow behavior analyze
1953 	 the operation done in an unsigned type of the same precision
1954 	 as the final truncation.  We cannot derive a scalar evolution
1955 	 for the widened operation but for the truncated result.  */
1956       if (TREE_CODE (type) == INTEGER_TYPE
1957 	  && TREE_CODE (TREE_TYPE (rhs1)) == INTEGER_TYPE
1958 	  && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (rhs1))
1959 	  && TYPE_OVERFLOW_UNDEFINED (type)
1960 	  && TREE_CODE (rhs1) == SSA_NAME
1961 	  && (def = SSA_NAME_DEF_STMT (rhs1))
1962 	  && is_gimple_assign (def)
1963 	  && TREE_CODE_CLASS (gimple_assign_rhs_code (def)) == tcc_binary
1964 	  && TREE_CODE (gimple_assign_rhs2 (def)) == INTEGER_CST)
1965 	{
1966 	  tree utype = unsigned_type_for (type);
1967 	  chrec1 = interpret_rhs_expr (loop, at_stmt, utype,
1968 				       gimple_assign_rhs1 (def),
1969 				       gimple_assign_rhs_code (def),
1970 				       gimple_assign_rhs2 (def));
1971 	}
1972       else
1973 	chrec1 = analyze_scalar_evolution (loop, rhs1);
1974       res = chrec_convert (type, chrec1, at_stmt, true, rhs1);
1975       break;
1976 
1977     case BIT_AND_EXPR:
1978       /* Given int variable A, handle A&0xffff as (int)(unsigned short)A.
1979 	 If A is SCEV and its value is in the range of representable set
1980 	 of type unsigned short, the result expression is a (no-overflow)
1981 	 SCEV.  */
1982       res = chrec_dont_know;
1983       if (tree_fits_uhwi_p (rhs2))
1984 	{
1985 	  int precision;
1986 	  unsigned HOST_WIDE_INT val = tree_to_uhwi (rhs2);
1987 
1988 	  val ++;
1989 	  /* Skip if value of rhs2 wraps in unsigned HOST_WIDE_INT or
1990 	     it's not the maximum value of a smaller type than rhs1.  */
1991 	  if (val != 0
1992 	      && (precision = exact_log2 (val)) > 0
1993 	      && (unsigned) precision < TYPE_PRECISION (TREE_TYPE (rhs1)))
1994 	    {
1995 	      tree utype = build_nonstandard_integer_type (precision, 1);
1996 
1997 	      if (TYPE_PRECISION (utype) < TYPE_PRECISION (TREE_TYPE (rhs1)))
1998 		{
1999 		  chrec1 = analyze_scalar_evolution (loop, rhs1);
2000 		  chrec1 = chrec_convert (utype, chrec1, at_stmt);
2001 		  res = chrec_convert (TREE_TYPE (rhs1), chrec1, at_stmt);
2002 		}
2003 	    }
2004 	}
2005       break;
2006 
2007     default:
2008       res = chrec_dont_know;
2009       break;
2010     }
2011 
2012   return res;
2013 }
2014 
2015 /* Interpret the expression EXPR.  */
2016 
2017 static tree
2018 interpret_expr (struct loop *loop, gimple *at_stmt, tree expr)
2019 {
2020   enum tree_code code;
2021   tree type = TREE_TYPE (expr), op0, op1;
2022 
2023   if (automatically_generated_chrec_p (expr))
2024     return expr;
2025 
2026   if (TREE_CODE (expr) == POLYNOMIAL_CHREC
2027       || TREE_CODE (expr) == CALL_EXPR
2028       || get_gimple_rhs_class (TREE_CODE (expr)) == GIMPLE_TERNARY_RHS)
2029     return chrec_dont_know;
2030 
2031   extract_ops_from_tree (expr, &code, &op0, &op1);
2032 
2033   return interpret_rhs_expr (loop, at_stmt, type,
2034 			     op0, code, op1);
2035 }
2036 
2037 /* Interpret the rhs of the assignment STMT.  */
2038 
2039 static tree
2040 interpret_gimple_assign (struct loop *loop, gimple *stmt)
2041 {
2042   tree type = TREE_TYPE (gimple_assign_lhs (stmt));
2043   enum tree_code code = gimple_assign_rhs_code (stmt);
2044 
2045   return interpret_rhs_expr (loop, stmt, type,
2046 			     gimple_assign_rhs1 (stmt), code,
2047 			     gimple_assign_rhs2 (stmt));
2048 }
2049 
2050 
2051 
2052 /* This section contains all the entry points:
2053    - number_of_iterations_in_loop,
2054    - analyze_scalar_evolution,
2055    - instantiate_parameters.
2056 */
2057 
2058 /* Helper recursive function.  */
2059 
2060 static tree
2061 analyze_scalar_evolution_1 (struct loop *loop, tree var)
2062 {
2063   gimple *def;
2064   basic_block bb;
2065   struct loop *def_loop;
2066   tree res;
2067 
2068   if (TREE_CODE (var) != SSA_NAME)
2069     return interpret_expr (loop, NULL, var);
2070 
2071   def = SSA_NAME_DEF_STMT (var);
2072   bb = gimple_bb (def);
2073   def_loop = bb->loop_father;
2074 
2075   if (!flow_bb_inside_loop_p (loop, bb))
2076     {
2077       /* Keep symbolic form, but look through obvious copies for constants.  */
2078       res = follow_copies_to_constant (var);
2079       goto set_and_end;
2080     }
2081 
2082   if (loop != def_loop)
2083     {
2084       res = analyze_scalar_evolution_1 (def_loop, var);
2085       struct loop *loop_to_skip = superloop_at_depth (def_loop,
2086 						      loop_depth (loop) + 1);
2087       res = compute_overall_effect_of_inner_loop (loop_to_skip, res);
2088       if (chrec_contains_symbols_defined_in_loop (res, loop->num))
2089 	res = analyze_scalar_evolution_1 (loop, res);
2090       goto set_and_end;
2091     }
2092 
2093   switch (gimple_code (def))
2094     {
2095     case GIMPLE_ASSIGN:
2096       res = interpret_gimple_assign (loop, def);
2097       break;
2098 
2099     case GIMPLE_PHI:
2100       if (loop_phi_node_p (def))
2101 	res = interpret_loop_phi (loop, as_a <gphi *> (def));
2102       else
2103 	res = interpret_condition_phi (loop, as_a <gphi *> (def));
2104       break;
2105 
2106     default:
2107       res = chrec_dont_know;
2108       break;
2109     }
2110 
2111  set_and_end:
2112 
2113   /* Keep the symbolic form.  */
2114   if (res == chrec_dont_know)
2115     res = var;
2116 
2117   if (loop == def_loop)
2118     set_scalar_evolution (block_before_loop (loop), var, res);
2119 
2120   return res;
2121 }
2122 
2123 /* Analyzes and returns the scalar evolution of the ssa_name VAR in
2124    LOOP.  LOOP is the loop in which the variable is used.
2125 
2126    Example of use: having a pointer VAR to a SSA_NAME node, STMT a
2127    pointer to the statement that uses this variable, in order to
2128    determine the evolution function of the variable, use the following
2129    calls:
2130 
2131    loop_p loop = loop_containing_stmt (stmt);
2132    tree chrec_with_symbols = analyze_scalar_evolution (loop, var);
2133    tree chrec_instantiated = instantiate_parameters (loop, chrec_with_symbols);
2134 */
2135 
2136 tree
2137 analyze_scalar_evolution (struct loop *loop, tree var)
2138 {
2139   tree res;
2140 
2141   /* ???  Fix callers.  */
2142   if (! loop)
2143     return var;
2144 
2145   if (dump_file && (dump_flags & TDF_SCEV))
2146     {
2147       fprintf (dump_file, "(analyze_scalar_evolution \n");
2148       fprintf (dump_file, "  (loop_nb = %d)\n", loop->num);
2149       fprintf (dump_file, "  (scalar = ");
2150       print_generic_expr (dump_file, var);
2151       fprintf (dump_file, ")\n");
2152     }
2153 
2154   res = get_scalar_evolution (block_before_loop (loop), var);
2155   if (res == chrec_not_analyzed_yet)
2156     {
2157       /* We'll recurse into instantiate_scev, avoid tearing down the
2158          instantiate cache repeatedly and keep it live from here.  */
2159       bool destr = false;
2160       if (!global_cache)
2161 	{
2162 	  global_cache = new instantiate_cache_type;
2163 	  destr = true;
2164 	}
2165       res = analyze_scalar_evolution_1 (loop, var);
2166       if (destr)
2167 	{
2168 	  delete global_cache;
2169 	  global_cache = NULL;
2170 	}
2171     }
2172 
2173   if (dump_file && (dump_flags & TDF_SCEV))
2174     fprintf (dump_file, ")\n");
2175 
2176   return res;
2177 }
2178 
2179 /* Analyzes and returns the scalar evolution of VAR address in LOOP.  */
2180 
2181 static tree
2182 analyze_scalar_evolution_for_address_of (struct loop *loop, tree var)
2183 {
2184   return analyze_scalar_evolution (loop, build_fold_addr_expr (var));
2185 }
2186 
2187 /* Analyze scalar evolution of use of VERSION in USE_LOOP with respect to
2188    WRTO_LOOP (which should be a superloop of USE_LOOP)
2189 
2190    FOLDED_CASTS is set to true if resolve_mixers used
2191    chrec_convert_aggressive (TODO -- not really, we are way too conservative
2192    at the moment in order to keep things simple).
2193 
2194    To illustrate the meaning of USE_LOOP and WRTO_LOOP, consider the following
2195    example:
2196 
2197    for (i = 0; i < 100; i++)			-- loop 1
2198      {
2199        for (j = 0; j < 100; j++)		-- loop 2
2200          {
2201 	   k1 = i;
2202 	   k2 = j;
2203 
2204 	   use2 (k1, k2);
2205 
2206 	   for (t = 0; t < 100; t++)		-- loop 3
2207 	     use3 (k1, k2);
2208 
2209 	 }
2210        use1 (k1, k2);
2211      }
2212 
2213    Both k1 and k2 are invariants in loop3, thus
2214      analyze_scalar_evolution_in_loop (loop3, loop3, k1) = k1
2215      analyze_scalar_evolution_in_loop (loop3, loop3, k2) = k2
2216 
2217    As they are invariant, it does not matter whether we consider their
2218    usage in loop 3 or loop 2, hence
2219      analyze_scalar_evolution_in_loop (loop2, loop3, k1) =
2220        analyze_scalar_evolution_in_loop (loop2, loop2, k1) = i
2221      analyze_scalar_evolution_in_loop (loop2, loop3, k2) =
2222        analyze_scalar_evolution_in_loop (loop2, loop2, k2) = [0,+,1]_2
2223 
2224    Similarly for their evolutions with respect to loop 1.  The values of K2
2225    in the use in loop 2 vary independently on loop 1, thus we cannot express
2226    the evolution with respect to loop 1:
2227      analyze_scalar_evolution_in_loop (loop1, loop3, k1) =
2228        analyze_scalar_evolution_in_loop (loop1, loop2, k1) = [0,+,1]_1
2229      analyze_scalar_evolution_in_loop (loop1, loop3, k2) =
2230        analyze_scalar_evolution_in_loop (loop1, loop2, k2) = dont_know
2231 
2232    The value of k2 in the use in loop 1 is known, though:
2233      analyze_scalar_evolution_in_loop (loop1, loop1, k1) = [0,+,1]_1
2234      analyze_scalar_evolution_in_loop (loop1, loop1, k2) = 100
2235    */
2236 
2237 static tree
2238 analyze_scalar_evolution_in_loop (struct loop *wrto_loop, struct loop *use_loop,
2239 				  tree version, bool *folded_casts)
2240 {
2241   bool val = false;
2242   tree ev = version, tmp;
2243 
2244   /* We cannot just do
2245 
2246      tmp = analyze_scalar_evolution (use_loop, version);
2247      ev = resolve_mixers (wrto_loop, tmp, folded_casts);
2248 
2249      as resolve_mixers would query the scalar evolution with respect to
2250      wrto_loop.  For example, in the situation described in the function
2251      comment, suppose that wrto_loop = loop1, use_loop = loop3 and
2252      version = k2.  Then
2253 
2254      analyze_scalar_evolution (use_loop, version) = k2
2255 
2256      and resolve_mixers (loop1, k2, folded_casts) finds that the value of
2257      k2 in loop 1 is 100, which is a wrong result, since we are interested
2258      in the value in loop 3.
2259 
2260      Instead, we need to proceed from use_loop to wrto_loop loop by loop,
2261      each time checking that there is no evolution in the inner loop.  */
2262 
2263   if (folded_casts)
2264     *folded_casts = false;
2265   while (1)
2266     {
2267       tmp = analyze_scalar_evolution (use_loop, ev);
2268       ev = resolve_mixers (use_loop, tmp, folded_casts);
2269 
2270       if (use_loop == wrto_loop)
2271 	return ev;
2272 
2273       /* If the value of the use changes in the inner loop, we cannot express
2274 	 its value in the outer loop (we might try to return interval chrec,
2275 	 but we do not have a user for it anyway)  */
2276       if (!no_evolution_in_loop_p (ev, use_loop->num, &val)
2277 	  || !val)
2278 	return chrec_dont_know;
2279 
2280       use_loop = loop_outer (use_loop);
2281     }
2282 }
2283 
2284 
2285 /* Computes a hash function for database element ELT.  */
2286 
2287 static inline hashval_t
2288 hash_idx_scev_info (const void *elt_)
2289 {
2290   unsigned idx = ((size_t) elt_) - 2;
2291   return scev_info_hasher::hash (&global_cache->entries[idx]);
2292 }
2293 
2294 /* Compares database elements E1 and E2.  */
2295 
2296 static inline int
2297 eq_idx_scev_info (const void *e1, const void *e2)
2298 {
2299   unsigned idx1 = ((size_t) e1) - 2;
2300   return scev_info_hasher::equal (&global_cache->entries[idx1],
2301 				  (const scev_info_str *) e2);
2302 }
2303 
2304 /* Returns from CACHE the slot number of the cached chrec for NAME.  */
2305 
2306 static unsigned
2307 get_instantiated_value_entry (instantiate_cache_type &cache,
2308 			      tree name, edge instantiate_below)
2309 {
2310   if (!cache.map)
2311     {
2312       cache.map = htab_create (10, hash_idx_scev_info, eq_idx_scev_info, NULL);
2313       cache.entries.create (10);
2314     }
2315 
2316   scev_info_str e;
2317   e.name_version = SSA_NAME_VERSION (name);
2318   e.instantiated_below = instantiate_below->dest->index;
2319   void **slot = htab_find_slot_with_hash (cache.map, &e,
2320 					  scev_info_hasher::hash (&e), INSERT);
2321   if (!*slot)
2322     {
2323       e.chrec = chrec_not_analyzed_yet;
2324       *slot = (void *)(size_t)(cache.entries.length () + 2);
2325       cache.entries.safe_push (e);
2326     }
2327 
2328   return ((size_t)*slot) - 2;
2329 }
2330 
2331 
2332 /* Return the closed_loop_phi node for VAR.  If there is none, return
2333    NULL_TREE.  */
2334 
2335 static tree
2336 loop_closed_phi_def (tree var)
2337 {
2338   struct loop *loop;
2339   edge exit;
2340   gphi *phi;
2341   gphi_iterator psi;
2342 
2343   if (var == NULL_TREE
2344       || TREE_CODE (var) != SSA_NAME)
2345     return NULL_TREE;
2346 
2347   loop = loop_containing_stmt (SSA_NAME_DEF_STMT (var));
2348   exit = single_exit (loop);
2349   if (!exit)
2350     return NULL_TREE;
2351 
2352   for (psi = gsi_start_phis (exit->dest); !gsi_end_p (psi); gsi_next (&psi))
2353     {
2354       phi = psi.phi ();
2355       if (PHI_ARG_DEF_FROM_EDGE (phi, exit) == var)
2356 	return PHI_RESULT (phi);
2357     }
2358 
2359   return NULL_TREE;
2360 }
2361 
2362 static tree instantiate_scev_r (edge, struct loop *, struct loop *,
2363 				tree, bool *, int);
2364 
2365 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2366    and EVOLUTION_LOOP, that were left under a symbolic form.
2367 
2368    CHREC is an SSA_NAME to be instantiated.
2369 
2370    CACHE is the cache of already instantiated values.
2371 
2372    Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2373    conversions that may wrap in signed/pointer type are folded, as long
2374    as the value of the chrec is preserved.  If FOLD_CONVERSIONS is NULL
2375    then we don't do such fold.
2376 
2377    SIZE_EXPR is used for computing the size of the expression to be
2378    instantiated, and to stop if it exceeds some limit.  */
2379 
2380 static tree
2381 instantiate_scev_name (edge instantiate_below,
2382 		       struct loop *evolution_loop, struct loop *inner_loop,
2383 		       tree chrec,
2384 		       bool *fold_conversions,
2385 		       int size_expr)
2386 {
2387   tree res;
2388   struct loop *def_loop;
2389   basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (chrec));
2390 
2391   /* A parameter, nothing to do.  */
2392   if (!def_bb
2393       || !dominated_by_p (CDI_DOMINATORS, def_bb, instantiate_below->dest))
2394     return chrec;
2395 
2396   /* We cache the value of instantiated variable to avoid exponential
2397      time complexity due to reevaluations.  We also store the convenient
2398      value in the cache in order to prevent infinite recursion -- we do
2399      not want to instantiate the SSA_NAME if it is in a mixer
2400      structure.  This is used for avoiding the instantiation of
2401      recursively defined functions, such as:
2402 
2403      | a_2 -> {0, +, 1, +, a_2}_1  */
2404 
2405   unsigned si = get_instantiated_value_entry (*global_cache,
2406 					      chrec, instantiate_below);
2407   if (global_cache->get (si) != chrec_not_analyzed_yet)
2408     return global_cache->get (si);
2409 
2410   /* On recursion return chrec_dont_know.  */
2411   global_cache->set (si, chrec_dont_know);
2412 
2413   def_loop = find_common_loop (evolution_loop, def_bb->loop_father);
2414 
2415   if (! dominated_by_p (CDI_DOMINATORS,
2416 			def_loop->header, instantiate_below->dest))
2417     {
2418       gimple *def = SSA_NAME_DEF_STMT (chrec);
2419       if (gassign *ass = dyn_cast <gassign *> (def))
2420 	{
2421 	  switch (gimple_assign_rhs_class (ass))
2422 	    {
2423 	    case GIMPLE_UNARY_RHS:
2424 	      {
2425 		tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2426 					       inner_loop, gimple_assign_rhs1 (ass),
2427 					       fold_conversions, size_expr);
2428 		if (op0 == chrec_dont_know)
2429 		  return chrec_dont_know;
2430 		res = fold_build1 (gimple_assign_rhs_code (ass),
2431 				   TREE_TYPE (chrec), op0);
2432 		break;
2433 	      }
2434 	    case GIMPLE_BINARY_RHS:
2435 	      {
2436 		tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2437 					       inner_loop, gimple_assign_rhs1 (ass),
2438 					       fold_conversions, size_expr);
2439 		if (op0 == chrec_dont_know)
2440 		  return chrec_dont_know;
2441 		tree op1 = instantiate_scev_r (instantiate_below, evolution_loop,
2442 					       inner_loop, gimple_assign_rhs2 (ass),
2443 					       fold_conversions, size_expr);
2444 		if (op1 == chrec_dont_know)
2445 		  return chrec_dont_know;
2446 		res = fold_build2 (gimple_assign_rhs_code (ass),
2447 				   TREE_TYPE (chrec), op0, op1);
2448 		break;
2449 	      }
2450 	    default:
2451 	      res = chrec_dont_know;
2452 	    }
2453 	}
2454       else
2455 	res = chrec_dont_know;
2456       global_cache->set (si, res);
2457       return res;
2458     }
2459 
2460   /* If the analysis yields a parametric chrec, instantiate the
2461      result again.  */
2462   res = analyze_scalar_evolution (def_loop, chrec);
2463 
2464   /* Don't instantiate default definitions.  */
2465   if (TREE_CODE (res) == SSA_NAME
2466       && SSA_NAME_IS_DEFAULT_DEF (res))
2467     ;
2468 
2469   /* Don't instantiate loop-closed-ssa phi nodes.  */
2470   else if (TREE_CODE (res) == SSA_NAME
2471 	   && loop_depth (loop_containing_stmt (SSA_NAME_DEF_STMT (res)))
2472 	   > loop_depth (def_loop))
2473     {
2474       if (res == chrec)
2475 	res = loop_closed_phi_def (chrec);
2476       else
2477 	res = chrec;
2478 
2479       /* When there is no loop_closed_phi_def, it means that the
2480 	 variable is not used after the loop: try to still compute the
2481 	 value of the variable when exiting the loop.  */
2482       if (res == NULL_TREE)
2483 	{
2484 	  loop_p loop = loop_containing_stmt (SSA_NAME_DEF_STMT (chrec));
2485 	  res = analyze_scalar_evolution (loop, chrec);
2486 	  res = compute_overall_effect_of_inner_loop (loop, res);
2487 	  res = instantiate_scev_r (instantiate_below, evolution_loop,
2488 				    inner_loop, res,
2489 				    fold_conversions, size_expr);
2490 	}
2491       else if (dominated_by_p (CDI_DOMINATORS,
2492 				gimple_bb (SSA_NAME_DEF_STMT (res)),
2493 				instantiate_below->dest))
2494 	res = chrec_dont_know;
2495     }
2496 
2497   else if (res != chrec_dont_know)
2498     {
2499       if (inner_loop
2500 	  && def_bb->loop_father != inner_loop
2501 	  && !flow_loop_nested_p (def_bb->loop_father, inner_loop))
2502 	/* ???  We could try to compute the overall effect of the loop here.  */
2503 	res = chrec_dont_know;
2504       else
2505 	res = instantiate_scev_r (instantiate_below, evolution_loop,
2506 				  inner_loop, res,
2507 				  fold_conversions, size_expr);
2508     }
2509 
2510   /* Store the correct value to the cache.  */
2511   global_cache->set (si, res);
2512   return res;
2513 }
2514 
2515 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2516    and EVOLUTION_LOOP, that were left under a symbolic form.
2517 
2518    CHREC is a polynomial chain of recurrence to be instantiated.
2519 
2520    CACHE is the cache of already instantiated values.
2521 
2522    Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2523    conversions that may wrap in signed/pointer type are folded, as long
2524    as the value of the chrec is preserved.  If FOLD_CONVERSIONS is NULL
2525    then we don't do such fold.
2526 
2527    SIZE_EXPR is used for computing the size of the expression to be
2528    instantiated, and to stop if it exceeds some limit.  */
2529 
2530 static tree
2531 instantiate_scev_poly (edge instantiate_below,
2532 		       struct loop *evolution_loop, struct loop *,
2533 		       tree chrec, bool *fold_conversions, int size_expr)
2534 {
2535   tree op1;
2536   tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2537 				 get_chrec_loop (chrec),
2538 				 CHREC_LEFT (chrec), fold_conversions,
2539 				 size_expr);
2540   if (op0 == chrec_dont_know)
2541     return chrec_dont_know;
2542 
2543   op1 = instantiate_scev_r (instantiate_below, evolution_loop,
2544 			    get_chrec_loop (chrec),
2545 			    CHREC_RIGHT (chrec), fold_conversions,
2546 			    size_expr);
2547   if (op1 == chrec_dont_know)
2548     return chrec_dont_know;
2549 
2550   if (CHREC_LEFT (chrec) != op0
2551       || CHREC_RIGHT (chrec) != op1)
2552     {
2553       op1 = chrec_convert_rhs (chrec_type (op0), op1, NULL);
2554       chrec = build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1);
2555     }
2556 
2557   return chrec;
2558 }
2559 
2560 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2561    and EVOLUTION_LOOP, that were left under a symbolic form.
2562 
2563    "C0 CODE C1" is a binary expression of type TYPE to be instantiated.
2564 
2565    CACHE is the cache of already instantiated values.
2566 
2567    Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2568    conversions that may wrap in signed/pointer type are folded, as long
2569    as the value of the chrec is preserved.  If FOLD_CONVERSIONS is NULL
2570    then we don't do such fold.
2571 
2572    SIZE_EXPR is used for computing the size of the expression to be
2573    instantiated, and to stop if it exceeds some limit.  */
2574 
2575 static tree
2576 instantiate_scev_binary (edge instantiate_below,
2577 			 struct loop *evolution_loop, struct loop *inner_loop,
2578 			 tree chrec, enum tree_code code,
2579 			 tree type, tree c0, tree c1,
2580 			 bool *fold_conversions, int size_expr)
2581 {
2582   tree op1;
2583   tree op0 = instantiate_scev_r (instantiate_below, evolution_loop, inner_loop,
2584 				 c0, fold_conversions, size_expr);
2585   if (op0 == chrec_dont_know)
2586     return chrec_dont_know;
2587 
2588   /* While we eventually compute the same op1 if c0 == c1 the process
2589      of doing this is expensive so the following short-cut prevents
2590      exponential compile-time behavior.  */
2591   if (c0 != c1)
2592     {
2593       op1 = instantiate_scev_r (instantiate_below, evolution_loop, inner_loop,
2594 				c1, fold_conversions, size_expr);
2595       if (op1 == chrec_dont_know)
2596 	return chrec_dont_know;
2597     }
2598   else
2599     op1 = op0;
2600 
2601   if (c0 != op0
2602       || c1 != op1)
2603     {
2604       op0 = chrec_convert (type, op0, NULL);
2605       op1 = chrec_convert_rhs (type, op1, NULL);
2606 
2607       switch (code)
2608 	{
2609 	case POINTER_PLUS_EXPR:
2610 	case PLUS_EXPR:
2611 	  return chrec_fold_plus (type, op0, op1);
2612 
2613 	case MINUS_EXPR:
2614 	  return chrec_fold_minus (type, op0, op1);
2615 
2616 	case MULT_EXPR:
2617 	  return chrec_fold_multiply (type, op0, op1);
2618 
2619 	default:
2620 	  gcc_unreachable ();
2621 	}
2622     }
2623 
2624   return chrec ? chrec : fold_build2 (code, type, c0, c1);
2625 }
2626 
2627 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2628    and EVOLUTION_LOOP, that were left under a symbolic form.
2629 
2630    "CHREC" that stands for a convert expression "(TYPE) OP" is to be
2631    instantiated.
2632 
2633    CACHE is the cache of already instantiated values.
2634 
2635    Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2636    conversions that may wrap in signed/pointer type are folded, as long
2637    as the value of the chrec is preserved.  If FOLD_CONVERSIONS is NULL
2638    then we don't do such fold.
2639 
2640    SIZE_EXPR is used for computing the size of the expression to be
2641    instantiated, and to stop if it exceeds some limit.  */
2642 
2643 static tree
2644 instantiate_scev_convert (edge instantiate_below,
2645 			  struct loop *evolution_loop, struct loop *inner_loop,
2646 			  tree chrec, tree type, tree op,
2647 			  bool *fold_conversions, int size_expr)
2648 {
2649   tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2650 				 inner_loop, op,
2651 				 fold_conversions, size_expr);
2652 
2653   if (op0 == chrec_dont_know)
2654     return chrec_dont_know;
2655 
2656   if (fold_conversions)
2657     {
2658       tree tmp = chrec_convert_aggressive (type, op0, fold_conversions);
2659       if (tmp)
2660 	return tmp;
2661 
2662       /* If we used chrec_convert_aggressive, we can no longer assume that
2663 	 signed chrecs do not overflow, as chrec_convert does, so avoid
2664 	 calling it in that case.  */
2665       if (*fold_conversions)
2666 	{
2667 	  if (chrec && op0 == op)
2668 	    return chrec;
2669 
2670 	  return fold_convert (type, op0);
2671 	}
2672     }
2673 
2674   return chrec_convert (type, op0, NULL);
2675 }
2676 
2677 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2678    and EVOLUTION_LOOP, that were left under a symbolic form.
2679 
2680    CHREC is a BIT_NOT_EXPR or a NEGATE_EXPR expression to be instantiated.
2681    Handle ~X as -1 - X.
2682    Handle -X as -1 * X.
2683 
2684    CACHE is the cache of already instantiated values.
2685 
2686    Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2687    conversions that may wrap in signed/pointer type are folded, as long
2688    as the value of the chrec is preserved.  If FOLD_CONVERSIONS is NULL
2689    then we don't do such fold.
2690 
2691    SIZE_EXPR is used for computing the size of the expression to be
2692    instantiated, and to stop if it exceeds some limit.  */
2693 
2694 static tree
2695 instantiate_scev_not (edge instantiate_below,
2696 		      struct loop *evolution_loop, struct loop *inner_loop,
2697 		      tree chrec,
2698 		      enum tree_code code, tree type, tree op,
2699 		      bool *fold_conversions, int size_expr)
2700 {
2701   tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2702 				 inner_loop, op,
2703 				 fold_conversions, size_expr);
2704 
2705   if (op0 == chrec_dont_know)
2706     return chrec_dont_know;
2707 
2708   if (op != op0)
2709     {
2710       op0 = chrec_convert (type, op0, NULL);
2711 
2712       switch (code)
2713 	{
2714 	case BIT_NOT_EXPR:
2715 	  return chrec_fold_minus
2716 	    (type, fold_convert (type, integer_minus_one_node), op0);
2717 
2718 	case NEGATE_EXPR:
2719 	  return chrec_fold_multiply
2720 	    (type, fold_convert (type, integer_minus_one_node), op0);
2721 
2722 	default:
2723 	  gcc_unreachable ();
2724 	}
2725     }
2726 
2727   return chrec ? chrec : fold_build1 (code, type, op0);
2728 }
2729 
2730 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2731    and EVOLUTION_LOOP, that were left under a symbolic form.
2732 
2733    CHREC is the scalar evolution to instantiate.
2734 
2735    CACHE is the cache of already instantiated values.
2736 
2737    Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2738    conversions that may wrap in signed/pointer type are folded, as long
2739    as the value of the chrec is preserved.  If FOLD_CONVERSIONS is NULL
2740    then we don't do such fold.
2741 
2742    SIZE_EXPR is used for computing the size of the expression to be
2743    instantiated, and to stop if it exceeds some limit.  */
2744 
2745 static tree
2746 instantiate_scev_r (edge instantiate_below,
2747 		    struct loop *evolution_loop, struct loop *inner_loop,
2748 		    tree chrec,
2749 		    bool *fold_conversions, int size_expr)
2750 {
2751   /* Give up if the expression is larger than the MAX that we allow.  */
2752   if (size_expr++ > PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE))
2753     return chrec_dont_know;
2754 
2755   if (chrec == NULL_TREE
2756       || automatically_generated_chrec_p (chrec)
2757       || is_gimple_min_invariant (chrec))
2758     return chrec;
2759 
2760   switch (TREE_CODE (chrec))
2761     {
2762     case SSA_NAME:
2763       return instantiate_scev_name (instantiate_below, evolution_loop,
2764 				    inner_loop, chrec,
2765 				    fold_conversions, size_expr);
2766 
2767     case POLYNOMIAL_CHREC:
2768       return instantiate_scev_poly (instantiate_below, evolution_loop,
2769 				    inner_loop, chrec,
2770 				    fold_conversions, size_expr);
2771 
2772     case POINTER_PLUS_EXPR:
2773     case PLUS_EXPR:
2774     case MINUS_EXPR:
2775     case MULT_EXPR:
2776       return instantiate_scev_binary (instantiate_below, evolution_loop,
2777 				      inner_loop, chrec,
2778 				      TREE_CODE (chrec), chrec_type (chrec),
2779 				      TREE_OPERAND (chrec, 0),
2780 				      TREE_OPERAND (chrec, 1),
2781 				      fold_conversions, size_expr);
2782 
2783     CASE_CONVERT:
2784       return instantiate_scev_convert (instantiate_below, evolution_loop,
2785 				       inner_loop, chrec,
2786 				       TREE_TYPE (chrec), TREE_OPERAND (chrec, 0),
2787 				       fold_conversions, size_expr);
2788 
2789     case NEGATE_EXPR:
2790     case BIT_NOT_EXPR:
2791       return instantiate_scev_not (instantiate_below, evolution_loop,
2792 				   inner_loop, chrec,
2793 				   TREE_CODE (chrec), TREE_TYPE (chrec),
2794 				   TREE_OPERAND (chrec, 0),
2795 				   fold_conversions, size_expr);
2796 
2797     case ADDR_EXPR:
2798       if (is_gimple_min_invariant (chrec))
2799 	return chrec;
2800       /* Fallthru.  */
2801     case SCEV_NOT_KNOWN:
2802       return chrec_dont_know;
2803 
2804     case SCEV_KNOWN:
2805       return chrec_known;
2806 
2807     default:
2808       if (CONSTANT_CLASS_P (chrec))
2809 	return chrec;
2810       return chrec_dont_know;
2811     }
2812 }
2813 
2814 /* Analyze all the parameters of the chrec that were left under a
2815    symbolic form.  INSTANTIATE_BELOW is the basic block that stops the
2816    recursive instantiation of parameters: a parameter is a variable
2817    that is defined in a basic block that dominates INSTANTIATE_BELOW or
2818    a function parameter.  */
2819 
2820 tree
2821 instantiate_scev (edge instantiate_below, struct loop *evolution_loop,
2822 		  tree chrec)
2823 {
2824   tree res;
2825 
2826   if (dump_file && (dump_flags & TDF_SCEV))
2827     {
2828       fprintf (dump_file, "(instantiate_scev \n");
2829       fprintf (dump_file, "  (instantiate_below = %d -> %d)\n",
2830 	       instantiate_below->src->index, instantiate_below->dest->index);
2831       if (evolution_loop)
2832 	fprintf (dump_file, "  (evolution_loop = %d)\n", evolution_loop->num);
2833       fprintf (dump_file, "  (chrec = ");
2834       print_generic_expr (dump_file, chrec);
2835       fprintf (dump_file, ")\n");
2836     }
2837 
2838   bool destr = false;
2839   if (!global_cache)
2840     {
2841       global_cache = new instantiate_cache_type;
2842       destr = true;
2843     }
2844 
2845   res = instantiate_scev_r (instantiate_below, evolution_loop,
2846 			    NULL, chrec, NULL, 0);
2847 
2848   if (destr)
2849     {
2850       delete global_cache;
2851       global_cache = NULL;
2852     }
2853 
2854   if (dump_file && (dump_flags & TDF_SCEV))
2855     {
2856       fprintf (dump_file, "  (res = ");
2857       print_generic_expr (dump_file, res);
2858       fprintf (dump_file, "))\n");
2859     }
2860 
2861   return res;
2862 }
2863 
2864 /* Similar to instantiate_parameters, but does not introduce the
2865    evolutions in outer loops for LOOP invariants in CHREC, and does not
2866    care about causing overflows, as long as they do not affect value
2867    of an expression.  */
2868 
2869 tree
2870 resolve_mixers (struct loop *loop, tree chrec, bool *folded_casts)
2871 {
2872   bool destr = false;
2873   bool fold_conversions = false;
2874   if (!global_cache)
2875     {
2876       global_cache = new instantiate_cache_type;
2877       destr = true;
2878     }
2879 
2880   tree ret = instantiate_scev_r (loop_preheader_edge (loop), loop, NULL,
2881 				 chrec, &fold_conversions, 0);
2882 
2883   if (folded_casts && !*folded_casts)
2884     *folded_casts = fold_conversions;
2885 
2886   if (destr)
2887     {
2888       delete global_cache;
2889       global_cache = NULL;
2890     }
2891 
2892   return ret;
2893 }
2894 
2895 /* Entry point for the analysis of the number of iterations pass.
2896    This function tries to safely approximate the number of iterations
2897    the loop will run.  When this property is not decidable at compile
2898    time, the result is chrec_dont_know.  Otherwise the result is a
2899    scalar or a symbolic parameter.  When the number of iterations may
2900    be equal to zero and the property cannot be determined at compile
2901    time, the result is a COND_EXPR that represents in a symbolic form
2902    the conditions under which the number of iterations is not zero.
2903 
2904    Example of analysis: suppose that the loop has an exit condition:
2905 
2906    "if (b > 49) goto end_loop;"
2907 
2908    and that in a previous analysis we have determined that the
2909    variable 'b' has an evolution function:
2910 
2911    "EF = {23, +, 5}_2".
2912 
2913    When we evaluate the function at the point 5, i.e. the value of the
2914    variable 'b' after 5 iterations in the loop, we have EF (5) = 48,
2915    and EF (6) = 53.  In this case the value of 'b' on exit is '53' and
2916    the loop body has been executed 6 times.  */
2917 
2918 tree
2919 number_of_latch_executions (struct loop *loop)
2920 {
2921   edge exit;
2922   struct tree_niter_desc niter_desc;
2923   tree may_be_zero;
2924   tree res;
2925 
2926   /* Determine whether the number of iterations in loop has already
2927      been computed.  */
2928   res = loop->nb_iterations;
2929   if (res)
2930     return res;
2931 
2932   may_be_zero = NULL_TREE;
2933 
2934   if (dump_file && (dump_flags & TDF_SCEV))
2935     fprintf (dump_file, "(number_of_iterations_in_loop = \n");
2936 
2937   res = chrec_dont_know;
2938   exit = single_exit (loop);
2939 
2940   if (exit && number_of_iterations_exit (loop, exit, &niter_desc, false))
2941     {
2942       may_be_zero = niter_desc.may_be_zero;
2943       res = niter_desc.niter;
2944     }
2945 
2946   if (res == chrec_dont_know
2947       || !may_be_zero
2948       || integer_zerop (may_be_zero))
2949     ;
2950   else if (integer_nonzerop (may_be_zero))
2951     res = build_int_cst (TREE_TYPE (res), 0);
2952 
2953   else if (COMPARISON_CLASS_P (may_be_zero))
2954     res = fold_build3 (COND_EXPR, TREE_TYPE (res), may_be_zero,
2955 		       build_int_cst (TREE_TYPE (res), 0), res);
2956   else
2957     res = chrec_dont_know;
2958 
2959   if (dump_file && (dump_flags & TDF_SCEV))
2960     {
2961       fprintf (dump_file, "  (set_nb_iterations_in_loop = ");
2962       print_generic_expr (dump_file, res);
2963       fprintf (dump_file, "))\n");
2964     }
2965 
2966   loop->nb_iterations = res;
2967   return res;
2968 }
2969 
2970 
2971 /* Counters for the stats.  */
2972 
2973 struct chrec_stats
2974 {
2975   unsigned nb_chrecs;
2976   unsigned nb_affine;
2977   unsigned nb_affine_multivar;
2978   unsigned nb_higher_poly;
2979   unsigned nb_chrec_dont_know;
2980   unsigned nb_undetermined;
2981 };
2982 
2983 /* Reset the counters.  */
2984 
2985 static inline void
2986 reset_chrecs_counters (struct chrec_stats *stats)
2987 {
2988   stats->nb_chrecs = 0;
2989   stats->nb_affine = 0;
2990   stats->nb_affine_multivar = 0;
2991   stats->nb_higher_poly = 0;
2992   stats->nb_chrec_dont_know = 0;
2993   stats->nb_undetermined = 0;
2994 }
2995 
2996 /* Dump the contents of a CHREC_STATS structure.  */
2997 
2998 static void
2999 dump_chrecs_stats (FILE *file, struct chrec_stats *stats)
3000 {
3001   fprintf (file, "\n(\n");
3002   fprintf (file, "-----------------------------------------\n");
3003   fprintf (file, "%d\taffine univariate chrecs\n", stats->nb_affine);
3004   fprintf (file, "%d\taffine multivariate chrecs\n", stats->nb_affine_multivar);
3005   fprintf (file, "%d\tdegree greater than 2 polynomials\n",
3006 	   stats->nb_higher_poly);
3007   fprintf (file, "%d\tchrec_dont_know chrecs\n", stats->nb_chrec_dont_know);
3008   fprintf (file, "-----------------------------------------\n");
3009   fprintf (file, "%d\ttotal chrecs\n", stats->nb_chrecs);
3010   fprintf (file, "%d\twith undetermined coefficients\n",
3011 	   stats->nb_undetermined);
3012   fprintf (file, "-----------------------------------------\n");
3013   fprintf (file, "%d\tchrecs in the scev database\n",
3014 	   (int) scalar_evolution_info->elements ());
3015   fprintf (file, "%d\tsets in the scev database\n", nb_set_scev);
3016   fprintf (file, "%d\tgets in the scev database\n", nb_get_scev);
3017   fprintf (file, "-----------------------------------------\n");
3018   fprintf (file, ")\n\n");
3019 }
3020 
3021 /* Gather statistics about CHREC.  */
3022 
3023 static void
3024 gather_chrec_stats (tree chrec, struct chrec_stats *stats)
3025 {
3026   if (dump_file && (dump_flags & TDF_STATS))
3027     {
3028       fprintf (dump_file, "(classify_chrec ");
3029       print_generic_expr (dump_file, chrec);
3030       fprintf (dump_file, "\n");
3031     }
3032 
3033   stats->nb_chrecs++;
3034 
3035   if (chrec == NULL_TREE)
3036     {
3037       stats->nb_undetermined++;
3038       return;
3039     }
3040 
3041   switch (TREE_CODE (chrec))
3042     {
3043     case POLYNOMIAL_CHREC:
3044       if (evolution_function_is_affine_p (chrec))
3045 	{
3046 	  if (dump_file && (dump_flags & TDF_STATS))
3047 	    fprintf (dump_file, "  affine_univariate\n");
3048 	  stats->nb_affine++;
3049 	}
3050       else if (evolution_function_is_affine_multivariate_p (chrec, 0))
3051 	{
3052 	  if (dump_file && (dump_flags & TDF_STATS))
3053 	    fprintf (dump_file, "  affine_multivariate\n");
3054 	  stats->nb_affine_multivar++;
3055 	}
3056       else
3057 	{
3058 	  if (dump_file && (dump_flags & TDF_STATS))
3059 	    fprintf (dump_file, "  higher_degree_polynomial\n");
3060 	  stats->nb_higher_poly++;
3061 	}
3062 
3063       break;
3064 
3065     default:
3066       break;
3067     }
3068 
3069   if (chrec_contains_undetermined (chrec))
3070     {
3071       if (dump_file && (dump_flags & TDF_STATS))
3072 	fprintf (dump_file, "  undetermined\n");
3073       stats->nb_undetermined++;
3074     }
3075 
3076   if (dump_file && (dump_flags & TDF_STATS))
3077     fprintf (dump_file, ")\n");
3078 }
3079 
3080 /* Classify the chrecs of the whole database.  */
3081 
3082 void
3083 gather_stats_on_scev_database (void)
3084 {
3085   struct chrec_stats stats;
3086 
3087   if (!dump_file)
3088     return;
3089 
3090   reset_chrecs_counters (&stats);
3091 
3092   hash_table<scev_info_hasher>::iterator iter;
3093   scev_info_str *elt;
3094   FOR_EACH_HASH_TABLE_ELEMENT (*scalar_evolution_info, elt, scev_info_str *,
3095 			       iter)
3096     gather_chrec_stats (elt->chrec, &stats);
3097 
3098   dump_chrecs_stats (dump_file, &stats);
3099 }
3100 
3101 
3102 
3103 /* Initializer.  */
3104 
3105 static void
3106 initialize_scalar_evolutions_analyzer (void)
3107 {
3108   /* The elements below are unique.  */
3109   if (chrec_dont_know == NULL_TREE)
3110     {
3111       chrec_not_analyzed_yet = NULL_TREE;
3112       chrec_dont_know = make_node (SCEV_NOT_KNOWN);
3113       chrec_known = make_node (SCEV_KNOWN);
3114       TREE_TYPE (chrec_dont_know) = void_type_node;
3115       TREE_TYPE (chrec_known) = void_type_node;
3116     }
3117 }
3118 
3119 /* Initialize the analysis of scalar evolutions for LOOPS.  */
3120 
3121 void
3122 scev_initialize (void)
3123 {
3124   struct loop *loop;
3125 
3126   gcc_assert (! scev_initialized_p ());
3127 
3128   scalar_evolution_info = hash_table<scev_info_hasher>::create_ggc (100);
3129 
3130   initialize_scalar_evolutions_analyzer ();
3131 
3132   FOR_EACH_LOOP (loop, 0)
3133     {
3134       loop->nb_iterations = NULL_TREE;
3135     }
3136 }
3137 
3138 /* Return true if SCEV is initialized.  */
3139 
3140 bool
3141 scev_initialized_p (void)
3142 {
3143   return scalar_evolution_info != NULL;
3144 }
3145 
3146 /* Cleans up the information cached by the scalar evolutions analysis
3147    in the hash table.  */
3148 
3149 void
3150 scev_reset_htab (void)
3151 {
3152   if (!scalar_evolution_info)
3153     return;
3154 
3155   scalar_evolution_info->empty ();
3156 }
3157 
3158 /* Cleans up the information cached by the scalar evolutions analysis
3159    in the hash table and in the loop->nb_iterations.  */
3160 
3161 void
3162 scev_reset (void)
3163 {
3164   struct loop *loop;
3165 
3166   scev_reset_htab ();
3167 
3168   FOR_EACH_LOOP (loop, 0)
3169     {
3170       loop->nb_iterations = NULL_TREE;
3171     }
3172 }
3173 
3174 /* Return true if the IV calculation in TYPE can overflow based on the knowledge
3175    of the upper bound on the number of iterations of LOOP, the BASE and STEP
3176    of IV.
3177 
3178    We do not use information whether TYPE can overflow so it is safe to
3179    use this test even for derived IVs not computed every iteration or
3180    hypotetical IVs to be inserted into code.  */
3181 
3182 bool
3183 iv_can_overflow_p (struct loop *loop, tree type, tree base, tree step)
3184 {
3185   widest_int nit;
3186   wide_int base_min, base_max, step_min, step_max, type_min, type_max;
3187   signop sgn = TYPE_SIGN (type);
3188 
3189   if (integer_zerop (step))
3190     return false;
3191 
3192   if (TREE_CODE (base) == INTEGER_CST)
3193     base_min = base_max = wi::to_wide (base);
3194   else if (TREE_CODE (base) == SSA_NAME
3195 	   && INTEGRAL_TYPE_P (TREE_TYPE (base))
3196 	   && get_range_info (base, &base_min, &base_max) == VR_RANGE)
3197     ;
3198   else
3199     return true;
3200 
3201   if (TREE_CODE (step) == INTEGER_CST)
3202     step_min = step_max = wi::to_wide (step);
3203   else if (TREE_CODE (step) == SSA_NAME
3204 	   && INTEGRAL_TYPE_P (TREE_TYPE (step))
3205 	   && get_range_info (step, &step_min, &step_max) == VR_RANGE)
3206     ;
3207   else
3208     return true;
3209 
3210   if (!get_max_loop_iterations (loop, &nit))
3211     return true;
3212 
3213   type_min = wi::min_value (type);
3214   type_max = wi::max_value (type);
3215 
3216   /* Just sanity check that we don't see values out of the range of the type.
3217      In this case the arithmetics bellow would overflow.  */
3218   gcc_checking_assert (wi::ge_p (base_min, type_min, sgn)
3219 		       && wi::le_p (base_max, type_max, sgn));
3220 
3221   /* Account the possible increment in the last ieration.  */
3222   wi::overflow_type overflow = wi::OVF_NONE;
3223   nit = wi::add (nit, 1, SIGNED, &overflow);
3224   if (overflow)
3225     return true;
3226 
3227   /* NIT is typeless and can exceed the precision of the type.  In this case
3228      overflow is always possible, because we know STEP is non-zero.  */
3229   if (wi::min_precision (nit, UNSIGNED) > TYPE_PRECISION (type))
3230     return true;
3231   wide_int nit2 = wide_int::from (nit, TYPE_PRECISION (type), UNSIGNED);
3232 
3233   /* If step can be positive, check that nit*step <= type_max-base.
3234      This can be done by unsigned arithmetic and we only need to watch overflow
3235      in the multiplication. The right hand side can always be represented in
3236      the type.  */
3237   if (sgn == UNSIGNED || !wi::neg_p (step_max))
3238     {
3239       wi::overflow_type overflow = wi::OVF_NONE;
3240       if (wi::gtu_p (wi::mul (step_max, nit2, UNSIGNED, &overflow),
3241 		     type_max - base_max)
3242 	  || overflow)
3243 	return true;
3244     }
3245   /* If step can be negative, check that nit*(-step) <= base_min-type_min.  */
3246   if (sgn == SIGNED && wi::neg_p (step_min))
3247     {
3248       wi::overflow_type overflow, overflow2;
3249       overflow = overflow2 = wi::OVF_NONE;
3250       if (wi::gtu_p (wi::mul (wi::neg (step_min, &overflow2),
3251 		     nit2, UNSIGNED, &overflow),
3252 		     base_min - type_min)
3253 	  || overflow || overflow2)
3254         return true;
3255     }
3256 
3257   return false;
3258 }
3259 
3260 /* Given EV with form of "(type) {inner_base, inner_step}_loop", this
3261    function tries to derive condition under which it can be simplified
3262    into "{(type)inner_base, (type)inner_step}_loop".  The condition is
3263    the maximum number that inner iv can iterate.  */
3264 
3265 static tree
3266 derive_simple_iv_with_niters (tree ev, tree *niters)
3267 {
3268   if (!CONVERT_EXPR_P (ev))
3269     return ev;
3270 
3271   tree inner_ev = TREE_OPERAND (ev, 0);
3272   if (TREE_CODE (inner_ev) != POLYNOMIAL_CHREC)
3273     return ev;
3274 
3275   tree init = CHREC_LEFT (inner_ev);
3276   tree step = CHREC_RIGHT (inner_ev);
3277   if (TREE_CODE (init) != INTEGER_CST
3278       || TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
3279     return ev;
3280 
3281   tree type = TREE_TYPE (ev);
3282   tree inner_type = TREE_TYPE (inner_ev);
3283   if (TYPE_PRECISION (inner_type) >= TYPE_PRECISION (type))
3284     return ev;
3285 
3286   /* Type conversion in "(type) {inner_base, inner_step}_loop" can be
3287      folded only if inner iv won't overflow.  We compute the maximum
3288      number the inner iv can iterate before overflowing and return the
3289      simplified affine iv.  */
3290   tree delta;
3291   init = fold_convert (type, init);
3292   step = fold_convert (type, step);
3293   ev = build_polynomial_chrec (CHREC_VARIABLE (inner_ev), init, step);
3294   if (tree_int_cst_sign_bit (step))
3295     {
3296       tree bound = lower_bound_in_type (inner_type, inner_type);
3297       delta = fold_build2 (MINUS_EXPR, type, init, fold_convert (type, bound));
3298       step = fold_build1 (NEGATE_EXPR, type, step);
3299     }
3300   else
3301     {
3302       tree bound = upper_bound_in_type (inner_type, inner_type);
3303       delta = fold_build2 (MINUS_EXPR, type, fold_convert (type, bound), init);
3304     }
3305   *niters = fold_build2 (FLOOR_DIV_EXPR, type, delta, step);
3306   return ev;
3307 }
3308 
3309 /* Checks whether use of OP in USE_LOOP behaves as a simple affine iv with
3310    respect to WRTO_LOOP and returns its base and step in IV if possible
3311    (see analyze_scalar_evolution_in_loop for more details on USE_LOOP
3312    and WRTO_LOOP).  If ALLOW_NONCONSTANT_STEP is true, we want step to be
3313    invariant in LOOP.  Otherwise we require it to be an integer constant.
3314 
3315    IV->no_overflow is set to true if we are sure the iv cannot overflow (e.g.
3316    because it is computed in signed arithmetics).  Consequently, adding an
3317    induction variable
3318 
3319    for (i = IV->base; ; i += IV->step)
3320 
3321    is only safe if IV->no_overflow is false, or TYPE_OVERFLOW_UNDEFINED is
3322    false for the type of the induction variable, or you can prove that i does
3323    not wrap by some other argument.  Otherwise, this might introduce undefined
3324    behavior, and
3325 
3326    i = iv->base;
3327    for (; ; i = (type) ((unsigned type) i + (unsigned type) iv->step))
3328 
3329    must be used instead.
3330 
3331    When IV_NITERS is not NULL, this function also checks case in which OP
3332    is a conversion of an inner simple iv of below form:
3333 
3334      (outer_type){inner_base, inner_step}_loop.
3335 
3336    If type of inner iv has smaller precision than outer_type, it can't be
3337    folded into {(outer_type)inner_base, (outer_type)inner_step}_loop because
3338    the inner iv could overflow/wrap.  In this case, we derive a condition
3339    under which the inner iv won't overflow/wrap and do the simplification.
3340    The derived condition normally is the maximum number the inner iv can
3341    iterate, and will be stored in IV_NITERS.  This is useful in loop niter
3342    analysis, to derive break conditions when a loop must terminate, when is
3343    infinite.  */
3344 
3345 bool
3346 simple_iv_with_niters (struct loop *wrto_loop, struct loop *use_loop,
3347 		       tree op, affine_iv *iv, tree *iv_niters,
3348 		       bool allow_nonconstant_step)
3349 {
3350   enum tree_code code;
3351   tree type, ev, base, e;
3352   wide_int extreme;
3353   bool folded_casts;
3354 
3355   iv->base = NULL_TREE;
3356   iv->step = NULL_TREE;
3357   iv->no_overflow = false;
3358 
3359   type = TREE_TYPE (op);
3360   if (!POINTER_TYPE_P (type)
3361       && !INTEGRAL_TYPE_P (type))
3362     return false;
3363 
3364   ev = analyze_scalar_evolution_in_loop (wrto_loop, use_loop, op,
3365 					 &folded_casts);
3366   if (chrec_contains_undetermined (ev)
3367       || chrec_contains_symbols_defined_in_loop (ev, wrto_loop->num))
3368     return false;
3369 
3370   if (tree_does_not_contain_chrecs (ev))
3371     {
3372       iv->base = ev;
3373       iv->step = build_int_cst (TREE_TYPE (ev), 0);
3374       iv->no_overflow = true;
3375       return true;
3376     }
3377 
3378   /* If we can derive valid scalar evolution with assumptions.  */
3379   if (iv_niters && TREE_CODE (ev) != POLYNOMIAL_CHREC)
3380     ev = derive_simple_iv_with_niters (ev, iv_niters);
3381 
3382   if (TREE_CODE (ev) != POLYNOMIAL_CHREC)
3383     return false;
3384 
3385   if (CHREC_VARIABLE (ev) != (unsigned) wrto_loop->num)
3386     return false;
3387 
3388   iv->step = CHREC_RIGHT (ev);
3389   if ((!allow_nonconstant_step && TREE_CODE (iv->step) != INTEGER_CST)
3390       || tree_contains_chrecs (iv->step, NULL))
3391     return false;
3392 
3393   iv->base = CHREC_LEFT (ev);
3394   if (tree_contains_chrecs (iv->base, NULL))
3395     return false;
3396 
3397   iv->no_overflow = !folded_casts && nowrap_type_p (type);
3398 
3399   if (!iv->no_overflow
3400       && !iv_can_overflow_p (wrto_loop, type, iv->base, iv->step))
3401     iv->no_overflow = true;
3402 
3403   /* Try to simplify iv base:
3404 
3405        (signed T) ((unsigned T)base + step) ;; TREE_TYPE (base) == signed T
3406 	 == (signed T)(unsigned T)base + step
3407 	 == base + step
3408 
3409      If we can prove operation (base + step) doesn't overflow or underflow.
3410      Specifically, we try to prove below conditions are satisfied:
3411 
3412 	     base <= UPPER_BOUND (type) - step  ;;step > 0
3413 	     base >= LOWER_BOUND (type) - step  ;;step < 0
3414 
3415      This is done by proving the reverse conditions are false using loop's
3416      initial conditions.
3417 
3418      The is necessary to make loop niter, or iv overflow analysis easier
3419      for below example:
3420 
3421        int foo (int *a, signed char s, signed char l)
3422 	 {
3423 	   signed char i;
3424 	   for (i = s; i < l; i++)
3425 	     a[i] = 0;
3426 	   return 0;
3427 	  }
3428 
3429      Note variable I is firstly converted to type unsigned char, incremented,
3430      then converted back to type signed char.  */
3431 
3432   if (wrto_loop->num != use_loop->num)
3433     return true;
3434 
3435   if (!CONVERT_EXPR_P (iv->base) || TREE_CODE (iv->step) != INTEGER_CST)
3436     return true;
3437 
3438   type = TREE_TYPE (iv->base);
3439   e = TREE_OPERAND (iv->base, 0);
3440   if (TREE_CODE (e) != PLUS_EXPR
3441       || TREE_CODE (TREE_OPERAND (e, 1)) != INTEGER_CST
3442       || !tree_int_cst_equal (iv->step,
3443 			      fold_convert (type, TREE_OPERAND (e, 1))))
3444     return true;
3445   e = TREE_OPERAND (e, 0);
3446   if (!CONVERT_EXPR_P (e))
3447     return true;
3448   base = TREE_OPERAND (e, 0);
3449   if (!useless_type_conversion_p (type, TREE_TYPE (base)))
3450     return true;
3451 
3452   if (tree_int_cst_sign_bit (iv->step))
3453     {
3454       code = LT_EXPR;
3455       extreme = wi::min_value (type);
3456     }
3457   else
3458     {
3459       code = GT_EXPR;
3460       extreme = wi::max_value (type);
3461     }
3462   wi::overflow_type overflow = wi::OVF_NONE;
3463   extreme = wi::sub (extreme, wi::to_wide (iv->step),
3464 		     TYPE_SIGN (type), &overflow);
3465   if (overflow)
3466     return true;
3467   e = fold_build2 (code, boolean_type_node, base,
3468 		   wide_int_to_tree (type, extreme));
3469   e = simplify_using_initial_conditions (use_loop, e);
3470   if (!integer_zerop (e))
3471     return true;
3472 
3473   if (POINTER_TYPE_P (TREE_TYPE (base)))
3474     code = POINTER_PLUS_EXPR;
3475   else
3476     code = PLUS_EXPR;
3477 
3478   iv->base = fold_build2 (code, TREE_TYPE (base), base, iv->step);
3479   return true;
3480 }
3481 
3482 /* Like simple_iv_with_niters, but return TRUE when OP behaves as a simple
3483    affine iv unconditionally.  */
3484 
3485 bool
3486 simple_iv (struct loop *wrto_loop, struct loop *use_loop, tree op,
3487 	   affine_iv *iv, bool allow_nonconstant_step)
3488 {
3489   return simple_iv_with_niters (wrto_loop, use_loop, op, iv,
3490 				NULL, allow_nonconstant_step);
3491 }
3492 
3493 /* Finalize the scalar evolution analysis.  */
3494 
3495 void
3496 scev_finalize (void)
3497 {
3498   if (!scalar_evolution_info)
3499     return;
3500   scalar_evolution_info->empty ();
3501   scalar_evolution_info = NULL;
3502   free_numbers_of_iterations_estimates (cfun);
3503 }
3504 
3505 /* Returns true if the expression EXPR is considered to be too expensive
3506    for scev_const_prop.  */
3507 
3508 bool
3509 expression_expensive_p (tree expr)
3510 {
3511   enum tree_code code;
3512 
3513   if (is_gimple_val (expr))
3514     return false;
3515 
3516   code = TREE_CODE (expr);
3517   if (code == TRUNC_DIV_EXPR
3518       || code == CEIL_DIV_EXPR
3519       || code == FLOOR_DIV_EXPR
3520       || code == ROUND_DIV_EXPR
3521       || code == TRUNC_MOD_EXPR
3522       || code == CEIL_MOD_EXPR
3523       || code == FLOOR_MOD_EXPR
3524       || code == ROUND_MOD_EXPR
3525       || code == EXACT_DIV_EXPR)
3526     {
3527       /* Division by power of two is usually cheap, so we allow it.
3528 	 Forbid anything else.  */
3529       if (!integer_pow2p (TREE_OPERAND (expr, 1)))
3530 	return true;
3531     }
3532 
3533   if (code == CALL_EXPR)
3534     {
3535       tree arg;
3536       call_expr_arg_iterator iter;
3537       /* Even though is_inexpensive_builtin might say true, we will get a
3538 	 library call for popcount when backend does not have an instruction
3539 	 to do so.  We consider this to be expenseive and generate
3540 	 __builtin_popcount only when backend defines it.  */
3541       combined_fn cfn = get_call_combined_fn (expr);
3542       switch (cfn)
3543 	{
3544 	CASE_CFN_POPCOUNT:
3545 	  /* Check if opcode for popcount is available in the mode required.  */
3546 	  if (optab_handler (popcount_optab,
3547 			     TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (expr, 0))))
3548 	      == CODE_FOR_nothing)
3549 	    {
3550 	      machine_mode mode;
3551 	      mode = TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (expr, 0)));
3552 	      scalar_int_mode int_mode;
3553 
3554 	      /* If the mode is of 2 * UNITS_PER_WORD size, we can handle
3555 		 double-word popcount by emitting two single-word popcount
3556 		 instructions.  */
3557 	      if (is_a <scalar_int_mode> (mode, &int_mode)
3558 		  && GET_MODE_SIZE (int_mode) == 2 * UNITS_PER_WORD
3559 		  && (optab_handler (popcount_optab, word_mode)
3560 		      != CODE_FOR_nothing))
3561 		  break;
3562 	      return true;
3563 	    }
3564 	default:
3565 	  break;
3566 	}
3567 
3568       if (!is_inexpensive_builtin (get_callee_fndecl (expr)))
3569 	return true;
3570       FOR_EACH_CALL_EXPR_ARG (arg, iter, expr)
3571 	if (expression_expensive_p (arg))
3572 	  return true;
3573       return false;
3574     }
3575 
3576   if (code == COND_EXPR)
3577     return (expression_expensive_p (TREE_OPERAND (expr, 0))
3578 	    || (EXPR_P (TREE_OPERAND (expr, 1))
3579 		&& EXPR_P (TREE_OPERAND (expr, 2)))
3580 	    /* If either branch has side effects or could trap.  */
3581 	    || TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3582 	    || generic_expr_could_trap_p (TREE_OPERAND (expr, 1))
3583 	    || TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0))
3584 	    || generic_expr_could_trap_p (TREE_OPERAND (expr, 0))
3585 	    || expression_expensive_p (TREE_OPERAND (expr, 1))
3586 	    || expression_expensive_p (TREE_OPERAND (expr, 2)));
3587 
3588   switch (TREE_CODE_CLASS (code))
3589     {
3590     case tcc_binary:
3591     case tcc_comparison:
3592       if (expression_expensive_p (TREE_OPERAND (expr, 1)))
3593 	return true;
3594 
3595       /* Fallthru.  */
3596     case tcc_unary:
3597       return expression_expensive_p (TREE_OPERAND (expr, 0));
3598 
3599     default:
3600       return true;
3601     }
3602 }
3603 
3604 /* Do final value replacement for LOOP, return true if we did anything.  */
3605 
3606 bool
3607 final_value_replacement_loop (struct loop *loop)
3608 {
3609   /* If we do not know exact number of iterations of the loop, we cannot
3610      replace the final value.  */
3611   edge exit = single_exit (loop);
3612   if (!exit)
3613     return false;
3614 
3615   tree niter = number_of_latch_executions (loop);
3616   if (niter == chrec_dont_know)
3617     return false;
3618 
3619   /* Ensure that it is possible to insert new statements somewhere.  */
3620   if (!single_pred_p (exit->dest))
3621     split_loop_exit_edge (exit);
3622 
3623   /* Set stmt insertion pointer.  All stmts are inserted before this point.  */
3624   gimple_stmt_iterator gsi = gsi_after_labels (exit->dest);
3625 
3626   struct loop *ex_loop
3627     = superloop_at_depth (loop,
3628 			  loop_depth (exit->dest->loop_father) + 1);
3629 
3630   bool any = false;
3631   gphi_iterator psi;
3632   for (psi = gsi_start_phis (exit->dest); !gsi_end_p (psi); )
3633     {
3634       gphi *phi = psi.phi ();
3635       tree rslt = PHI_RESULT (phi);
3636       tree def = PHI_ARG_DEF_FROM_EDGE (phi, exit);
3637       if (virtual_operand_p (def))
3638 	{
3639 	  gsi_next (&psi);
3640 	  continue;
3641 	}
3642 
3643       if (!POINTER_TYPE_P (TREE_TYPE (def))
3644 	  && !INTEGRAL_TYPE_P (TREE_TYPE (def)))
3645 	{
3646 	  gsi_next (&psi);
3647 	  continue;
3648 	}
3649 
3650       bool folded_casts;
3651       def = analyze_scalar_evolution_in_loop (ex_loop, loop, def,
3652 					      &folded_casts);
3653       def = compute_overall_effect_of_inner_loop (ex_loop, def);
3654       if (!tree_does_not_contain_chrecs (def)
3655 	  || chrec_contains_symbols_defined_in_loop (def, ex_loop->num)
3656 	  /* Moving the computation from the loop may prolong life range
3657 	     of some ssa names, which may cause problems if they appear
3658 	     on abnormal edges.  */
3659 	  || contains_abnormal_ssa_name_p (def)
3660 	  /* Do not emit expensive expressions.  The rationale is that
3661 	     when someone writes a code like
3662 
3663 	     while (n > 45) n -= 45;
3664 
3665 	     he probably knows that n is not large, and does not want it
3666 	     to be turned into n %= 45.  */
3667 	  || expression_expensive_p (def))
3668 	{
3669 	  if (dump_file && (dump_flags & TDF_DETAILS))
3670 	    {
3671 	      fprintf (dump_file, "not replacing:\n  ");
3672 	      print_gimple_stmt (dump_file, phi, 0);
3673 	      fprintf (dump_file, "\n");
3674 	    }
3675 	  gsi_next (&psi);
3676 	  continue;
3677 	}
3678 
3679       /* Eliminate the PHI node and replace it by a computation outside
3680 	 the loop.  */
3681       if (dump_file)
3682 	{
3683 	  fprintf (dump_file, "\nfinal value replacement:\n  ");
3684 	  print_gimple_stmt (dump_file, phi, 0);
3685 	  fprintf (dump_file, " with expr: ");
3686 	  print_generic_expr (dump_file, def);
3687 	}
3688       any = true;
3689       def = unshare_expr (def);
3690       remove_phi_node (&psi, false);
3691 
3692       /* If def's type has undefined overflow and there were folded
3693 	 casts, rewrite all stmts added for def into arithmetics
3694 	 with defined overflow behavior.  */
3695       if (folded_casts && ANY_INTEGRAL_TYPE_P (TREE_TYPE (def))
3696 	  && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (def)))
3697 	{
3698 	  gimple_seq stmts;
3699 	  gimple_stmt_iterator gsi2;
3700 	  def = force_gimple_operand (def, &stmts, true, NULL_TREE);
3701 	  gsi2 = gsi_start (stmts);
3702 	  while (!gsi_end_p (gsi2))
3703 	    {
3704 	      gimple *stmt = gsi_stmt (gsi2);
3705 	      gimple_stmt_iterator gsi3 = gsi2;
3706 	      gsi_next (&gsi2);
3707 	      gsi_remove (&gsi3, false);
3708 	      if (is_gimple_assign (stmt)
3709 		  && arith_code_with_undefined_signed_overflow
3710 		  (gimple_assign_rhs_code (stmt)))
3711 		gsi_insert_seq_before (&gsi,
3712 				       rewrite_to_defined_overflow (stmt),
3713 				       GSI_SAME_STMT);
3714 	      else
3715 		gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
3716 	    }
3717 	}
3718       else
3719 	def = force_gimple_operand_gsi (&gsi, def, false, NULL_TREE,
3720 					true, GSI_SAME_STMT);
3721 
3722       gassign *ass = gimple_build_assign (rslt, def);
3723       gsi_insert_before (&gsi, ass, GSI_SAME_STMT);
3724       if (dump_file)
3725 	{
3726 	  fprintf (dump_file, "\n final stmt:\n  ");
3727 	  print_gimple_stmt (dump_file, ass, 0);
3728 	  fprintf (dump_file, "\n");
3729 	}
3730     }
3731 
3732   return any;
3733 }
3734 
3735 #include "gt-tree-scalar-evolution.h"
3736