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