target-supports.exp (check_effective_target_weak_undefined): Return 0 on hppa*-*...
[official-gcc.git] / gcc / tree-scalar-evolution.c
blob3de559047dae8e7ac881c9520b242ac99e1344e2
1 /* Scalar evolution detector.
2 Copyright (C) 2003-2019 Free Software Foundation, Inc.
3 Contributed by Sebastian Pop <s.pop@laposte.net>
5 This file is part of GCC.
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.
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.
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/>. */
22 Description:
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.
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).
45 A short sketch of the algorithm is:
47 Given a scalar variable to be analyzed, follow the SSA edge to
48 its definition:
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.
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).
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.
73 Examples:
75 Example 1: Illustration of the basic algorithm.
77 | a = 3
78 | loop_1
79 | b = phi (a, c)
80 | c = b + 1
81 | if (c > 10) exit_loop
82 | endloop
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:
115 a -> 3
116 b -> {3, +, 1}_1
117 c -> {4, +, 1}_1
119 or in terms of a C program:
121 | a = 3
122 | for (x = 0; x <= 7; x++)
124 | b = x + 3
125 | c = x + 4
128 Example 2a: Illustration of the algorithm on nested loops.
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
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:
143 b -> {c, +, 3}_2
144 d -> {c + 3, +, 3}_2
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:
154 a -> {1, +, 32}_1
155 c -> {3, +, 32}_1
157 Example 2b: Multivariate chains of recurrences.
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
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.
180 Example 3: Higher degree polynomials.
182 | loop_1
183 | a = phi (2, b)
184 | c = phi (5, d)
185 | b = a + 1
186 | d = c + a
187 | endloop
189 a -> {2, +, 1}_1
190 b -> {3, +, 1}_1
191 c -> {5, +, a}_1
192 d -> {5 + a, +, a}_1
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
197 Example 4: Lucas, Fibonacci, or mixers in general.
199 | loop_1
200 | a = phi (1, b)
201 | c = phi (3, d)
202 | b = c
203 | d = c + a
204 | endloop
206 a -> (1, c)_1
207 c -> {3, +, a}_1
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)".
215 The symbolic chrec representation contains all the semantics of the
216 original code. What is more difficult is to use this information.
218 Example 5: Flip-flops, or exchangers.
220 | loop_1
221 | a = phi (1, b)
222 | c = phi (3, d)
223 | b = c
224 | d = a
225 | endloop
227 a -> (1, c)_1
228 c -> (3, a)_1
230 Based on these symbolic chrecs, it is possible to refine this
231 information into the more precise PERIODIC_CHRECs:
233 a -> |1, 3|_1
234 c -> |3, 1|_1
236 This transformation is not yet implemented.
238 Further readings:
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.
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
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
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"
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);
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. */
297 struct GTY((for_user)) scev_info_str {
298 unsigned int name_version;
299 int instantiated_below;
300 tree chrec;
303 /* Counters for the scev database. */
304 static unsigned nb_set_scev = 0;
305 static unsigned nb_get_scev = 0;
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. */
311 /* The SSA_NAMEs that are not yet analyzed are qualified with NULL_TREE. */
312 tree chrec_not_analyzed_yet;
314 /* Reserved to the cases where the analyzer has detected an
315 undecidable property at compile time. */
316 tree chrec_dont_know;
318 /* When the analyzer has detected that a property will never
319 happen, then it qualifies it with chrec_known. */
320 tree chrec_known;
322 struct scev_info_hasher : ggc_ptr_hash<scev_info_str>
324 static hashval_t hash (scev_info_str *i);
325 static bool equal (const scev_info_str *a, const scev_info_str *b);
328 static GTY (()) hash_table<scev_info_hasher> *scalar_evolution_info;
331 /* Constructs a new SCEV_INFO_STR structure for VAR and INSTANTIATED_BELOW. */
333 static inline struct scev_info_str *
334 new_scev_info_str (basic_block instantiated_below, tree var)
336 struct scev_info_str *res;
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;
343 return res;
346 /* Computes a hash function for database element ELT. */
348 hashval_t
349 scev_info_hasher::hash (scev_info_str *elt)
351 return elt->name_version ^ elt->instantiated_below;
354 /* Compares database elements E1 and E2. */
356 bool
357 scev_info_hasher::equal (const scev_info_str *elt1, const scev_info_str *elt2)
359 return (elt1->name_version == elt2->name_version
360 && elt1->instantiated_below == elt2->instantiated_below);
363 /* Get the scalar evolution of VAR for INSTANTIATED_BELOW basic block.
364 A first query on VAR returns chrec_not_analyzed_yet. */
366 static tree *
367 find_var_scev_info (basic_block instantiated_below, tree var)
369 struct scev_info_str *res;
370 struct scev_info_str tmp;
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);
376 if (!*slot)
377 *slot = new_scev_info_str (instantiated_below, var);
378 res = *slot;
380 return &res->chrec;
384 /* Hashtable helpers for a temporary hash-table used when
385 analyzing a scalar evolution, instantiating a CHREC or
386 resolving mixers. */
388 struct instantiate_cache_type
390 htab_t map;
391 vec<scev_info_str> entries;
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; }
399 instantiate_cache_type::~instantiate_cache_type ()
401 if (map != NULL)
403 htab_delete (map);
404 entries.release ();
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;
414 /* Return true when CHREC contains symbolic names defined in
415 LOOP_NB. */
417 bool
418 chrec_contains_symbols_defined_in_loop (const_tree chrec, unsigned loop_nb)
420 int i, n;
422 if (chrec == NULL_TREE)
423 return false;
425 if (is_gimple_min_invariant (chrec))
426 return false;
428 if (TREE_CODE (chrec) == SSA_NAME)
430 gimple *def;
431 loop_p def_loop, loop;
433 if (SSA_NAME_IS_DEFAULT_DEF (chrec))
434 return false;
436 def = SSA_NAME_DEF_STMT (chrec);
437 def_loop = loop_containing_stmt (def);
438 loop = get_loop (cfun, loop_nb);
440 if (def_loop == NULL)
441 return false;
443 if (loop == def_loop || flow_loop_nested_p (loop, def_loop))
444 return true;
446 return false;
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;
457 /* Return true when PHI is a loop-phi-node. */
459 static bool
460 loop_phi_node_p (gimple *phi)
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". */
466 return loop_containing_stmt (phi)->header == gimple_bb (phi);
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.
474 Example:
476 | for (j = 0; j < 100; j++)
478 | for (k = 0; k < 100; k++)
480 | i = k + j; - Here the value of i is a function of j, k.
482 | ... = i - Here the value of i is a function of j.
484 | ... = i - Here the value of i is a scalar.
486 Example:
488 | i_0 = ...
489 | loop_1 10 times
490 | i_1 = phi (i_0, i_2)
491 | i_2 = i_1 + 2
492 | endloop
494 This loop has the same effect as:
495 LOOP_1 has the same effect as:
497 | i_1 = i_0 + 20
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.
504 tree
505 compute_overall_effect_of_inner_loop (struct loop *loop, tree evolution_fn)
507 bool val = false;
509 if (evolution_fn == chrec_dont_know)
510 return chrec_dont_know;
512 else if (TREE_CODE (evolution_fn) == POLYNOMIAL_CHREC)
514 struct loop *inner_loop = get_chrec_loop (evolution_fn);
516 if (inner_loop == loop
517 || flow_loop_nested_p (loop, inner_loop))
519 tree nb_iter = number_of_latch_executions (inner_loop);
521 if (nb_iter == chrec_dont_know)
522 return chrec_dont_know;
523 else
525 tree res;
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);
531 if (chrec_contains_symbols_defined_in_loop (res, loop->num))
532 res = instantiate_parameters (loop, res);
534 /* Continue the computation until ending on a parent of LOOP. */
535 return compute_overall_effect_of_inner_loop (loop, res);
538 else
539 return evolution_fn;
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;
546 else
547 return chrec_dont_know;
550 /* Associate CHREC to SCALAR. */
552 static void
553 set_scalar_evolution (basic_block instantiated_below, tree scalar, tree chrec)
555 tree *scalar_info;
557 if (TREE_CODE (scalar) != SSA_NAME)
558 return;
560 scalar_info = find_var_scev_info (instantiated_below, scalar);
562 if (dump_file)
564 if (dump_flags & TDF_SCEV)
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");
575 if (dump_flags & TDF_STATS)
576 nb_set_scev++;
579 *scalar_info = chrec;
582 /* Retrieve the chrec associated to SCALAR instantiated below
583 INSTANTIATED_BELOW block. */
585 static tree
586 get_scalar_evolution (basic_block instantiated_below, tree scalar)
588 tree res;
590 if (dump_file)
592 if (dump_flags & TDF_SCEV)
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");
599 if (dump_flags & TDF_STATS)
600 nb_get_scev++;
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))
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;
617 case REAL_CST:
618 case FIXED_CST:
619 case INTEGER_CST:
620 res = scalar;
621 break;
623 default:
624 res = chrec_not_analyzed_yet;
625 break;
628 if (dump_file && (dump_flags & TDF_SCEV))
630 fprintf (dump_file, " (scalar_evolution = ");
631 print_generic_expr (dump_file, res);
632 fprintf (dump_file, "))\n");
635 return res;
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".
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. */
648 static tree
649 add_to_evolution_1 (unsigned loop_nb, tree chrec_before, tree to_add,
650 gimple *at_stmt)
652 tree type, left, right;
653 struct loop *loop = get_loop (cfun, loop_nb), *chloop;
655 switch (TREE_CODE (chrec_before))
657 case POLYNOMIAL_CHREC:
658 chloop = get_chrec_loop (chrec_before);
659 if (chloop == loop
660 || flow_loop_nested_p (chloop, loop))
662 unsigned var;
664 type = chrec_type (chrec_before);
666 /* When there is no evolution part in this loop, build it. */
667 if (chloop != loop)
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);
675 else
677 var = CHREC_VARIABLE (chrec_before);
678 left = CHREC_LEFT (chrec_before);
679 right = CHREC_RIGHT (chrec_before);
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);
687 else
689 gcc_assert (flow_loop_nested_p (loop, chloop));
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);
700 default:
701 /* These nodes do not depend on a loop. */
702 if (chrec_before == chrec_dont_know)
703 return chrec_dont_know;
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);
711 /* Add TO_ADD to the evolution part of CHREC_BEFORE in the dimension
712 of LOOP_NB.
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):
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:
723 1. a = loop-phi (init, a + expr)
724 2. a = loop-phi (init, expr)
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).
730 Examples:
733 | init = ...
734 | loop_1
735 | a = phi (init, a + 5)
736 | endloop
739 | inita = ...
740 | initb = ...
741 | loop_1
742 | a = phi (inita, 2 * b + 3)
743 | b = phi (initb, b + 1)
744 | endloop
746 For the first case, the semantics of the SSA representation is:
748 | a (x) = init + \sum_{j = 0}^{x - 1} expr (j)
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.
757 For the second case, the semantics of the SSA program is:
759 | a (x) = init, if x = 0;
760 | expr (x - 1), otherwise.
762 The second case corresponds to the PEELED_CHREC, whose syntax is
763 close to the syntax of a loop-phi-node:
765 | phi (init, expr) vs. (init, expr)_x
767 The proof of the translation algorithm for the first case is a
768 proof by structural induction based on the degree of EXPR.
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:
777 f (x) = init + \sum_{j = 0}^{x - 1} expr (j)
779 and since "expr (j)" is a constant with respect to "j",
781 f (x) = init + x * expr
783 Finally, based on the semantics of the pure sum chrecs, by
784 identification we get the corresponding chrecs syntax:
786 f (x) = init * \binom{x}{0} + expr * \binom{x}{1}
787 f (x) -> {init, +, expr}_x
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:
794 | expr (x) -> {b_0, +, b_1, +, ..., +, b_{n-1}} (x)
796 We start from the semantics of the SSA program:
798 | f (x) = init + \sum_{j = 0}^{x - 1} expr (j)
800 | f (x) = init + \sum_{j = 0}^{x - 1}
801 | (b_0 * \binom{j}{0} + ... + b_{n-1} * \binom{j}{n-1})
803 | f (x) = init + \sum_{j = 0}^{x - 1}
804 | \sum_{k = 0}^{n - 1} (b_k * \binom{j}{k})
806 | f (x) = init + \sum_{k = 0}^{n - 1}
807 | (b_k * \sum_{j = 0}^{x - 1} \binom{j}{k})
809 | f (x) = init + \sum_{k = 0}^{n - 1}
810 | (b_k * \binom{x}{k + 1})
812 | f (x) = init + b_0 * \binom{x}{1} + ...
813 | + b_{n-1} * \binom{x}{n}
815 | f (x) = init * \binom{x}{0} + b_0 * \binom{x}{1} + ...
816 | + b_{n-1} * \binom{x}{n}
819 And finally from the definition of the chrecs syntax, we identify:
820 | f (x) -> {init, +, b_0, +, ..., +, b_{n-1}}_x
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.
826 Example:
828 | inita = ...
829 | initb = ...
830 | loop_1
831 | a = phi (inita, a + 2 + b)
832 | b = phi (initb, b + 1)
833 | endloop
835 When analyzing "a", the algorithm keeps "b" symbolically:
837 | a -> {inita, +, 2 + b}_1
839 Then, after instantiation, the analyzer ends on the evolution:
841 | a -> {inita, +, 2 + initb, +, 1}_1
845 static tree
846 add_to_evolution (unsigned loop_nb, tree chrec_before, enum tree_code code,
847 tree to_add, gimple *at_stmt)
849 tree type = chrec_type (to_add);
850 tree res = NULL_TREE;
852 if (to_add == NULL_TREE)
853 return chrec_before;
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;
861 if (dump_file && (dump_flags & TDF_SCEV))
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");
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));
877 res = add_to_evolution_1 (loop_nb, chrec_before, to_add, at_stmt);
879 if (dump_file && (dump_flags & TDF_SCEV))
881 fprintf (dump_file, " (res = ");
882 print_generic_expr (dump_file, res);
883 fprintf (dump_file, "))\n");
886 return res;
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. */
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. */
899 gcond *
900 get_loop_exit_condition (const struct loop *loop)
902 gcond *res = NULL;
903 edge exit_edge = single_exit (loop);
905 if (dump_file && (dump_flags & TDF_SCEV))
906 fprintf (dump_file, "(get_loop_exit_condition \n ");
908 if (exit_edge)
910 gimple *stmt;
912 stmt = last_stmt (exit_edge->src);
913 if (gcond *cond_stmt = safe_dyn_cast <gcond *> (stmt))
914 res = cond_stmt;
917 if (dump_file && (dump_flags & TDF_SCEV))
919 print_gimple_stmt (dump_file, res, 0);
920 fprintf (dump_file, ")\n");
923 return res;
927 /* Depth first search algorithm. */
929 enum t_bool {
930 t_false,
931 t_true,
932 t_dont_know
936 static t_bool follow_ssa_edge (struct loop *loop, gimple *, gphi *,
937 tree *, int);
939 /* Follow the ssa edge into the binary expression RHS0 CODE RHS1.
940 Return true if the strongly connected component has been found. */
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)
948 t_bool res = t_false;
949 tree evol;
951 switch (code)
953 case POINTER_PLUS_EXPR:
954 case PLUS_EXPR:
955 if (TREE_CODE (rhs0) == SSA_NAME)
957 if (TREE_CODE (rhs1) == SSA_NAME)
959 /* Match an assignment under the form:
960 "a = b + c". */
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++;
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)
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)
987 else if (res == t_dont_know)
988 *evolution_of_loop = chrec_dont_know;
991 else if (res == t_dont_know)
992 *evolution_of_loop = chrec_dont_know;
995 else
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)
1008 else if (res == t_dont_know)
1009 *evolution_of_loop = chrec_dont_know;
1013 else if (TREE_CODE (rhs1) == SSA_NAME)
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)
1026 else if (res == t_dont_know)
1027 *evolution_of_loop = chrec_dont_know;
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;
1037 case MINUS_EXPR:
1038 /* This case is under the form "opnd0 = rhs0 - rhs1". */
1039 if (TREE_CODE (rhs0) == SSA_NAME)
1041 /* Match an assignment under the form:
1042 "a = b - ...". */
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++;
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)
1057 else if (res == t_dont_know)
1058 *evolution_of_loop = chrec_dont_know;
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;
1067 default:
1068 res = t_false;
1071 return res;
1074 /* Follow the ssa edge into the expression EXPR.
1075 Return true if the strongly connected component has been found. */
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)
1082 enum tree_code code = TREE_CODE (expr);
1083 tree type = TREE_TYPE (expr), rhs0, rhs1;
1084 t_bool res;
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. */
1095 switch (code)
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;
1104 case INTEGER_CST:
1105 /* This assignment is under the form "a_1 = 7". */
1106 res = t_false;
1107 break;
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;
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;
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)
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);
1142 else
1143 res = t_false;
1144 break;
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;
1157 default:
1158 res = t_false;
1159 break;
1162 return res;
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. */
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)
1173 enum tree_code code = gimple_assign_rhs_code (stmt);
1174 tree type = gimple_expr_type (stmt), rhs1, rhs2;
1175 t_bool res;
1177 switch (code)
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;
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;
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;
1205 return res;
1208 /* Checks whether the I-th argument of a PHI comes from a backedge. */
1210 static bool
1211 backedge_phi_arg_p (gphi *phi, int i)
1213 const_edge e = gimple_phi_arg_edge (phi, i);
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;
1221 return false;
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. */
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)
1236 tree branch = PHI_ARG_DEF (condition_phi, i);
1237 *evolution_of_branch = chrec_dont_know;
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;
1244 if (TREE_CODE (branch) == SSA_NAME)
1246 *evolution_of_branch = init_cond;
1247 return follow_ssa_edge (loop, SSA_NAME_DEF_STMT (branch), halting_phi,
1248 evolution_of_branch, limit);
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)>;".
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;
1261 /* This function merges the branches of a condition-phi-node in a
1262 loop. */
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)
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;
1280 *evolution_of_loop = evolution_of_branch;
1282 n = gimple_phi_num_args (condition_phi);
1283 for (i = 1; i < n; i++)
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;
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;
1299 *evolution_of_loop = chrec_merge (*evolution_of_loop,
1300 evolution_of_branch);
1303 return t_true;
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. */
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)
1317 struct loop *loop = loop_containing_stmt (loop_phi_node);
1318 tree ev = analyze_scalar_evolution (loop, PHI_RESULT (loop_phi_node));
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))
1324 t_bool res = t_false;
1325 int i, n = gimple_phi_num_args (loop_phi_node);
1327 for (i = 0; i < n; i++)
1329 tree arg = PHI_ARG_DEF (loop_phi_node, i);
1330 basic_block bb;
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;
1342 /* If the path crosses this loop-phi, give up. */
1343 if (res == t_true)
1344 *evolution_of_loop = chrec_dont_know;
1346 return res;
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);
1355 /* Follow an SSA edge from a loop-phi-node to itself, constructing a
1356 path that is analyzed on the return walk. */
1358 static t_bool
1359 follow_ssa_edge (struct loop *loop, gimple *def, gphi *halting_phi,
1360 tree *evolution_of_loop, int limit)
1362 struct loop *def_loop;
1364 if (gimple_nop_p (def))
1365 return t_false;
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;
1371 def_loop = loop_containing_stmt (def);
1373 switch (gimple_code (def))
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);
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;
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;
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);
1403 /* Outer loop. */
1404 return t_false;
1406 case GIMPLE_ASSIGN:
1407 return follow_ssa_edge_in_rhs (loop, def, halting_phi,
1408 evolution_of_loop, limit);
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;
1419 /* Simplify PEELED_CHREC represented by (init_cond, arg) in LOOP.
1420 Handle below case and return the corresponding POLYNOMIAL_CHREC:
1422 # i_17 = PHI <i_13(5), 0(3)>
1423 # _20 = PHI <_5(5), start_4(D)(3)>
1425 i_13 = i_17 + 1;
1426 _5 = start_4(D) + i_13;
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.
1431 See PR41488. */
1433 static tree
1434 simplify_peeled_chrec (struct loop *loop, tree arg, tree init_cond)
1436 aff_tree aff1, aff2;
1437 tree ev, left, right, type, step_val;
1438 hash_map<tree, name_expansion *> *peeled_chrec_map = NULL;
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;
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);
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))
1453 if (dump_file && (dump_flags & TDF_SCEV))
1454 fprintf (dump_file, "Simplify PEELED_CHREC into POLYNOMIAL_CHREC.\n");
1456 return build_polynomial_chrec (loop->num, init_cond, right);
1459 /* Try harder to check if they are equal. */
1460 tree_to_aff_combination_expand (left, type, &aff1, &peeled_chrec_map);
1461 tree_to_aff_combination_expand (step_val, type, &aff2, &peeled_chrec_map);
1462 free_affine_expand_cache (&peeled_chrec_map);
1463 aff_combination_scale (&aff2, -1);
1464 aff_combination_add (&aff1, &aff2);
1466 /* Transform (init, {left, right}_LOOP)_LOOP to {init, right}_LOOP
1467 if "left" equals to "init + right". */
1468 if (aff_combination_zero_p (&aff1))
1470 if (dump_file && (dump_flags & TDF_SCEV))
1471 fprintf (dump_file, "Simplify PEELED_CHREC into POLYNOMIAL_CHREC.\n");
1473 return build_polynomial_chrec (loop->num, init_cond, right);
1475 return chrec_dont_know;
1478 /* Given a LOOP_PHI_NODE, this function determines the evolution
1479 function from LOOP_PHI_NODE to LOOP_PHI_NODE in the loop. */
1481 static tree
1482 analyze_evolution_in_loop (gphi *loop_phi_node,
1483 tree init_cond)
1485 int i, n = gimple_phi_num_args (loop_phi_node);
1486 tree evolution_function = chrec_not_analyzed_yet;
1487 struct loop *loop = loop_containing_stmt (loop_phi_node);
1488 basic_block bb;
1489 static bool simplify_peeled_chrec_p = true;
1491 if (dump_file && (dump_flags & TDF_SCEV))
1493 fprintf (dump_file, "(analyze_evolution_in_loop \n");
1494 fprintf (dump_file, " (loop_phi_node = ");
1495 print_gimple_stmt (dump_file, loop_phi_node, 0);
1496 fprintf (dump_file, ")\n");
1499 for (i = 0; i < n; i++)
1501 tree arg = PHI_ARG_DEF (loop_phi_node, i);
1502 gimple *ssa_chain;
1503 tree ev_fn;
1504 t_bool res;
1506 /* Select the edges that enter the loop body. */
1507 bb = gimple_phi_arg_edge (loop_phi_node, i)->src;
1508 if (!flow_bb_inside_loop_p (loop, bb))
1509 continue;
1511 if (TREE_CODE (arg) == SSA_NAME)
1513 bool val = false;
1515 ssa_chain = SSA_NAME_DEF_STMT (arg);
1517 /* Pass in the initial condition to the follow edge function. */
1518 ev_fn = init_cond;
1519 res = follow_ssa_edge (loop, ssa_chain, loop_phi_node, &ev_fn, 0);
1521 /* If ev_fn has no evolution in the inner loop, and the
1522 init_cond is not equal to ev_fn, then we have an
1523 ambiguity between two possible values, as we cannot know
1524 the number of iterations at this point. */
1525 if (TREE_CODE (ev_fn) != POLYNOMIAL_CHREC
1526 && no_evolution_in_loop_p (ev_fn, loop->num, &val) && val
1527 && !operand_equal_p (init_cond, ev_fn, 0))
1528 ev_fn = chrec_dont_know;
1530 else
1531 res = t_false;
1533 /* When it is impossible to go back on the same
1534 loop_phi_node by following the ssa edges, the
1535 evolution is represented by a peeled chrec, i.e. the
1536 first iteration, EV_FN has the value INIT_COND, then
1537 all the other iterations it has the value of ARG.
1538 For the moment, PEELED_CHREC nodes are not built. */
1539 if (res != t_true)
1541 ev_fn = chrec_dont_know;
1542 /* Try to recognize POLYNOMIAL_CHREC which appears in
1543 the form of PEELED_CHREC, but guard the process with
1544 a bool variable to keep the analyzer from infinite
1545 recurrence for real PEELED_RECs. */
1546 if (simplify_peeled_chrec_p && TREE_CODE (arg) == SSA_NAME)
1548 simplify_peeled_chrec_p = false;
1549 ev_fn = simplify_peeled_chrec (loop, arg, init_cond);
1550 simplify_peeled_chrec_p = true;
1554 /* When there are multiple back edges of the loop (which in fact never
1555 happens currently, but nevertheless), merge their evolutions. */
1556 evolution_function = chrec_merge (evolution_function, ev_fn);
1558 if (evolution_function == chrec_dont_know)
1559 break;
1562 if (dump_file && (dump_flags & TDF_SCEV))
1564 fprintf (dump_file, " (evolution_function = ");
1565 print_generic_expr (dump_file, evolution_function);
1566 fprintf (dump_file, "))\n");
1569 return evolution_function;
1572 /* Looks to see if VAR is a copy of a constant (via straightforward assignments
1573 or degenerate phi's). If so, returns the constant; else, returns VAR. */
1575 static tree
1576 follow_copies_to_constant (tree var)
1578 tree res = var;
1579 while (TREE_CODE (res) == SSA_NAME
1580 /* We face not updated SSA form in multiple places and this walk
1581 may end up in sibling loops so we have to guard it. */
1582 && !name_registered_for_update_p (res))
1584 gimple *def = SSA_NAME_DEF_STMT (res);
1585 if (gphi *phi = dyn_cast <gphi *> (def))
1587 if (tree rhs = degenerate_phi_result (phi))
1588 res = rhs;
1589 else
1590 break;
1592 else if (gimple_assign_single_p (def))
1593 /* Will exit loop if not an SSA_NAME. */
1594 res = gimple_assign_rhs1 (def);
1595 else
1596 break;
1598 if (CONSTANT_CLASS_P (res))
1599 return res;
1600 return var;
1603 /* Given a loop-phi-node, return the initial conditions of the
1604 variable on entry of the loop. When the CCP has propagated
1605 constants into the loop-phi-node, the initial condition is
1606 instantiated, otherwise the initial condition is kept symbolic.
1607 This analyzer does not analyze the evolution outside the current
1608 loop, and leaves this task to the on-demand tree reconstructor. */
1610 static tree
1611 analyze_initial_condition (gphi *loop_phi_node)
1613 int i, n;
1614 tree init_cond = chrec_not_analyzed_yet;
1615 struct loop *loop = loop_containing_stmt (loop_phi_node);
1617 if (dump_file && (dump_flags & TDF_SCEV))
1619 fprintf (dump_file, "(analyze_initial_condition \n");
1620 fprintf (dump_file, " (loop_phi_node = \n");
1621 print_gimple_stmt (dump_file, loop_phi_node, 0);
1622 fprintf (dump_file, ")\n");
1625 n = gimple_phi_num_args (loop_phi_node);
1626 for (i = 0; i < n; i++)
1628 tree branch = PHI_ARG_DEF (loop_phi_node, i);
1629 basic_block bb = gimple_phi_arg_edge (loop_phi_node, i)->src;
1631 /* When the branch is oriented to the loop's body, it does
1632 not contribute to the initial condition. */
1633 if (flow_bb_inside_loop_p (loop, bb))
1634 continue;
1636 if (init_cond == chrec_not_analyzed_yet)
1638 init_cond = branch;
1639 continue;
1642 if (TREE_CODE (branch) == SSA_NAME)
1644 init_cond = chrec_dont_know;
1645 break;
1648 init_cond = chrec_merge (init_cond, branch);
1651 /* Ooops -- a loop without an entry??? */
1652 if (init_cond == chrec_not_analyzed_yet)
1653 init_cond = chrec_dont_know;
1655 /* We may not have fully constant propagated IL. Handle degenerate PHIs here
1656 to not miss important early loop unrollings. */
1657 init_cond = follow_copies_to_constant (init_cond);
1659 if (dump_file && (dump_flags & TDF_SCEV))
1661 fprintf (dump_file, " (init_cond = ");
1662 print_generic_expr (dump_file, init_cond);
1663 fprintf (dump_file, "))\n");
1666 return init_cond;
1669 /* Analyze the scalar evolution for LOOP_PHI_NODE. */
1671 static tree
1672 interpret_loop_phi (struct loop *loop, gphi *loop_phi_node)
1674 tree res;
1675 struct loop *phi_loop = loop_containing_stmt (loop_phi_node);
1676 tree init_cond;
1678 gcc_assert (phi_loop == loop);
1680 /* Otherwise really interpret the loop phi. */
1681 init_cond = analyze_initial_condition (loop_phi_node);
1682 res = analyze_evolution_in_loop (loop_phi_node, init_cond);
1684 /* Verify we maintained the correct initial condition throughout
1685 possible conversions in the SSA chain. */
1686 if (res != chrec_dont_know)
1688 tree new_init = res;
1689 if (CONVERT_EXPR_P (res)
1690 && TREE_CODE (TREE_OPERAND (res, 0)) == POLYNOMIAL_CHREC)
1691 new_init = fold_convert (TREE_TYPE (res),
1692 CHREC_LEFT (TREE_OPERAND (res, 0)));
1693 else if (TREE_CODE (res) == POLYNOMIAL_CHREC)
1694 new_init = CHREC_LEFT (res);
1695 STRIP_USELESS_TYPE_CONVERSION (new_init);
1696 if (TREE_CODE (new_init) == POLYNOMIAL_CHREC
1697 || !operand_equal_p (init_cond, new_init, 0))
1698 return chrec_dont_know;
1701 return res;
1704 /* This function merges the branches of a condition-phi-node,
1705 contained in the outermost loop, and whose arguments are already
1706 analyzed. */
1708 static tree
1709 interpret_condition_phi (struct loop *loop, gphi *condition_phi)
1711 int i, n = gimple_phi_num_args (condition_phi);
1712 tree res = chrec_not_analyzed_yet;
1714 for (i = 0; i < n; i++)
1716 tree branch_chrec;
1718 if (backedge_phi_arg_p (condition_phi, i))
1720 res = chrec_dont_know;
1721 break;
1724 branch_chrec = analyze_scalar_evolution
1725 (loop, PHI_ARG_DEF (condition_phi, i));
1727 res = chrec_merge (res, branch_chrec);
1728 if (res == chrec_dont_know)
1729 break;
1732 return res;
1735 /* Interpret the operation RHS1 OP RHS2. If we didn't
1736 analyze this node before, follow the definitions until ending
1737 either on an analyzed GIMPLE_ASSIGN, or on a loop-phi-node. On the
1738 return path, this function propagates evolutions (ala constant copy
1739 propagation). OPND1 is not a GIMPLE expression because we could
1740 analyze the effect of an inner loop: see interpret_loop_phi. */
1742 static tree
1743 interpret_rhs_expr (struct loop *loop, gimple *at_stmt,
1744 tree type, tree rhs1, enum tree_code code, tree rhs2)
1746 tree res, chrec1, chrec2, ctype;
1747 gimple *def;
1749 if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
1751 if (is_gimple_min_invariant (rhs1))
1752 return chrec_convert (type, rhs1, at_stmt);
1754 if (code == SSA_NAME)
1755 return chrec_convert (type, analyze_scalar_evolution (loop, rhs1),
1756 at_stmt);
1758 if (code == ASSERT_EXPR)
1760 rhs1 = ASSERT_EXPR_VAR (rhs1);
1761 return chrec_convert (type, analyze_scalar_evolution (loop, rhs1),
1762 at_stmt);
1766 switch (code)
1768 case ADDR_EXPR:
1769 if (TREE_CODE (TREE_OPERAND (rhs1, 0)) == MEM_REF
1770 || handled_component_p (TREE_OPERAND (rhs1, 0)))
1772 machine_mode mode;
1773 poly_int64 bitsize, bitpos;
1774 int unsignedp, reversep;
1775 int volatilep = 0;
1776 tree base, offset;
1777 tree chrec3;
1778 tree unitpos;
1780 base = get_inner_reference (TREE_OPERAND (rhs1, 0),
1781 &bitsize, &bitpos, &offset, &mode,
1782 &unsignedp, &reversep, &volatilep);
1784 if (TREE_CODE (base) == MEM_REF)
1786 rhs2 = TREE_OPERAND (base, 1);
1787 rhs1 = TREE_OPERAND (base, 0);
1789 chrec1 = analyze_scalar_evolution (loop, rhs1);
1790 chrec2 = analyze_scalar_evolution (loop, rhs2);
1791 chrec1 = chrec_convert (type, chrec1, at_stmt);
1792 chrec2 = chrec_convert (TREE_TYPE (rhs2), chrec2, at_stmt);
1793 chrec1 = instantiate_parameters (loop, chrec1);
1794 chrec2 = instantiate_parameters (loop, chrec2);
1795 res = chrec_fold_plus (type, chrec1, chrec2);
1797 else
1799 chrec1 = analyze_scalar_evolution_for_address_of (loop, base);
1800 chrec1 = chrec_convert (type, chrec1, at_stmt);
1801 res = chrec1;
1804 if (offset != NULL_TREE)
1806 chrec2 = analyze_scalar_evolution (loop, offset);
1807 chrec2 = chrec_convert (TREE_TYPE (offset), chrec2, at_stmt);
1808 chrec2 = instantiate_parameters (loop, chrec2);
1809 res = chrec_fold_plus (type, res, chrec2);
1812 if (maybe_ne (bitpos, 0))
1814 unitpos = size_int (exact_div (bitpos, BITS_PER_UNIT));
1815 chrec3 = analyze_scalar_evolution (loop, unitpos);
1816 chrec3 = chrec_convert (TREE_TYPE (unitpos), chrec3, at_stmt);
1817 chrec3 = instantiate_parameters (loop, chrec3);
1818 res = chrec_fold_plus (type, res, chrec3);
1821 else
1822 res = chrec_dont_know;
1823 break;
1825 case POINTER_PLUS_EXPR:
1826 chrec1 = analyze_scalar_evolution (loop, rhs1);
1827 chrec2 = analyze_scalar_evolution (loop, rhs2);
1828 chrec1 = chrec_convert (type, chrec1, at_stmt);
1829 chrec2 = chrec_convert (TREE_TYPE (rhs2), chrec2, at_stmt);
1830 chrec1 = instantiate_parameters (loop, chrec1);
1831 chrec2 = instantiate_parameters (loop, chrec2);
1832 res = chrec_fold_plus (type, chrec1, chrec2);
1833 break;
1835 case PLUS_EXPR:
1836 chrec1 = analyze_scalar_evolution (loop, rhs1);
1837 chrec2 = analyze_scalar_evolution (loop, rhs2);
1838 ctype = type;
1839 /* When the stmt is conditionally executed re-write the CHREC
1840 into a form that has well-defined behavior on overflow. */
1841 if (at_stmt
1842 && INTEGRAL_TYPE_P (type)
1843 && ! TYPE_OVERFLOW_WRAPS (type)
1844 && ! dominated_by_p (CDI_DOMINATORS, loop->latch,
1845 gimple_bb (at_stmt)))
1846 ctype = unsigned_type_for (type);
1847 chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1848 chrec2 = chrec_convert (ctype, chrec2, at_stmt);
1849 chrec1 = instantiate_parameters (loop, chrec1);
1850 chrec2 = instantiate_parameters (loop, chrec2);
1851 res = chrec_fold_plus (ctype, chrec1, chrec2);
1852 if (type != ctype)
1853 res = chrec_convert (type, res, at_stmt);
1854 break;
1856 case MINUS_EXPR:
1857 chrec1 = analyze_scalar_evolution (loop, rhs1);
1858 chrec2 = analyze_scalar_evolution (loop, rhs2);
1859 ctype = type;
1860 /* When the stmt is conditionally executed re-write the CHREC
1861 into a form that has well-defined behavior on overflow. */
1862 if (at_stmt
1863 && INTEGRAL_TYPE_P (type)
1864 && ! TYPE_OVERFLOW_WRAPS (type)
1865 && ! dominated_by_p (CDI_DOMINATORS,
1866 loop->latch, gimple_bb (at_stmt)))
1867 ctype = unsigned_type_for (type);
1868 chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1869 chrec2 = chrec_convert (ctype, chrec2, at_stmt);
1870 chrec1 = instantiate_parameters (loop, chrec1);
1871 chrec2 = instantiate_parameters (loop, chrec2);
1872 res = chrec_fold_minus (ctype, chrec1, chrec2);
1873 if (type != ctype)
1874 res = chrec_convert (type, res, at_stmt);
1875 break;
1877 case NEGATE_EXPR:
1878 chrec1 = analyze_scalar_evolution (loop, rhs1);
1879 ctype = type;
1880 /* When the stmt is conditionally executed re-write the CHREC
1881 into a form that has well-defined behavior on overflow. */
1882 if (at_stmt
1883 && INTEGRAL_TYPE_P (type)
1884 && ! TYPE_OVERFLOW_WRAPS (type)
1885 && ! dominated_by_p (CDI_DOMINATORS,
1886 loop->latch, gimple_bb (at_stmt)))
1887 ctype = unsigned_type_for (type);
1888 chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1889 /* TYPE may be integer, real or complex, so use fold_convert. */
1890 chrec1 = instantiate_parameters (loop, chrec1);
1891 res = chrec_fold_multiply (ctype, chrec1,
1892 fold_convert (ctype, integer_minus_one_node));
1893 if (type != ctype)
1894 res = chrec_convert (type, res, at_stmt);
1895 break;
1897 case BIT_NOT_EXPR:
1898 /* Handle ~X as -1 - X. */
1899 chrec1 = analyze_scalar_evolution (loop, rhs1);
1900 chrec1 = chrec_convert (type, chrec1, at_stmt);
1901 chrec1 = instantiate_parameters (loop, chrec1);
1902 res = chrec_fold_minus (type,
1903 fold_convert (type, integer_minus_one_node),
1904 chrec1);
1905 break;
1907 case MULT_EXPR:
1908 chrec1 = analyze_scalar_evolution (loop, rhs1);
1909 chrec2 = analyze_scalar_evolution (loop, rhs2);
1910 ctype = type;
1911 /* When the stmt is conditionally executed re-write the CHREC
1912 into a form that has well-defined behavior on overflow. */
1913 if (at_stmt
1914 && INTEGRAL_TYPE_P (type)
1915 && ! TYPE_OVERFLOW_WRAPS (type)
1916 && ! dominated_by_p (CDI_DOMINATORS,
1917 loop->latch, gimple_bb (at_stmt)))
1918 ctype = unsigned_type_for (type);
1919 chrec1 = chrec_convert (ctype, chrec1, at_stmt);
1920 chrec2 = chrec_convert (ctype, chrec2, at_stmt);
1921 chrec1 = instantiate_parameters (loop, chrec1);
1922 chrec2 = instantiate_parameters (loop, chrec2);
1923 res = chrec_fold_multiply (ctype, chrec1, chrec2);
1924 if (type != ctype)
1925 res = chrec_convert (type, res, at_stmt);
1926 break;
1928 case LSHIFT_EXPR:
1930 /* Handle A<<B as A * (1<<B). */
1931 tree uns = unsigned_type_for (type);
1932 chrec1 = analyze_scalar_evolution (loop, rhs1);
1933 chrec2 = analyze_scalar_evolution (loop, rhs2);
1934 chrec1 = chrec_convert (uns, chrec1, at_stmt);
1935 chrec1 = instantiate_parameters (loop, chrec1);
1936 chrec2 = instantiate_parameters (loop, chrec2);
1938 tree one = build_int_cst (uns, 1);
1939 chrec2 = fold_build2 (LSHIFT_EXPR, uns, one, chrec2);
1940 res = chrec_fold_multiply (uns, chrec1, chrec2);
1941 res = chrec_convert (type, res, at_stmt);
1943 break;
1945 CASE_CONVERT:
1946 /* In case we have a truncation of a widened operation that in
1947 the truncated type has undefined overflow behavior analyze
1948 the operation done in an unsigned type of the same precision
1949 as the final truncation. We cannot derive a scalar evolution
1950 for the widened operation but for the truncated result. */
1951 if (TREE_CODE (type) == INTEGER_TYPE
1952 && TREE_CODE (TREE_TYPE (rhs1)) == INTEGER_TYPE
1953 && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (rhs1))
1954 && TYPE_OVERFLOW_UNDEFINED (type)
1955 && TREE_CODE (rhs1) == SSA_NAME
1956 && (def = SSA_NAME_DEF_STMT (rhs1))
1957 && is_gimple_assign (def)
1958 && TREE_CODE_CLASS (gimple_assign_rhs_code (def)) == tcc_binary
1959 && TREE_CODE (gimple_assign_rhs2 (def)) == INTEGER_CST)
1961 tree utype = unsigned_type_for (type);
1962 chrec1 = interpret_rhs_expr (loop, at_stmt, utype,
1963 gimple_assign_rhs1 (def),
1964 gimple_assign_rhs_code (def),
1965 gimple_assign_rhs2 (def));
1967 else
1968 chrec1 = analyze_scalar_evolution (loop, rhs1);
1969 res = chrec_convert (type, chrec1, at_stmt, true, rhs1);
1970 break;
1972 case BIT_AND_EXPR:
1973 /* Given int variable A, handle A&0xffff as (int)(unsigned short)A.
1974 If A is SCEV and its value is in the range of representable set
1975 of type unsigned short, the result expression is a (no-overflow)
1976 SCEV. */
1977 res = chrec_dont_know;
1978 if (tree_fits_uhwi_p (rhs2))
1980 int precision;
1981 unsigned HOST_WIDE_INT val = tree_to_uhwi (rhs2);
1983 val ++;
1984 /* Skip if value of rhs2 wraps in unsigned HOST_WIDE_INT or
1985 it's not the maximum value of a smaller type than rhs1. */
1986 if (val != 0
1987 && (precision = exact_log2 (val)) > 0
1988 && (unsigned) precision < TYPE_PRECISION (TREE_TYPE (rhs1)))
1990 tree utype = build_nonstandard_integer_type (precision, 1);
1992 if (TYPE_PRECISION (utype) < TYPE_PRECISION (TREE_TYPE (rhs1)))
1994 chrec1 = analyze_scalar_evolution (loop, rhs1);
1995 chrec1 = chrec_convert (utype, chrec1, at_stmt);
1996 res = chrec_convert (TREE_TYPE (rhs1), chrec1, at_stmt);
2000 break;
2002 default:
2003 res = chrec_dont_know;
2004 break;
2007 return res;
2010 /* Interpret the expression EXPR. */
2012 static tree
2013 interpret_expr (struct loop *loop, gimple *at_stmt, tree expr)
2015 enum tree_code code;
2016 tree type = TREE_TYPE (expr), op0, op1;
2018 if (automatically_generated_chrec_p (expr))
2019 return expr;
2021 if (TREE_CODE (expr) == POLYNOMIAL_CHREC
2022 || TREE_CODE (expr) == CALL_EXPR
2023 || get_gimple_rhs_class (TREE_CODE (expr)) == GIMPLE_TERNARY_RHS)
2024 return chrec_dont_know;
2026 extract_ops_from_tree (expr, &code, &op0, &op1);
2028 return interpret_rhs_expr (loop, at_stmt, type,
2029 op0, code, op1);
2032 /* Interpret the rhs of the assignment STMT. */
2034 static tree
2035 interpret_gimple_assign (struct loop *loop, gimple *stmt)
2037 tree type = TREE_TYPE (gimple_assign_lhs (stmt));
2038 enum tree_code code = gimple_assign_rhs_code (stmt);
2040 return interpret_rhs_expr (loop, stmt, type,
2041 gimple_assign_rhs1 (stmt), code,
2042 gimple_assign_rhs2 (stmt));
2047 /* This section contains all the entry points:
2048 - number_of_iterations_in_loop,
2049 - analyze_scalar_evolution,
2050 - instantiate_parameters.
2053 /* Helper recursive function. */
2055 static tree
2056 analyze_scalar_evolution_1 (struct loop *loop, tree var)
2058 gimple *def;
2059 basic_block bb;
2060 struct loop *def_loop;
2061 tree res;
2063 if (TREE_CODE (var) != SSA_NAME)
2064 return interpret_expr (loop, NULL, var);
2066 def = SSA_NAME_DEF_STMT (var);
2067 bb = gimple_bb (def);
2068 def_loop = bb->loop_father;
2070 if (!flow_bb_inside_loop_p (loop, bb))
2072 /* Keep symbolic form, but look through obvious copies for constants. */
2073 res = follow_copies_to_constant (var);
2074 goto set_and_end;
2077 if (loop != def_loop)
2079 res = analyze_scalar_evolution_1 (def_loop, var);
2080 struct loop *loop_to_skip = superloop_at_depth (def_loop,
2081 loop_depth (loop) + 1);
2082 res = compute_overall_effect_of_inner_loop (loop_to_skip, res);
2083 if (chrec_contains_symbols_defined_in_loop (res, loop->num))
2084 res = analyze_scalar_evolution_1 (loop, res);
2085 goto set_and_end;
2088 switch (gimple_code (def))
2090 case GIMPLE_ASSIGN:
2091 res = interpret_gimple_assign (loop, def);
2092 break;
2094 case GIMPLE_PHI:
2095 if (loop_phi_node_p (def))
2096 res = interpret_loop_phi (loop, as_a <gphi *> (def));
2097 else
2098 res = interpret_condition_phi (loop, as_a <gphi *> (def));
2099 break;
2101 default:
2102 res = chrec_dont_know;
2103 break;
2106 set_and_end:
2108 /* Keep the symbolic form. */
2109 if (res == chrec_dont_know)
2110 res = var;
2112 if (loop == def_loop)
2113 set_scalar_evolution (block_before_loop (loop), var, res);
2115 return res;
2118 /* Analyzes and returns the scalar evolution of the ssa_name VAR in
2119 LOOP. LOOP is the loop in which the variable is used.
2121 Example of use: having a pointer VAR to a SSA_NAME node, STMT a
2122 pointer to the statement that uses this variable, in order to
2123 determine the evolution function of the variable, use the following
2124 calls:
2126 loop_p loop = loop_containing_stmt (stmt);
2127 tree chrec_with_symbols = analyze_scalar_evolution (loop, var);
2128 tree chrec_instantiated = instantiate_parameters (loop, chrec_with_symbols);
2131 tree
2132 analyze_scalar_evolution (struct loop *loop, tree var)
2134 tree res;
2136 /* ??? Fix callers. */
2137 if (! loop)
2138 return var;
2140 if (dump_file && (dump_flags & TDF_SCEV))
2142 fprintf (dump_file, "(analyze_scalar_evolution \n");
2143 fprintf (dump_file, " (loop_nb = %d)\n", loop->num);
2144 fprintf (dump_file, " (scalar = ");
2145 print_generic_expr (dump_file, var);
2146 fprintf (dump_file, ")\n");
2149 res = get_scalar_evolution (block_before_loop (loop), var);
2150 if (res == chrec_not_analyzed_yet)
2152 /* We'll recurse into instantiate_scev, avoid tearing down the
2153 instantiate cache repeatedly and keep it live from here. */
2154 bool destr = false;
2155 if (!global_cache)
2157 global_cache = new instantiate_cache_type;
2158 destr = true;
2160 res = analyze_scalar_evolution_1 (loop, var);
2161 if (destr)
2163 delete global_cache;
2164 global_cache = NULL;
2168 if (dump_file && (dump_flags & TDF_SCEV))
2169 fprintf (dump_file, ")\n");
2171 return res;
2174 /* Analyzes and returns the scalar evolution of VAR address in LOOP. */
2176 static tree
2177 analyze_scalar_evolution_for_address_of (struct loop *loop, tree var)
2179 return analyze_scalar_evolution (loop, build_fold_addr_expr (var));
2182 /* Analyze scalar evolution of use of VERSION in USE_LOOP with respect to
2183 WRTO_LOOP (which should be a superloop of USE_LOOP)
2185 FOLDED_CASTS is set to true if resolve_mixers used
2186 chrec_convert_aggressive (TODO -- not really, we are way too conservative
2187 at the moment in order to keep things simple).
2189 To illustrate the meaning of USE_LOOP and WRTO_LOOP, consider the following
2190 example:
2192 for (i = 0; i < 100; i++) -- loop 1
2194 for (j = 0; j < 100; j++) -- loop 2
2196 k1 = i;
2197 k2 = j;
2199 use2 (k1, k2);
2201 for (t = 0; t < 100; t++) -- loop 3
2202 use3 (k1, k2);
2205 use1 (k1, k2);
2208 Both k1 and k2 are invariants in loop3, thus
2209 analyze_scalar_evolution_in_loop (loop3, loop3, k1) = k1
2210 analyze_scalar_evolution_in_loop (loop3, loop3, k2) = k2
2212 As they are invariant, it does not matter whether we consider their
2213 usage in loop 3 or loop 2, hence
2214 analyze_scalar_evolution_in_loop (loop2, loop3, k1) =
2215 analyze_scalar_evolution_in_loop (loop2, loop2, k1) = i
2216 analyze_scalar_evolution_in_loop (loop2, loop3, k2) =
2217 analyze_scalar_evolution_in_loop (loop2, loop2, k2) = [0,+,1]_2
2219 Similarly for their evolutions with respect to loop 1. The values of K2
2220 in the use in loop 2 vary independently on loop 1, thus we cannot express
2221 the evolution with respect to loop 1:
2222 analyze_scalar_evolution_in_loop (loop1, loop3, k1) =
2223 analyze_scalar_evolution_in_loop (loop1, loop2, k1) = [0,+,1]_1
2224 analyze_scalar_evolution_in_loop (loop1, loop3, k2) =
2225 analyze_scalar_evolution_in_loop (loop1, loop2, k2) = dont_know
2227 The value of k2 in the use in loop 1 is known, though:
2228 analyze_scalar_evolution_in_loop (loop1, loop1, k1) = [0,+,1]_1
2229 analyze_scalar_evolution_in_loop (loop1, loop1, k2) = 100
2232 static tree
2233 analyze_scalar_evolution_in_loop (struct loop *wrto_loop, struct loop *use_loop,
2234 tree version, bool *folded_casts)
2236 bool val = false;
2237 tree ev = version, tmp;
2239 /* We cannot just do
2241 tmp = analyze_scalar_evolution (use_loop, version);
2242 ev = resolve_mixers (wrto_loop, tmp, folded_casts);
2244 as resolve_mixers would query the scalar evolution with respect to
2245 wrto_loop. For example, in the situation described in the function
2246 comment, suppose that wrto_loop = loop1, use_loop = loop3 and
2247 version = k2. Then
2249 analyze_scalar_evolution (use_loop, version) = k2
2251 and resolve_mixers (loop1, k2, folded_casts) finds that the value of
2252 k2 in loop 1 is 100, which is a wrong result, since we are interested
2253 in the value in loop 3.
2255 Instead, we need to proceed from use_loop to wrto_loop loop by loop,
2256 each time checking that there is no evolution in the inner loop. */
2258 if (folded_casts)
2259 *folded_casts = false;
2260 while (1)
2262 tmp = analyze_scalar_evolution (use_loop, ev);
2263 ev = resolve_mixers (use_loop, tmp, folded_casts);
2265 if (use_loop == wrto_loop)
2266 return ev;
2268 /* If the value of the use changes in the inner loop, we cannot express
2269 its value in the outer loop (we might try to return interval chrec,
2270 but we do not have a user for it anyway) */
2271 if (!no_evolution_in_loop_p (ev, use_loop->num, &val)
2272 || !val)
2273 return chrec_dont_know;
2275 use_loop = loop_outer (use_loop);
2280 /* Computes a hash function for database element ELT. */
2282 static inline hashval_t
2283 hash_idx_scev_info (const void *elt_)
2285 unsigned idx = ((size_t) elt_) - 2;
2286 return scev_info_hasher::hash (&global_cache->entries[idx]);
2289 /* Compares database elements E1 and E2. */
2291 static inline int
2292 eq_idx_scev_info (const void *e1, const void *e2)
2294 unsigned idx1 = ((size_t) e1) - 2;
2295 return scev_info_hasher::equal (&global_cache->entries[idx1],
2296 (const scev_info_str *) e2);
2299 /* Returns from CACHE the slot number of the cached chrec for NAME. */
2301 static unsigned
2302 get_instantiated_value_entry (instantiate_cache_type &cache,
2303 tree name, edge instantiate_below)
2305 if (!cache.map)
2307 cache.map = htab_create (10, hash_idx_scev_info, eq_idx_scev_info, NULL);
2308 cache.entries.create (10);
2311 scev_info_str e;
2312 e.name_version = SSA_NAME_VERSION (name);
2313 e.instantiated_below = instantiate_below->dest->index;
2314 void **slot = htab_find_slot_with_hash (cache.map, &e,
2315 scev_info_hasher::hash (&e), INSERT);
2316 if (!*slot)
2318 e.chrec = chrec_not_analyzed_yet;
2319 *slot = (void *)(size_t)(cache.entries.length () + 2);
2320 cache.entries.safe_push (e);
2323 return ((size_t)*slot) - 2;
2327 /* Return the closed_loop_phi node for VAR. If there is none, return
2328 NULL_TREE. */
2330 static tree
2331 loop_closed_phi_def (tree var)
2333 struct loop *loop;
2334 edge exit;
2335 gphi *phi;
2336 gphi_iterator psi;
2338 if (var == NULL_TREE
2339 || TREE_CODE (var) != SSA_NAME)
2340 return NULL_TREE;
2342 loop = loop_containing_stmt (SSA_NAME_DEF_STMT (var));
2343 exit = single_exit (loop);
2344 if (!exit)
2345 return NULL_TREE;
2347 for (psi = gsi_start_phis (exit->dest); !gsi_end_p (psi); gsi_next (&psi))
2349 phi = psi.phi ();
2350 if (PHI_ARG_DEF_FROM_EDGE (phi, exit) == var)
2351 return PHI_RESULT (phi);
2354 return NULL_TREE;
2357 static tree instantiate_scev_r (edge, struct loop *, struct loop *,
2358 tree, bool *, int);
2360 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2361 and EVOLUTION_LOOP, that were left under a symbolic form.
2363 CHREC is an SSA_NAME to be instantiated.
2365 CACHE is the cache of already instantiated values.
2367 Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2368 conversions that may wrap in signed/pointer type are folded, as long
2369 as the value of the chrec is preserved. If FOLD_CONVERSIONS is NULL
2370 then we don't do such fold.
2372 SIZE_EXPR is used for computing the size of the expression to be
2373 instantiated, and to stop if it exceeds some limit. */
2375 static tree
2376 instantiate_scev_name (edge instantiate_below,
2377 struct loop *evolution_loop, struct loop *inner_loop,
2378 tree chrec,
2379 bool *fold_conversions,
2380 int size_expr)
2382 tree res;
2383 struct loop *def_loop;
2384 basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (chrec));
2386 /* A parameter, nothing to do. */
2387 if (!def_bb
2388 || !dominated_by_p (CDI_DOMINATORS, def_bb, instantiate_below->dest))
2389 return chrec;
2391 /* We cache the value of instantiated variable to avoid exponential
2392 time complexity due to reevaluations. We also store the convenient
2393 value in the cache in order to prevent infinite recursion -- we do
2394 not want to instantiate the SSA_NAME if it is in a mixer
2395 structure. This is used for avoiding the instantiation of
2396 recursively defined functions, such as:
2398 | a_2 -> {0, +, 1, +, a_2}_1 */
2400 unsigned si = get_instantiated_value_entry (*global_cache,
2401 chrec, instantiate_below);
2402 if (global_cache->get (si) != chrec_not_analyzed_yet)
2403 return global_cache->get (si);
2405 /* On recursion return chrec_dont_know. */
2406 global_cache->set (si, chrec_dont_know);
2408 def_loop = find_common_loop (evolution_loop, def_bb->loop_father);
2410 if (! dominated_by_p (CDI_DOMINATORS,
2411 def_loop->header, instantiate_below->dest))
2413 gimple *def = SSA_NAME_DEF_STMT (chrec);
2414 if (gassign *ass = dyn_cast <gassign *> (def))
2416 switch (gimple_assign_rhs_class (ass))
2418 case GIMPLE_UNARY_RHS:
2420 tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2421 inner_loop, gimple_assign_rhs1 (ass),
2422 fold_conversions, size_expr);
2423 if (op0 == chrec_dont_know)
2424 return chrec_dont_know;
2425 res = fold_build1 (gimple_assign_rhs_code (ass),
2426 TREE_TYPE (chrec), op0);
2427 break;
2429 case GIMPLE_BINARY_RHS:
2431 tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2432 inner_loop, gimple_assign_rhs1 (ass),
2433 fold_conversions, size_expr);
2434 if (op0 == chrec_dont_know)
2435 return chrec_dont_know;
2436 tree op1 = instantiate_scev_r (instantiate_below, evolution_loop,
2437 inner_loop, gimple_assign_rhs2 (ass),
2438 fold_conversions, size_expr);
2439 if (op1 == chrec_dont_know)
2440 return chrec_dont_know;
2441 res = fold_build2 (gimple_assign_rhs_code (ass),
2442 TREE_TYPE (chrec), op0, op1);
2443 break;
2445 default:
2446 res = chrec_dont_know;
2449 else
2450 res = chrec_dont_know;
2451 global_cache->set (si, res);
2452 return res;
2455 /* If the analysis yields a parametric chrec, instantiate the
2456 result again. */
2457 res = analyze_scalar_evolution (def_loop, chrec);
2459 /* Don't instantiate default definitions. */
2460 if (TREE_CODE (res) == SSA_NAME
2461 && SSA_NAME_IS_DEFAULT_DEF (res))
2464 /* Don't instantiate loop-closed-ssa phi nodes. */
2465 else if (TREE_CODE (res) == SSA_NAME
2466 && loop_depth (loop_containing_stmt (SSA_NAME_DEF_STMT (res)))
2467 > loop_depth (def_loop))
2469 if (res == chrec)
2470 res = loop_closed_phi_def (chrec);
2471 else
2472 res = chrec;
2474 /* When there is no loop_closed_phi_def, it means that the
2475 variable is not used after the loop: try to still compute the
2476 value of the variable when exiting the loop. */
2477 if (res == NULL_TREE)
2479 loop_p loop = loop_containing_stmt (SSA_NAME_DEF_STMT (chrec));
2480 res = analyze_scalar_evolution (loop, chrec);
2481 res = compute_overall_effect_of_inner_loop (loop, res);
2482 res = instantiate_scev_r (instantiate_below, evolution_loop,
2483 inner_loop, res,
2484 fold_conversions, size_expr);
2486 else if (dominated_by_p (CDI_DOMINATORS,
2487 gimple_bb (SSA_NAME_DEF_STMT (res)),
2488 instantiate_below->dest))
2489 res = chrec_dont_know;
2492 else if (res != chrec_dont_know)
2494 if (inner_loop
2495 && def_bb->loop_father != inner_loop
2496 && !flow_loop_nested_p (def_bb->loop_father, inner_loop))
2497 /* ??? We could try to compute the overall effect of the loop here. */
2498 res = chrec_dont_know;
2499 else
2500 res = instantiate_scev_r (instantiate_below, evolution_loop,
2501 inner_loop, res,
2502 fold_conversions, size_expr);
2505 /* Store the correct value to the cache. */
2506 global_cache->set (si, res);
2507 return res;
2510 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2511 and EVOLUTION_LOOP, that were left under a symbolic form.
2513 CHREC is a polynomial chain of recurrence to be instantiated.
2515 CACHE is the cache of already instantiated values.
2517 Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2518 conversions that may wrap in signed/pointer type are folded, as long
2519 as the value of the chrec is preserved. If FOLD_CONVERSIONS is NULL
2520 then we don't do such fold.
2522 SIZE_EXPR is used for computing the size of the expression to be
2523 instantiated, and to stop if it exceeds some limit. */
2525 static tree
2526 instantiate_scev_poly (edge instantiate_below,
2527 struct loop *evolution_loop, struct loop *,
2528 tree chrec, bool *fold_conversions, int size_expr)
2530 tree op1;
2531 tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2532 get_chrec_loop (chrec),
2533 CHREC_LEFT (chrec), fold_conversions,
2534 size_expr);
2535 if (op0 == chrec_dont_know)
2536 return chrec_dont_know;
2538 op1 = instantiate_scev_r (instantiate_below, evolution_loop,
2539 get_chrec_loop (chrec),
2540 CHREC_RIGHT (chrec), fold_conversions,
2541 size_expr);
2542 if (op1 == chrec_dont_know)
2543 return chrec_dont_know;
2545 if (CHREC_LEFT (chrec) != op0
2546 || CHREC_RIGHT (chrec) != op1)
2548 op1 = chrec_convert_rhs (chrec_type (op0), op1, NULL);
2549 chrec = build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1);
2552 return chrec;
2555 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2556 and EVOLUTION_LOOP, that were left under a symbolic form.
2558 "C0 CODE C1" is a binary expression of type TYPE to be instantiated.
2560 CACHE is the cache of already instantiated values.
2562 Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2563 conversions that may wrap in signed/pointer type are folded, as long
2564 as the value of the chrec is preserved. If FOLD_CONVERSIONS is NULL
2565 then we don't do such fold.
2567 SIZE_EXPR is used for computing the size of the expression to be
2568 instantiated, and to stop if it exceeds some limit. */
2570 static tree
2571 instantiate_scev_binary (edge instantiate_below,
2572 struct loop *evolution_loop, struct loop *inner_loop,
2573 tree chrec, enum tree_code code,
2574 tree type, tree c0, tree c1,
2575 bool *fold_conversions, int size_expr)
2577 tree op1;
2578 tree op0 = instantiate_scev_r (instantiate_below, evolution_loop, inner_loop,
2579 c0, fold_conversions, size_expr);
2580 if (op0 == chrec_dont_know)
2581 return chrec_dont_know;
2583 /* While we eventually compute the same op1 if c0 == c1 the process
2584 of doing this is expensive so the following short-cut prevents
2585 exponential compile-time behavior. */
2586 if (c0 != c1)
2588 op1 = instantiate_scev_r (instantiate_below, evolution_loop, inner_loop,
2589 c1, fold_conversions, size_expr);
2590 if (op1 == chrec_dont_know)
2591 return chrec_dont_know;
2593 else
2594 op1 = op0;
2596 if (c0 != op0
2597 || c1 != op1)
2599 op0 = chrec_convert (type, op0, NULL);
2600 op1 = chrec_convert_rhs (type, op1, NULL);
2602 switch (code)
2604 case POINTER_PLUS_EXPR:
2605 case PLUS_EXPR:
2606 return chrec_fold_plus (type, op0, op1);
2608 case MINUS_EXPR:
2609 return chrec_fold_minus (type, op0, op1);
2611 case MULT_EXPR:
2612 return chrec_fold_multiply (type, op0, op1);
2614 default:
2615 gcc_unreachable ();
2619 return chrec ? chrec : fold_build2 (code, type, c0, c1);
2622 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2623 and EVOLUTION_LOOP, that were left under a symbolic form.
2625 "CHREC" that stands for a convert expression "(TYPE) OP" is to be
2626 instantiated.
2628 CACHE is the cache of already instantiated values.
2630 Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2631 conversions that may wrap in signed/pointer type are folded, as long
2632 as the value of the chrec is preserved. If FOLD_CONVERSIONS is NULL
2633 then we don't do such fold.
2635 SIZE_EXPR is used for computing the size of the expression to be
2636 instantiated, and to stop if it exceeds some limit. */
2638 static tree
2639 instantiate_scev_convert (edge instantiate_below,
2640 struct loop *evolution_loop, struct loop *inner_loop,
2641 tree chrec, tree type, tree op,
2642 bool *fold_conversions, int size_expr)
2644 tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2645 inner_loop, op,
2646 fold_conversions, size_expr);
2648 if (op0 == chrec_dont_know)
2649 return chrec_dont_know;
2651 if (fold_conversions)
2653 tree tmp = chrec_convert_aggressive (type, op0, fold_conversions);
2654 if (tmp)
2655 return tmp;
2657 /* If we used chrec_convert_aggressive, we can no longer assume that
2658 signed chrecs do not overflow, as chrec_convert does, so avoid
2659 calling it in that case. */
2660 if (*fold_conversions)
2662 if (chrec && op0 == op)
2663 return chrec;
2665 return fold_convert (type, op0);
2669 return chrec_convert (type, op0, NULL);
2672 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2673 and EVOLUTION_LOOP, that were left under a symbolic form.
2675 CHREC is a BIT_NOT_EXPR or a NEGATE_EXPR expression to be instantiated.
2676 Handle ~X as -1 - X.
2677 Handle -X as -1 * X.
2679 CACHE is the cache of already instantiated values.
2681 Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2682 conversions that may wrap in signed/pointer type are folded, as long
2683 as the value of the chrec is preserved. If FOLD_CONVERSIONS is NULL
2684 then we don't do such fold.
2686 SIZE_EXPR is used for computing the size of the expression to be
2687 instantiated, and to stop if it exceeds some limit. */
2689 static tree
2690 instantiate_scev_not (edge instantiate_below,
2691 struct loop *evolution_loop, struct loop *inner_loop,
2692 tree chrec,
2693 enum tree_code code, tree type, tree op,
2694 bool *fold_conversions, int size_expr)
2696 tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
2697 inner_loop, op,
2698 fold_conversions, size_expr);
2700 if (op0 == chrec_dont_know)
2701 return chrec_dont_know;
2703 if (op != op0)
2705 op0 = chrec_convert (type, op0, NULL);
2707 switch (code)
2709 case BIT_NOT_EXPR:
2710 return chrec_fold_minus
2711 (type, fold_convert (type, integer_minus_one_node), op0);
2713 case NEGATE_EXPR:
2714 return chrec_fold_multiply
2715 (type, fold_convert (type, integer_minus_one_node), op0);
2717 default:
2718 gcc_unreachable ();
2722 return chrec ? chrec : fold_build1 (code, type, op0);
2725 /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
2726 and EVOLUTION_LOOP, that were left under a symbolic form.
2728 CHREC is the scalar evolution to instantiate.
2730 CACHE is the cache of already instantiated values.
2732 Variable pointed by FOLD_CONVERSIONS is set to TRUE when the
2733 conversions that may wrap in signed/pointer type are folded, as long
2734 as the value of the chrec is preserved. If FOLD_CONVERSIONS is NULL
2735 then we don't do such fold.
2737 SIZE_EXPR is used for computing the size of the expression to be
2738 instantiated, and to stop if it exceeds some limit. */
2740 static tree
2741 instantiate_scev_r (edge instantiate_below,
2742 struct loop *evolution_loop, struct loop *inner_loop,
2743 tree chrec,
2744 bool *fold_conversions, int size_expr)
2746 /* Give up if the expression is larger than the MAX that we allow. */
2747 if (size_expr++ > PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE))
2748 return chrec_dont_know;
2750 if (chrec == NULL_TREE
2751 || automatically_generated_chrec_p (chrec)
2752 || is_gimple_min_invariant (chrec))
2753 return chrec;
2755 switch (TREE_CODE (chrec))
2757 case SSA_NAME:
2758 return instantiate_scev_name (instantiate_below, evolution_loop,
2759 inner_loop, chrec,
2760 fold_conversions, size_expr);
2762 case POLYNOMIAL_CHREC:
2763 return instantiate_scev_poly (instantiate_below, evolution_loop,
2764 inner_loop, chrec,
2765 fold_conversions, size_expr);
2767 case POINTER_PLUS_EXPR:
2768 case PLUS_EXPR:
2769 case MINUS_EXPR:
2770 case MULT_EXPR:
2771 return instantiate_scev_binary (instantiate_below, evolution_loop,
2772 inner_loop, chrec,
2773 TREE_CODE (chrec), chrec_type (chrec),
2774 TREE_OPERAND (chrec, 0),
2775 TREE_OPERAND (chrec, 1),
2776 fold_conversions, size_expr);
2778 CASE_CONVERT:
2779 return instantiate_scev_convert (instantiate_below, evolution_loop,
2780 inner_loop, chrec,
2781 TREE_TYPE (chrec), TREE_OPERAND (chrec, 0),
2782 fold_conversions, size_expr);
2784 case NEGATE_EXPR:
2785 case BIT_NOT_EXPR:
2786 return instantiate_scev_not (instantiate_below, evolution_loop,
2787 inner_loop, chrec,
2788 TREE_CODE (chrec), TREE_TYPE (chrec),
2789 TREE_OPERAND (chrec, 0),
2790 fold_conversions, size_expr);
2792 case ADDR_EXPR:
2793 if (is_gimple_min_invariant (chrec))
2794 return chrec;
2795 /* Fallthru. */
2796 case SCEV_NOT_KNOWN:
2797 return chrec_dont_know;
2799 case SCEV_KNOWN:
2800 return chrec_known;
2802 default:
2803 if (CONSTANT_CLASS_P (chrec))
2804 return chrec;
2805 return chrec_dont_know;
2809 /* Analyze all the parameters of the chrec that were left under a
2810 symbolic form. INSTANTIATE_BELOW is the basic block that stops the
2811 recursive instantiation of parameters: a parameter is a variable
2812 that is defined in a basic block that dominates INSTANTIATE_BELOW or
2813 a function parameter. */
2815 tree
2816 instantiate_scev (edge instantiate_below, struct loop *evolution_loop,
2817 tree chrec)
2819 tree res;
2821 if (dump_file && (dump_flags & TDF_SCEV))
2823 fprintf (dump_file, "(instantiate_scev \n");
2824 fprintf (dump_file, " (instantiate_below = %d -> %d)\n",
2825 instantiate_below->src->index, instantiate_below->dest->index);
2826 if (evolution_loop)
2827 fprintf (dump_file, " (evolution_loop = %d)\n", evolution_loop->num);
2828 fprintf (dump_file, " (chrec = ");
2829 print_generic_expr (dump_file, chrec);
2830 fprintf (dump_file, ")\n");
2833 bool destr = false;
2834 if (!global_cache)
2836 global_cache = new instantiate_cache_type;
2837 destr = true;
2840 res = instantiate_scev_r (instantiate_below, evolution_loop,
2841 NULL, chrec, NULL, 0);
2843 if (destr)
2845 delete global_cache;
2846 global_cache = NULL;
2849 if (dump_file && (dump_flags & TDF_SCEV))
2851 fprintf (dump_file, " (res = ");
2852 print_generic_expr (dump_file, res);
2853 fprintf (dump_file, "))\n");
2856 return res;
2859 /* Similar to instantiate_parameters, but does not introduce the
2860 evolutions in outer loops for LOOP invariants in CHREC, and does not
2861 care about causing overflows, as long as they do not affect value
2862 of an expression. */
2864 tree
2865 resolve_mixers (struct loop *loop, tree chrec, bool *folded_casts)
2867 bool destr = false;
2868 bool fold_conversions = false;
2869 if (!global_cache)
2871 global_cache = new instantiate_cache_type;
2872 destr = true;
2875 tree ret = instantiate_scev_r (loop_preheader_edge (loop), loop, NULL,
2876 chrec, &fold_conversions, 0);
2878 if (folded_casts && !*folded_casts)
2879 *folded_casts = fold_conversions;
2881 if (destr)
2883 delete global_cache;
2884 global_cache = NULL;
2887 return ret;
2890 /* Entry point for the analysis of the number of iterations pass.
2891 This function tries to safely approximate the number of iterations
2892 the loop will run. When this property is not decidable at compile
2893 time, the result is chrec_dont_know. Otherwise the result is a
2894 scalar or a symbolic parameter. When the number of iterations may
2895 be equal to zero and the property cannot be determined at compile
2896 time, the result is a COND_EXPR that represents in a symbolic form
2897 the conditions under which the number of iterations is not zero.
2899 Example of analysis: suppose that the loop has an exit condition:
2901 "if (b > 49) goto end_loop;"
2903 and that in a previous analysis we have determined that the
2904 variable 'b' has an evolution function:
2906 "EF = {23, +, 5}_2".
2908 When we evaluate the function at the point 5, i.e. the value of the
2909 variable 'b' after 5 iterations in the loop, we have EF (5) = 48,
2910 and EF (6) = 53. In this case the value of 'b' on exit is '53' and
2911 the loop body has been executed 6 times. */
2913 tree
2914 number_of_latch_executions (struct loop *loop)
2916 edge exit;
2917 struct tree_niter_desc niter_desc;
2918 tree may_be_zero;
2919 tree res;
2921 /* Determine whether the number of iterations in loop has already
2922 been computed. */
2923 res = loop->nb_iterations;
2924 if (res)
2925 return res;
2927 may_be_zero = NULL_TREE;
2929 if (dump_file && (dump_flags & TDF_SCEV))
2930 fprintf (dump_file, "(number_of_iterations_in_loop = \n");
2932 res = chrec_dont_know;
2933 exit = single_exit (loop);
2935 if (exit && number_of_iterations_exit (loop, exit, &niter_desc, false))
2937 may_be_zero = niter_desc.may_be_zero;
2938 res = niter_desc.niter;
2941 if (res == chrec_dont_know
2942 || !may_be_zero
2943 || integer_zerop (may_be_zero))
2945 else if (integer_nonzerop (may_be_zero))
2946 res = build_int_cst (TREE_TYPE (res), 0);
2948 else if (COMPARISON_CLASS_P (may_be_zero))
2949 res = fold_build3 (COND_EXPR, TREE_TYPE (res), may_be_zero,
2950 build_int_cst (TREE_TYPE (res), 0), res);
2951 else
2952 res = chrec_dont_know;
2954 if (dump_file && (dump_flags & TDF_SCEV))
2956 fprintf (dump_file, " (set_nb_iterations_in_loop = ");
2957 print_generic_expr (dump_file, res);
2958 fprintf (dump_file, "))\n");
2961 loop->nb_iterations = res;
2962 return res;
2966 /* Counters for the stats. */
2968 struct chrec_stats
2970 unsigned nb_chrecs;
2971 unsigned nb_affine;
2972 unsigned nb_affine_multivar;
2973 unsigned nb_higher_poly;
2974 unsigned nb_chrec_dont_know;
2975 unsigned nb_undetermined;
2978 /* Reset the counters. */
2980 static inline void
2981 reset_chrecs_counters (struct chrec_stats *stats)
2983 stats->nb_chrecs = 0;
2984 stats->nb_affine = 0;
2985 stats->nb_affine_multivar = 0;
2986 stats->nb_higher_poly = 0;
2987 stats->nb_chrec_dont_know = 0;
2988 stats->nb_undetermined = 0;
2991 /* Dump the contents of a CHREC_STATS structure. */
2993 static void
2994 dump_chrecs_stats (FILE *file, struct chrec_stats *stats)
2996 fprintf (file, "\n(\n");
2997 fprintf (file, "-----------------------------------------\n");
2998 fprintf (file, "%d\taffine univariate chrecs\n", stats->nb_affine);
2999 fprintf (file, "%d\taffine multivariate chrecs\n", stats->nb_affine_multivar);
3000 fprintf (file, "%d\tdegree greater than 2 polynomials\n",
3001 stats->nb_higher_poly);
3002 fprintf (file, "%d\tchrec_dont_know chrecs\n", stats->nb_chrec_dont_know);
3003 fprintf (file, "-----------------------------------------\n");
3004 fprintf (file, "%d\ttotal chrecs\n", stats->nb_chrecs);
3005 fprintf (file, "%d\twith undetermined coefficients\n",
3006 stats->nb_undetermined);
3007 fprintf (file, "-----------------------------------------\n");
3008 fprintf (file, "%d\tchrecs in the scev database\n",
3009 (int) scalar_evolution_info->elements ());
3010 fprintf (file, "%d\tsets in the scev database\n", nb_set_scev);
3011 fprintf (file, "%d\tgets in the scev database\n", nb_get_scev);
3012 fprintf (file, "-----------------------------------------\n");
3013 fprintf (file, ")\n\n");
3016 /* Gather statistics about CHREC. */
3018 static void
3019 gather_chrec_stats (tree chrec, struct chrec_stats *stats)
3021 if (dump_file && (dump_flags & TDF_STATS))
3023 fprintf (dump_file, "(classify_chrec ");
3024 print_generic_expr (dump_file, chrec);
3025 fprintf (dump_file, "\n");
3028 stats->nb_chrecs++;
3030 if (chrec == NULL_TREE)
3032 stats->nb_undetermined++;
3033 return;
3036 switch (TREE_CODE (chrec))
3038 case POLYNOMIAL_CHREC:
3039 if (evolution_function_is_affine_p (chrec))
3041 if (dump_file && (dump_flags & TDF_STATS))
3042 fprintf (dump_file, " affine_univariate\n");
3043 stats->nb_affine++;
3045 else if (evolution_function_is_affine_multivariate_p (chrec, 0))
3047 if (dump_file && (dump_flags & TDF_STATS))
3048 fprintf (dump_file, " affine_multivariate\n");
3049 stats->nb_affine_multivar++;
3051 else
3053 if (dump_file && (dump_flags & TDF_STATS))
3054 fprintf (dump_file, " higher_degree_polynomial\n");
3055 stats->nb_higher_poly++;
3058 break;
3060 default:
3061 break;
3064 if (chrec_contains_undetermined (chrec))
3066 if (dump_file && (dump_flags & TDF_STATS))
3067 fprintf (dump_file, " undetermined\n");
3068 stats->nb_undetermined++;
3071 if (dump_file && (dump_flags & TDF_STATS))
3072 fprintf (dump_file, ")\n");
3075 /* Classify the chrecs of the whole database. */
3077 void
3078 gather_stats_on_scev_database (void)
3080 struct chrec_stats stats;
3082 if (!dump_file)
3083 return;
3085 reset_chrecs_counters (&stats);
3087 hash_table<scev_info_hasher>::iterator iter;
3088 scev_info_str *elt;
3089 FOR_EACH_HASH_TABLE_ELEMENT (*scalar_evolution_info, elt, scev_info_str *,
3090 iter)
3091 gather_chrec_stats (elt->chrec, &stats);
3093 dump_chrecs_stats (dump_file, &stats);
3098 /* Initializer. */
3100 static void
3101 initialize_scalar_evolutions_analyzer (void)
3103 /* The elements below are unique. */
3104 if (chrec_dont_know == NULL_TREE)
3106 chrec_not_analyzed_yet = NULL_TREE;
3107 chrec_dont_know = make_node (SCEV_NOT_KNOWN);
3108 chrec_known = make_node (SCEV_KNOWN);
3109 TREE_TYPE (chrec_dont_know) = void_type_node;
3110 TREE_TYPE (chrec_known) = void_type_node;
3114 /* Initialize the analysis of scalar evolutions for LOOPS. */
3116 void
3117 scev_initialize (void)
3119 struct loop *loop;
3121 gcc_assert (! scev_initialized_p ());
3123 scalar_evolution_info = hash_table<scev_info_hasher>::create_ggc (100);
3125 initialize_scalar_evolutions_analyzer ();
3127 FOR_EACH_LOOP (loop, 0)
3129 loop->nb_iterations = NULL_TREE;
3133 /* Return true if SCEV is initialized. */
3135 bool
3136 scev_initialized_p (void)
3138 return scalar_evolution_info != NULL;
3141 /* Cleans up the information cached by the scalar evolutions analysis
3142 in the hash table. */
3144 void
3145 scev_reset_htab (void)
3147 if (!scalar_evolution_info)
3148 return;
3150 scalar_evolution_info->empty ();
3153 /* Cleans up the information cached by the scalar evolutions analysis
3154 in the hash table and in the loop->nb_iterations. */
3156 void
3157 scev_reset (void)
3159 struct loop *loop;
3161 scev_reset_htab ();
3163 FOR_EACH_LOOP (loop, 0)
3165 loop->nb_iterations = NULL_TREE;
3169 /* Return true if the IV calculation in TYPE can overflow based on the knowledge
3170 of the upper bound on the number of iterations of LOOP, the BASE and STEP
3171 of IV.
3173 We do not use information whether TYPE can overflow so it is safe to
3174 use this test even for derived IVs not computed every iteration or
3175 hypotetical IVs to be inserted into code. */
3177 bool
3178 iv_can_overflow_p (struct loop *loop, tree type, tree base, tree step)
3180 widest_int nit;
3181 wide_int base_min, base_max, step_min, step_max, type_min, type_max;
3182 signop sgn = TYPE_SIGN (type);
3184 if (integer_zerop (step))
3185 return false;
3187 if (TREE_CODE (base) == INTEGER_CST)
3188 base_min = base_max = wi::to_wide (base);
3189 else if (TREE_CODE (base) == SSA_NAME
3190 && INTEGRAL_TYPE_P (TREE_TYPE (base))
3191 && get_range_info (base, &base_min, &base_max) == VR_RANGE)
3193 else
3194 return true;
3196 if (TREE_CODE (step) == INTEGER_CST)
3197 step_min = step_max = wi::to_wide (step);
3198 else if (TREE_CODE (step) == SSA_NAME
3199 && INTEGRAL_TYPE_P (TREE_TYPE (step))
3200 && get_range_info (step, &step_min, &step_max) == VR_RANGE)
3202 else
3203 return true;
3205 if (!get_max_loop_iterations (loop, &nit))
3206 return true;
3208 type_min = wi::min_value (type);
3209 type_max = wi::max_value (type);
3211 /* Just sanity check that we don't see values out of the range of the type.
3212 In this case the arithmetics bellow would overflow. */
3213 gcc_checking_assert (wi::ge_p (base_min, type_min, sgn)
3214 && wi::le_p (base_max, type_max, sgn));
3216 /* Account the possible increment in the last ieration. */
3217 wi::overflow_type overflow = wi::OVF_NONE;
3218 nit = wi::add (nit, 1, SIGNED, &overflow);
3219 if (overflow)
3220 return true;
3222 /* NIT is typeless and can exceed the precision of the type. In this case
3223 overflow is always possible, because we know STEP is non-zero. */
3224 if (wi::min_precision (nit, UNSIGNED) > TYPE_PRECISION (type))
3225 return true;
3226 wide_int nit2 = wide_int::from (nit, TYPE_PRECISION (type), UNSIGNED);
3228 /* If step can be positive, check that nit*step <= type_max-base.
3229 This can be done by unsigned arithmetic and we only need to watch overflow
3230 in the multiplication. The right hand side can always be represented in
3231 the type. */
3232 if (sgn == UNSIGNED || !wi::neg_p (step_max))
3234 wi::overflow_type overflow = wi::OVF_NONE;
3235 if (wi::gtu_p (wi::mul (step_max, nit2, UNSIGNED, &overflow),
3236 type_max - base_max)
3237 || overflow)
3238 return true;
3240 /* If step can be negative, check that nit*(-step) <= base_min-type_min. */
3241 if (sgn == SIGNED && wi::neg_p (step_min))
3243 wi::overflow_type overflow, overflow2;
3244 overflow = overflow2 = wi::OVF_NONE;
3245 if (wi::gtu_p (wi::mul (wi::neg (step_min, &overflow2),
3246 nit2, UNSIGNED, &overflow),
3247 base_min - type_min)
3248 || overflow || overflow2)
3249 return true;
3252 return false;
3255 /* Given EV with form of "(type) {inner_base, inner_step}_loop", this
3256 function tries to derive condition under which it can be simplified
3257 into "{(type)inner_base, (type)inner_step}_loop". The condition is
3258 the maximum number that inner iv can iterate. */
3260 static tree
3261 derive_simple_iv_with_niters (tree ev, tree *niters)
3263 if (!CONVERT_EXPR_P (ev))
3264 return ev;
3266 tree inner_ev = TREE_OPERAND (ev, 0);
3267 if (TREE_CODE (inner_ev) != POLYNOMIAL_CHREC)
3268 return ev;
3270 tree init = CHREC_LEFT (inner_ev);
3271 tree step = CHREC_RIGHT (inner_ev);
3272 if (TREE_CODE (init) != INTEGER_CST
3273 || TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
3274 return ev;
3276 tree type = TREE_TYPE (ev);
3277 tree inner_type = TREE_TYPE (inner_ev);
3278 if (TYPE_PRECISION (inner_type) >= TYPE_PRECISION (type))
3279 return ev;
3281 /* Type conversion in "(type) {inner_base, inner_step}_loop" can be
3282 folded only if inner iv won't overflow. We compute the maximum
3283 number the inner iv can iterate before overflowing and return the
3284 simplified affine iv. */
3285 tree delta;
3286 init = fold_convert (type, init);
3287 step = fold_convert (type, step);
3288 ev = build_polynomial_chrec (CHREC_VARIABLE (inner_ev), init, step);
3289 if (tree_int_cst_sign_bit (step))
3291 tree bound = lower_bound_in_type (inner_type, inner_type);
3292 delta = fold_build2 (MINUS_EXPR, type, init, fold_convert (type, bound));
3293 step = fold_build1 (NEGATE_EXPR, type, step);
3295 else
3297 tree bound = upper_bound_in_type (inner_type, inner_type);
3298 delta = fold_build2 (MINUS_EXPR, type, fold_convert (type, bound), init);
3300 *niters = fold_build2 (FLOOR_DIV_EXPR, type, delta, step);
3301 return ev;
3304 /* Checks whether use of OP in USE_LOOP behaves as a simple affine iv with
3305 respect to WRTO_LOOP and returns its base and step in IV if possible
3306 (see analyze_scalar_evolution_in_loop for more details on USE_LOOP
3307 and WRTO_LOOP). If ALLOW_NONCONSTANT_STEP is true, we want step to be
3308 invariant in LOOP. Otherwise we require it to be an integer constant.
3310 IV->no_overflow is set to true if we are sure the iv cannot overflow (e.g.
3311 because it is computed in signed arithmetics). Consequently, adding an
3312 induction variable
3314 for (i = IV->base; ; i += IV->step)
3316 is only safe if IV->no_overflow is false, or TYPE_OVERFLOW_UNDEFINED is
3317 false for the type of the induction variable, or you can prove that i does
3318 not wrap by some other argument. Otherwise, this might introduce undefined
3319 behavior, and
3321 i = iv->base;
3322 for (; ; i = (type) ((unsigned type) i + (unsigned type) iv->step))
3324 must be used instead.
3326 When IV_NITERS is not NULL, this function also checks case in which OP
3327 is a conversion of an inner simple iv of below form:
3329 (outer_type){inner_base, inner_step}_loop.
3331 If type of inner iv has smaller precision than outer_type, it can't be
3332 folded into {(outer_type)inner_base, (outer_type)inner_step}_loop because
3333 the inner iv could overflow/wrap. In this case, we derive a condition
3334 under which the inner iv won't overflow/wrap and do the simplification.
3335 The derived condition normally is the maximum number the inner iv can
3336 iterate, and will be stored in IV_NITERS. This is useful in loop niter
3337 analysis, to derive break conditions when a loop must terminate, when is
3338 infinite. */
3340 bool
3341 simple_iv_with_niters (struct loop *wrto_loop, struct loop *use_loop,
3342 tree op, affine_iv *iv, tree *iv_niters,
3343 bool allow_nonconstant_step)
3345 enum tree_code code;
3346 tree type, ev, base, e;
3347 wide_int extreme;
3348 bool folded_casts;
3350 iv->base = NULL_TREE;
3351 iv->step = NULL_TREE;
3352 iv->no_overflow = false;
3354 type = TREE_TYPE (op);
3355 if (!POINTER_TYPE_P (type)
3356 && !INTEGRAL_TYPE_P (type))
3357 return false;
3359 ev = analyze_scalar_evolution_in_loop (wrto_loop, use_loop, op,
3360 &folded_casts);
3361 if (chrec_contains_undetermined (ev)
3362 || chrec_contains_symbols_defined_in_loop (ev, wrto_loop->num))
3363 return false;
3365 if (tree_does_not_contain_chrecs (ev))
3367 iv->base = ev;
3368 iv->step = build_int_cst (TREE_TYPE (ev), 0);
3369 iv->no_overflow = true;
3370 return true;
3373 /* If we can derive valid scalar evolution with assumptions. */
3374 if (iv_niters && TREE_CODE (ev) != POLYNOMIAL_CHREC)
3375 ev = derive_simple_iv_with_niters (ev, iv_niters);
3377 if (TREE_CODE (ev) != POLYNOMIAL_CHREC)
3378 return false;
3380 if (CHREC_VARIABLE (ev) != (unsigned) wrto_loop->num)
3381 return false;
3383 iv->step = CHREC_RIGHT (ev);
3384 if ((!allow_nonconstant_step && TREE_CODE (iv->step) != INTEGER_CST)
3385 || tree_contains_chrecs (iv->step, NULL))
3386 return false;
3388 iv->base = CHREC_LEFT (ev);
3389 if (tree_contains_chrecs (iv->base, NULL))
3390 return false;
3392 iv->no_overflow = !folded_casts && nowrap_type_p (type);
3394 if (!iv->no_overflow
3395 && !iv_can_overflow_p (wrto_loop, type, iv->base, iv->step))
3396 iv->no_overflow = true;
3398 /* Try to simplify iv base:
3400 (signed T) ((unsigned T)base + step) ;; TREE_TYPE (base) == signed T
3401 == (signed T)(unsigned T)base + step
3402 == base + step
3404 If we can prove operation (base + step) doesn't overflow or underflow.
3405 Specifically, we try to prove below conditions are satisfied:
3407 base <= UPPER_BOUND (type) - step ;;step > 0
3408 base >= LOWER_BOUND (type) - step ;;step < 0
3410 This is done by proving the reverse conditions are false using loop's
3411 initial conditions.
3413 The is necessary to make loop niter, or iv overflow analysis easier
3414 for below example:
3416 int foo (int *a, signed char s, signed char l)
3418 signed char i;
3419 for (i = s; i < l; i++)
3420 a[i] = 0;
3421 return 0;
3424 Note variable I is firstly converted to type unsigned char, incremented,
3425 then converted back to type signed char. */
3427 if (wrto_loop->num != use_loop->num)
3428 return true;
3430 if (!CONVERT_EXPR_P (iv->base) || TREE_CODE (iv->step) != INTEGER_CST)
3431 return true;
3433 type = TREE_TYPE (iv->base);
3434 e = TREE_OPERAND (iv->base, 0);
3435 if (TREE_CODE (e) != PLUS_EXPR
3436 || TREE_CODE (TREE_OPERAND (e, 1)) != INTEGER_CST
3437 || !tree_int_cst_equal (iv->step,
3438 fold_convert (type, TREE_OPERAND (e, 1))))
3439 return true;
3440 e = TREE_OPERAND (e, 0);
3441 if (!CONVERT_EXPR_P (e))
3442 return true;
3443 base = TREE_OPERAND (e, 0);
3444 if (!useless_type_conversion_p (type, TREE_TYPE (base)))
3445 return true;
3447 if (tree_int_cst_sign_bit (iv->step))
3449 code = LT_EXPR;
3450 extreme = wi::min_value (type);
3452 else
3454 code = GT_EXPR;
3455 extreme = wi::max_value (type);
3457 wi::overflow_type overflow = wi::OVF_NONE;
3458 extreme = wi::sub (extreme, wi::to_wide (iv->step),
3459 TYPE_SIGN (type), &overflow);
3460 if (overflow)
3461 return true;
3462 e = fold_build2 (code, boolean_type_node, base,
3463 wide_int_to_tree (type, extreme));
3464 e = simplify_using_initial_conditions (use_loop, e);
3465 if (!integer_zerop (e))
3466 return true;
3468 if (POINTER_TYPE_P (TREE_TYPE (base)))
3469 code = POINTER_PLUS_EXPR;
3470 else
3471 code = PLUS_EXPR;
3473 iv->base = fold_build2 (code, TREE_TYPE (base), base, iv->step);
3474 return true;
3477 /* Like simple_iv_with_niters, but return TRUE when OP behaves as a simple
3478 affine iv unconditionally. */
3480 bool
3481 simple_iv (struct loop *wrto_loop, struct loop *use_loop, tree op,
3482 affine_iv *iv, bool allow_nonconstant_step)
3484 return simple_iv_with_niters (wrto_loop, use_loop, op, iv,
3485 NULL, allow_nonconstant_step);
3488 /* Finalize the scalar evolution analysis. */
3490 void
3491 scev_finalize (void)
3493 if (!scalar_evolution_info)
3494 return;
3495 scalar_evolution_info->empty ();
3496 scalar_evolution_info = NULL;
3497 free_numbers_of_iterations_estimates (cfun);
3500 /* Returns true if the expression EXPR is considered to be too expensive
3501 for scev_const_prop. */
3503 bool
3504 expression_expensive_p (tree expr)
3506 enum tree_code code;
3508 if (is_gimple_val (expr))
3509 return false;
3511 code = TREE_CODE (expr);
3512 if (code == TRUNC_DIV_EXPR
3513 || code == CEIL_DIV_EXPR
3514 || code == FLOOR_DIV_EXPR
3515 || code == ROUND_DIV_EXPR
3516 || code == TRUNC_MOD_EXPR
3517 || code == CEIL_MOD_EXPR
3518 || code == FLOOR_MOD_EXPR
3519 || code == ROUND_MOD_EXPR
3520 || code == EXACT_DIV_EXPR)
3522 /* Division by power of two is usually cheap, so we allow it.
3523 Forbid anything else. */
3524 if (!integer_pow2p (TREE_OPERAND (expr, 1)))
3525 return true;
3528 if (code == CALL_EXPR)
3530 tree arg;
3531 call_expr_arg_iterator iter;
3532 /* Even though is_inexpensive_builtin might say true, we will get a
3533 library call for popcount when backend does not have an instruction
3534 to do so. We consider this to be expenseive and generate
3535 __builtin_popcount only when backend defines it. */
3536 combined_fn cfn = get_call_combined_fn (expr);
3537 switch (cfn)
3539 CASE_CFN_POPCOUNT:
3540 /* Check if opcode for popcount is available in the mode required. */
3541 if (optab_handler (popcount_optab,
3542 TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (expr, 0))))
3543 == CODE_FOR_nothing)
3545 machine_mode mode;
3546 mode = TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (expr, 0)));
3547 scalar_int_mode int_mode;
3549 /* If the mode is of 2 * UNITS_PER_WORD size, we can handle
3550 double-word popcount by emitting two single-word popcount
3551 instructions. */
3552 if (is_a <scalar_int_mode> (mode, &int_mode)
3553 && GET_MODE_SIZE (int_mode) == 2 * UNITS_PER_WORD
3554 && (optab_handler (popcount_optab, word_mode)
3555 != CODE_FOR_nothing))
3556 break;
3557 return true;
3559 default:
3560 break;
3563 if (!is_inexpensive_builtin (get_callee_fndecl (expr)))
3564 return true;
3565 FOR_EACH_CALL_EXPR_ARG (arg, iter, expr)
3566 if (expression_expensive_p (arg))
3567 return true;
3568 return false;
3571 if (code == COND_EXPR)
3572 return (expression_expensive_p (TREE_OPERAND (expr, 0))
3573 || (EXPR_P (TREE_OPERAND (expr, 1))
3574 && EXPR_P (TREE_OPERAND (expr, 2)))
3575 /* If either branch has side effects or could trap. */
3576 || TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3577 || generic_expr_could_trap_p (TREE_OPERAND (expr, 1))
3578 || TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0))
3579 || generic_expr_could_trap_p (TREE_OPERAND (expr, 0))
3580 || expression_expensive_p (TREE_OPERAND (expr, 1))
3581 || expression_expensive_p (TREE_OPERAND (expr, 2)));
3583 switch (TREE_CODE_CLASS (code))
3585 case tcc_binary:
3586 case tcc_comparison:
3587 if (expression_expensive_p (TREE_OPERAND (expr, 1)))
3588 return true;
3590 /* Fallthru. */
3591 case tcc_unary:
3592 return expression_expensive_p (TREE_OPERAND (expr, 0));
3594 default:
3595 return true;
3599 /* Do final value replacement for LOOP, return true if we did anything. */
3601 bool
3602 final_value_replacement_loop (struct loop *loop)
3604 /* If we do not know exact number of iterations of the loop, we cannot
3605 replace the final value. */
3606 edge exit = single_exit (loop);
3607 if (!exit)
3608 return false;
3610 tree niter = number_of_latch_executions (loop);
3611 if (niter == chrec_dont_know)
3612 return false;
3614 /* Ensure that it is possible to insert new statements somewhere. */
3615 if (!single_pred_p (exit->dest))
3616 split_loop_exit_edge (exit);
3618 /* Set stmt insertion pointer. All stmts are inserted before this point. */
3619 gimple_stmt_iterator gsi = gsi_after_labels (exit->dest);
3621 struct loop *ex_loop
3622 = superloop_at_depth (loop,
3623 loop_depth (exit->dest->loop_father) + 1);
3625 bool any = false;
3626 gphi_iterator psi;
3627 for (psi = gsi_start_phis (exit->dest); !gsi_end_p (psi); )
3629 gphi *phi = psi.phi ();
3630 tree rslt = PHI_RESULT (phi);
3631 tree def = PHI_ARG_DEF_FROM_EDGE (phi, exit);
3632 if (virtual_operand_p (def))
3634 gsi_next (&psi);
3635 continue;
3638 if (!POINTER_TYPE_P (TREE_TYPE (def))
3639 && !INTEGRAL_TYPE_P (TREE_TYPE (def)))
3641 gsi_next (&psi);
3642 continue;
3645 bool folded_casts;
3646 def = analyze_scalar_evolution_in_loop (ex_loop, loop, def,
3647 &folded_casts);
3648 def = compute_overall_effect_of_inner_loop (ex_loop, def);
3649 if (!tree_does_not_contain_chrecs (def)
3650 || chrec_contains_symbols_defined_in_loop (def, ex_loop->num)
3651 /* Moving the computation from the loop may prolong life range
3652 of some ssa names, which may cause problems if they appear
3653 on abnormal edges. */
3654 || contains_abnormal_ssa_name_p (def)
3655 /* Do not emit expensive expressions. The rationale is that
3656 when someone writes a code like
3658 while (n > 45) n -= 45;
3660 he probably knows that n is not large, and does not want it
3661 to be turned into n %= 45. */
3662 || expression_expensive_p (def))
3664 if (dump_file && (dump_flags & TDF_DETAILS))
3666 fprintf (dump_file, "not replacing:\n ");
3667 print_gimple_stmt (dump_file, phi, 0);
3668 fprintf (dump_file, "\n");
3670 gsi_next (&psi);
3671 continue;
3674 /* Eliminate the PHI node and replace it by a computation outside
3675 the loop. */
3676 if (dump_file)
3678 fprintf (dump_file, "\nfinal value replacement:\n ");
3679 print_gimple_stmt (dump_file, phi, 0);
3680 fprintf (dump_file, " with expr: ");
3681 print_generic_expr (dump_file, def);
3683 any = true;
3684 def = unshare_expr (def);
3685 remove_phi_node (&psi, false);
3687 /* If def's type has undefined overflow and there were folded
3688 casts, rewrite all stmts added for def into arithmetics
3689 with defined overflow behavior. */
3690 if (folded_casts && ANY_INTEGRAL_TYPE_P (TREE_TYPE (def))
3691 && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (def)))
3693 gimple_seq stmts;
3694 gimple_stmt_iterator gsi2;
3695 def = force_gimple_operand (def, &stmts, true, NULL_TREE);
3696 gsi2 = gsi_start (stmts);
3697 while (!gsi_end_p (gsi2))
3699 gimple *stmt = gsi_stmt (gsi2);
3700 gimple_stmt_iterator gsi3 = gsi2;
3701 gsi_next (&gsi2);
3702 gsi_remove (&gsi3, false);
3703 if (is_gimple_assign (stmt)
3704 && arith_code_with_undefined_signed_overflow
3705 (gimple_assign_rhs_code (stmt)))
3706 gsi_insert_seq_before (&gsi,
3707 rewrite_to_defined_overflow (stmt),
3708 GSI_SAME_STMT);
3709 else
3710 gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
3713 else
3714 def = force_gimple_operand_gsi (&gsi, def, false, NULL_TREE,
3715 true, GSI_SAME_STMT);
3717 gassign *ass = gimple_build_assign (rslt, def);
3718 gsi_insert_before (&gsi, ass, GSI_SAME_STMT);
3719 if (dump_file)
3721 fprintf (dump_file, "\n final stmt:\n ");
3722 print_gimple_stmt (dump_file, ass, 0);
3723 fprintf (dump_file, "\n");
3727 return any;
3730 #include "gt-tree-scalar-evolution.h"