]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cfgloop.c
cfgloop.c (record_niter_bound): Record likely upper bounds.
[thirdparty/gcc.git] / gcc / cfgloop.c
CommitLineData
402209ff 1/* Natural loop discovery code for GNU compiler.
818ab71a 2 Copyright (C) 2000-2016 Free Software Foundation, Inc.
402209ff
JH
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
9dcd6f09 8Software Foundation; either version 3, or (at your option) any later
402209ff
JH
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
9dcd6f09
NC
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
402209ff
JH
19
20#include "config.h"
21#include "system.h"
4977bab6 22#include "coretypes.h"
c7131fb2 23#include "backend.h"
957060b5 24#include "rtl.h"
c7131fb2
AM
25#include "tree.h"
26#include "gimple.h"
957060b5
AM
27#include "cfghooks.h"
28#include "gimple-ssa.h"
29#include "diagnostic-core.h"
60393bbc 30#include "cfganal.h"
3d436d2a 31#include "cfgloop.h"
5be5c238 32#include "gimple-iterator.h"
7ee2468b 33#include "dumpfile.h"
f470c378 34
d73be268 35static void flow_loops_cfg_dump (FILE *);
402209ff
JH
36\f
37/* Dump loop related CFG information. */
38
39static void
d73be268 40flow_loops_cfg_dump (FILE *file)
402209ff 41{
e0082a72 42 basic_block bb;
402209ff 43
d73be268 44 if (!file)
402209ff
JH
45 return;
46
11cd3bed 47 FOR_EACH_BB_FN (bb, cfun)
402209ff
JH
48 {
49 edge succ;
628f6a4e 50 edge_iterator ei;
402209ff 51
e0082a72 52 fprintf (file, ";; %d succs { ", bb->index);
628f6a4e 53 FOR_EACH_EDGE (succ, ei, bb->succs)
0b17ab2f 54 fprintf (file, "%d ", succ->dest->index);
2ecfd709 55 fprintf (file, "}\n");
402209ff 56 }
402209ff
JH
57}
58
da7d8304 59/* Return nonzero if the nodes of LOOP are a subset of OUTER. */
402209ff 60
2ecfd709 61bool
d329e058 62flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
402209ff 63{
9ba025a2
ZD
64 unsigned odepth = loop_depth (outer);
65
66 return (loop_depth (loop) > odepth
9771b263 67 && (*loop->superloops)[odepth] == outer);
402209ff
JH
68}
69
1ad03593
SP
70/* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
71 loops within LOOP. */
a7e5372d
ZD
72
73struct loop *
74superloop_at_depth (struct loop *loop, unsigned depth)
75{
9ba025a2
ZD
76 unsigned ldepth = loop_depth (loop);
77
78 gcc_assert (depth <= ldepth);
a7e5372d 79
9ba025a2 80 if (depth == ldepth)
a7e5372d
ZD
81 return loop;
82
9771b263 83 return (*loop->superloops)[depth];
a7e5372d
ZD
84}
85
89f8f30f
ZD
86/* Returns the list of the latch edges of LOOP. */
87
9771b263 88static vec<edge>
89f8f30f
ZD
89get_loop_latch_edges (const struct loop *loop)
90{
91 edge_iterator ei;
92 edge e;
6e1aa848 93 vec<edge> ret = vNULL;
89f8f30f
ZD
94
95 FOR_EACH_EDGE (e, ei, loop->header->preds)
96 {
97 if (dominated_by_p (CDI_DOMINATORS, e->src, loop->header))
9771b263 98 ret.safe_push (e);
89f8f30f
ZD
99 }
100
101 return ret;
102}
103
402209ff
JH
104/* Dump the loop information specified by LOOP to the stream FILE
105 using auxiliary dump callback function LOOP_DUMP_AUX if non null. */
106
107void
d329e058
AJ
108flow_loop_dump (const struct loop *loop, FILE *file,
109 void (*loop_dump_aux) (const struct loop *, FILE *, int),
110 int verbose)
402209ff 111{
2ecfd709 112 basic_block *bbs;
3d436d2a 113 unsigned i;
9771b263 114 vec<edge> latches;
89f8f30f 115 edge e;
2ecfd709 116
402209ff
JH
117 if (! loop || ! loop->header)
118 return;
119
7490e6c4 120 fprintf (file, ";;\n;; Loop %d\n", loop->num);
402209ff 121
89f8f30f
ZD
122 fprintf (file, ";; header %d, ", loop->header->index);
123 if (loop->latch)
124 fprintf (file, "latch %d\n", loop->latch->index);
125 else
126 {
127 fprintf (file, "multiple latches:");
128 latches = get_loop_latch_edges (loop);
9771b263 129 FOR_EACH_VEC_ELT (latches, i, e)
89f8f30f 130 fprintf (file, " %d", e->src->index);
9771b263 131 latches.release ();
89f8f30f
ZD
132 fprintf (file, "\n");
133 }
134
99f8a411 135 fprintf (file, ";; depth %d, outer %ld\n",
9ba025a2
ZD
136 loop_depth (loop), (long) (loop_outer (loop)
137 ? loop_outer (loop)->num : -1));
402209ff 138
2ecfd709
ZD
139 fprintf (file, ";; nodes:");
140 bbs = get_loop_body (loop);
141 for (i = 0; i < loop->num_nodes; i++)
142 fprintf (file, " %d", bbs[i]->index);
143 free (bbs);
144 fprintf (file, "\n");
5f0d2358 145
402209ff
JH
146 if (loop_dump_aux)
147 loop_dump_aux (loop, file, verbose);
148}
149
d73be268 150/* Dump the loop information about loops to the stream FILE,
402209ff
JH
151 using auxiliary dump callback function LOOP_DUMP_AUX if non null. */
152
153void
d73be268 154flow_loops_dump (FILE *file, void (*loop_dump_aux) (const struct loop *, FILE *, int), int verbose)
402209ff 155{
42fd6772 156 struct loop *loop;
402209ff 157
d73be268 158 if (!current_loops || ! file)
402209ff
JH
159 return;
160
0fc822d0 161 fprintf (file, ";; %d loops found\n", number_of_loops (cfun));
2ecfd709 162
f0bd40b1 163 FOR_EACH_LOOP (loop, LI_INCLUDE_ROOT)
402209ff 164 {
2ecfd709 165 flow_loop_dump (loop, file, loop_dump_aux, verbose);
402209ff
JH
166 }
167
168 if (verbose)
d73be268 169 flow_loops_cfg_dump (file);
402209ff
JH
170}
171
2ecfd709 172/* Free data allocated for LOOP. */
9e2f83a5 173
35b07080 174void
d329e058 175flow_loop_free (struct loop *loop)
2ecfd709 176{
6270df4c
ZD
177 struct loop_exit *exit, *next;
178
9771b263 179 vec_free (loop->superloops);
6270df4c
ZD
180
181 /* Break the list of the loop exit records. They will be freed when the
182 corresponding edge is rescanned or removed, and this avoids
183 accessing the (already released) head of the list stored in the
184 loop structure. */
9e2f83a5 185 for (exit = loop->exits->next; exit != loop->exits; exit = next)
6270df4c
ZD
186 {
187 next = exit->next;
188 exit->next = exit;
189 exit->prev = exit;
190 }
9e2f83a5
ZD
191
192 ggc_free (loop->exits);
193 ggc_free (loop);
2ecfd709
ZD
194}
195
402209ff
JH
196/* Free all the memory allocated for LOOPS. */
197
198void
d329e058 199flow_loops_free (struct loops *loops)
402209ff 200{
42fd6772 201 if (loops->larray)
402209ff 202 {
3d436d2a 203 unsigned i;
42fd6772 204 loop_p loop;
402209ff
JH
205
206 /* Free the loop descriptors. */
9771b263 207 FOR_EACH_VEC_SAFE_ELT (loops->larray, i, loop)
402209ff 208 {
2ecfd709
ZD
209 if (!loop)
210 continue;
211
212 flow_loop_free (loop);
402209ff 213 }
5f0d2358 214
9771b263 215 vec_free (loops->larray);
402209ff
JH
216 }
217}
218
2ecfd709
ZD
219/* Find the nodes contained within the LOOP with header HEADER.
220 Return the number of nodes within the loop. */
402209ff 221
2b271002 222int
d329e058 223flow_loop_nodes_find (basic_block header, struct loop *loop)
402209ff 224{
6e1aa848 225 vec<basic_block> stack = vNULL;
2ecfd709 226 int num_nodes = 1;
89f8f30f
ZD
227 edge latch;
228 edge_iterator latch_ei;
402209ff 229
2ecfd709 230 header->loop_father = loop;
402209ff 231
89f8f30f 232 FOR_EACH_EDGE (latch, latch_ei, loop->header->preds)
402209ff 233 {
89f8f30f
ZD
234 if (latch->src->loop_father == loop
235 || !dominated_by_p (CDI_DOMINATORS, latch->src, loop->header))
236 continue;
237
402209ff 238 num_nodes++;
9771b263 239 stack.safe_push (latch->src);
89f8f30f 240 latch->src->loop_father = loop;
d329e058 241
9771b263 242 while (!stack.is_empty ())
402209ff 243 {
2ecfd709
ZD
244 basic_block node;
245 edge e;
628f6a4e 246 edge_iterator ei;
402209ff 247
9771b263 248 node = stack.pop ();
d329e058 249
628f6a4e 250 FOR_EACH_EDGE (e, ei, node->preds)
402209ff 251 {
2ecfd709
ZD
252 basic_block ancestor = e->src;
253
89f8f30f 254 if (ancestor->loop_father != loop)
2ecfd709
ZD
255 {
256 ancestor->loop_father = loop;
2ecfd709 257 num_nodes++;
9771b263 258 stack.safe_push (ancestor);
2ecfd709 259 }
402209ff
JH
260 }
261 }
262 }
9771b263 263 stack.release ();
89f8f30f 264
402209ff
JH
265 return num_nodes;
266}
267
9ba025a2
ZD
268/* Records the vector of superloops of the loop LOOP, whose immediate
269 superloop is FATHER. */
270
35b07080 271static void
9ba025a2 272establish_preds (struct loop *loop, struct loop *father)
35b07080 273{
9ba025a2
ZD
274 loop_p ploop;
275 unsigned depth = loop_depth (father) + 1;
276 unsigned i;
a310245f 277
9771b263
DN
278 loop->superloops = 0;
279 vec_alloc (loop->superloops, depth);
280 FOR_EACH_VEC_SAFE_ELT (father->superloops, i, ploop)
281 loop->superloops->quick_push (ploop);
282 loop->superloops->quick_push (father);
35b07080
ZD
283
284 for (ploop = loop->inner; ploop; ploop = ploop->next)
9ba025a2 285 establish_preds (ploop, loop);
35b07080
ZD
286}
287
2ecfd709 288/* Add LOOP to the loop hierarchy tree where FATHER is father of the
35b07080
ZD
289 added loop. If LOOP has some children, take care of that their
290 pred field will be initialized correctly. */
402209ff 291
2ecfd709 292void
d329e058 293flow_loop_tree_node_add (struct loop *father, struct loop *loop)
402209ff 294{
2ecfd709
ZD
295 loop->next = father->inner;
296 father->inner = loop;
2ecfd709 297
9ba025a2 298 establish_preds (loop, father);
402209ff
JH
299}
300
2ecfd709 301/* Remove LOOP from the loop hierarchy tree. */
402209ff 302
2ecfd709 303void
d329e058 304flow_loop_tree_node_remove (struct loop *loop)
402209ff 305{
2ecfd709 306 struct loop *prev, *father;
402209ff 307
9ba025a2 308 father = loop_outer (loop);
402209ff 309
2ecfd709
ZD
310 /* Remove loop from the list of sons. */
311 if (father->inner == loop)
312 father->inner = loop->next;
313 else
314 {
9ba025a2
ZD
315 for (prev = father->inner; prev->next != loop; prev = prev->next)
316 continue;
2ecfd709
ZD
317 prev->next = loop->next;
318 }
402209ff 319
9771b263 320 loop->superloops = NULL;
402209ff
JH
321}
322
6270df4c
ZD
323/* Allocates and returns new loop structure. */
324
325struct loop *
326alloc_loop (void)
327{
766090c2 328 struct loop *loop = ggc_cleared_alloc<struct loop> ();
9e2f83a5 329
766090c2 330 loop->exits = ggc_cleared_alloc<loop_exit> ();
9e2f83a5 331 loop->exits->next = loop->exits->prev = loop->exits;
204b560f 332 loop->can_be_parallel = false;
807e902e
KZ
333 loop->nb_iterations_upper_bound = 0;
334 loop->nb_iterations_estimate = 0;
6270df4c
ZD
335 return loop;
336}
337
4ed88ee3
ZD
338/* Initializes loops structure LOOPS, reserving place for NUM_LOOPS loops
339 (including the root of the loop tree). */
340
dd366ec3
RB
341void
342init_loops_structure (struct function *fn,
343 struct loops *loops, unsigned num_loops)
4ed88ee3
ZD
344{
345 struct loop *root;
346
347 memset (loops, 0, sizeof *loops);
9771b263 348 vec_alloc (loops->larray, num_loops);
4ed88ee3
ZD
349
350 /* Dummy loop containing whole function. */
351 root = alloc_loop ();
0cae8d31 352 root->num_nodes = n_basic_blocks_for_fn (fn);
fefa31b5
DM
353 root->latch = EXIT_BLOCK_PTR_FOR_FN (fn);
354 root->header = ENTRY_BLOCK_PTR_FOR_FN (fn);
355 ENTRY_BLOCK_PTR_FOR_FN (fn)->loop_father = root;
356 EXIT_BLOCK_PTR_FOR_FN (fn)->loop_father = root;
4ed88ee3 357
9771b263 358 loops->larray->quick_push (root);
4ed88ee3
ZD
359 loops->tree_root = root;
360}
361
0375167b
RB
362/* Returns whether HEADER is a loop header. */
363
364bool
365bb_loop_header_p (basic_block header)
366{
367 edge_iterator ei;
368 edge e;
369
370 /* If we have an abnormal predecessor, do not consider the
371 loop (not worth the problems). */
372 if (bb_has_abnormal_pred (header))
373 return false;
374
375 /* Look for back edges where a predecessor is dominated
376 by this block. A natural loop has a single entry
377 node (header) that dominates all the nodes in the
378 loop. It also has single back edge to the header
379 from a latch node. */
380 FOR_EACH_EDGE (e, ei, header->preds)
381 {
382 basic_block latch = e->src;
fefa31b5 383 if (latch != ENTRY_BLOCK_PTR_FOR_FN (cfun)
0375167b
RB
384 && dominated_by_p (CDI_DOMINATORS, latch, header))
385 return true;
386 }
387
388 return false;
389}
390
5f0d2358 391/* Find all the natural loops in the function and save in LOOPS structure and
391886c8 392 recalculate loop_father information in basic block structures.
0375167b
RB
393 If LOOPS is non-NULL then the loop structures for already recorded loops
394 will be re-used and their number will not change. We assume that no
395 stale loops exist in LOOPS.
396 When LOOPS is NULL it is allocated and re-built from scratch.
397 Return the built LOOPS structure. */
402209ff 398
0375167b 399struct loops *
70388d94 400flow_loops_find (struct loops *loops)
402209ff 401{
0375167b 402 bool from_scratch = (loops == NULL);
402209ff 403 int *rc_order;
0375167b
RB
404 int b;
405 unsigned i;
402209ff 406
4ed88ee3
ZD
407 /* Ensure that the dominators are computed. */
408 calculate_dominance_info (CDI_DOMINATORS);
402209ff 409
0375167b 410 if (!loops)
4ed88ee3 411 {
766090c2 412 loops = ggc_cleared_alloc<struct loops> ();
dd366ec3 413 init_loops_structure (cfun, loops, 1);
4ed88ee3 414 }
402209ff 415
0375167b
RB
416 /* Ensure that loop exits were released. */
417 gcc_assert (loops->exits == NULL);
402209ff 418
0375167b
RB
419 /* Taking care of this degenerate case makes the rest of
420 this code simpler. */
0cae8d31 421 if (n_basic_blocks_for_fn (cfun) == NUM_FIXED_BLOCKS)
0375167b 422 return loops;
2ecfd709 423
0375167b 424 /* The root loop node contains all basic-blocks. */
0cae8d31 425 loops->tree_root->num_nodes = n_basic_blocks_for_fn (cfun);
d329e058 426
0375167b
RB
427 /* Compute depth first search order of the CFG so that outer
428 natural loops will be found before inner natural loops. */
0cae8d31 429 rc_order = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
0375167b 430 pre_and_rev_post_order_compute (NULL, rc_order, false);
16f2b86a 431
0375167b
RB
432 /* Gather all loop headers in reverse completion order and allocate
433 loop structures for loops that are not already present. */
ef062b13 434 auto_vec<loop_p> larray (loops->larray->length ());
0cae8d31 435 for (b = 0; b < n_basic_blocks_for_fn (cfun) - NUM_FIXED_BLOCKS; b++)
0375167b 436 {
06e28de2 437 basic_block header = BASIC_BLOCK_FOR_FN (cfun, rc_order[b]);
0375167b 438 if (bb_loop_header_p (header))
402209ff 439 {
0375167b 440 struct loop *loop;
2ecfd709 441
0375167b
RB
442 /* The current active loop tree has valid loop-fathers for
443 header blocks. */
444 if (!from_scratch
445 && header->loop_father->header == header)
2ecfd709 446 {
0375167b
RB
447 loop = header->loop_father;
448 /* If we found an existing loop remove it from the
449 loop tree. It is going to be inserted again
450 below. */
451 flow_loop_tree_node_remove (loop);
2ecfd709 452 }
0375167b
RB
453 else
454 {
455 /* Otherwise allocate a new loop structure for the loop. */
456 loop = alloc_loop ();
457 /* ??? We could re-use unused loop slots here. */
458 loop->num = loops->larray->length ();
459 vec_safe_push (loops->larray, loop);
460 loop->header = header;
461
462 if (!from_scratch
463 && dump_file && (dump_flags & TDF_DETAILS))
464 fprintf (dump_file, "flow_loops_find: discovered new "
465 "loop %d with header %d\n",
466 loop->num, header->index);
467 }
6aaf596b
RB
468 /* Reset latch, we recompute it below. */
469 loop->latch = NULL;
0375167b 470 larray.safe_push (loop);
402209ff 471 }
402209ff 472
0375167b
RB
473 /* Make blocks part of the loop root node at start. */
474 header->loop_father = loops->tree_root;
475 }
2ecfd709 476
0375167b 477 free (rc_order);
2ecfd709 478
0375167b
RB
479 /* Now iterate over the loops found, insert them into the loop tree
480 and assign basic-block ownership. */
481 for (i = 0; i < larray.length (); ++i)
402209ff 482 {
0375167b
RB
483 struct loop *loop = larray[i];
484 basic_block header = loop->header;
09c5c12e
TV
485 edge_iterator ei;
486 edge e;
402209ff 487
0375167b
RB
488 flow_loop_tree_node_add (header->loop_father, loop);
489 loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
09c5c12e
TV
490
491 /* Look for the latch for this header block, if it has just a
492 single one. */
493 FOR_EACH_EDGE (e, ei, header->preds)
494 {
495 basic_block latch = e->src;
496
497 if (flow_bb_inside_loop_p (loop, latch))
498 {
499 if (loop->latch != NULL)
500 {
501 /* More than one latch edge. */
502 loop->latch = NULL;
503 break;
504 }
505 loop->latch = latch;
506 }
507 }
2ecfd709 508 }
3d436d2a 509
0375167b 510 return loops;
402209ff
JH
511}
512
89f8f30f
ZD
513/* Ratio of frequencies of edges so that one of more latch edges is
514 considered to belong to inner loop with same header. */
515#define HEAVY_EDGE_RATIO 8
516
517/* Minimum number of samples for that we apply
518 find_subloop_latch_edge_by_profile heuristics. */
519#define HEAVY_EDGE_MIN_SAMPLES 10
520
521/* If the profile info is available, finds an edge in LATCHES that much more
522 frequent than the remaining edges. Returns such an edge, or NULL if we do
523 not find one.
524
525 We do not use guessed profile here, only the measured one. The guessed
526 profile is usually too flat and unreliable for this (and it is mostly based
527 on the loop structure of the program, so it does not make much sense to
528 derive the loop structure from it). */
b8698a0f 529
89f8f30f 530static edge
9771b263 531find_subloop_latch_edge_by_profile (vec<edge> latches)
89f8f30f
ZD
532{
533 unsigned i;
534 edge e, me = NULL;
535 gcov_type mcount = 0, tcount = 0;
536
9771b263 537 FOR_EACH_VEC_ELT (latches, i, e)
89f8f30f
ZD
538 {
539 if (e->count > mcount)
540 {
541 me = e;
542 mcount = e->count;
543 }
544 tcount += e->count;
545 }
546
547 if (tcount < HEAVY_EDGE_MIN_SAMPLES
548 || (tcount - mcount) * HEAVY_EDGE_RATIO > tcount)
549 return NULL;
550
551 if (dump_file)
552 fprintf (dump_file,
553 "Found latch edge %d -> %d using profile information.\n",
554 me->src->index, me->dest->index);
555 return me;
556}
557
558/* Among LATCHES, guesses a latch edge of LOOP corresponding to subloop, based
559 on the structure of induction variables. Returns this edge, or NULL if we
560 do not find any.
561
562 We are quite conservative, and look just for an obvious simple innermost
563 loop (which is the case where we would lose the most performance by not
564 disambiguating the loop). More precisely, we look for the following
565 situation: The source of the chosen latch edge dominates sources of all
566 the other latch edges. Additionally, the header does not contain a phi node
567 such that the argument from the chosen edge is equal to the argument from
568 another edge. */
569
570static edge
9771b263 571find_subloop_latch_edge_by_ivs (struct loop *loop ATTRIBUTE_UNUSED, vec<edge> latches)
89f8f30f 572{
9771b263 573 edge e, latch = latches[0];
89f8f30f 574 unsigned i;
538dd0b7
DM
575 gphi *phi;
576 gphi_iterator psi;
726a989a 577 tree lop;
89f8f30f
ZD
578 basic_block bb;
579
580 /* Find the candidate for the latch edge. */
9771b263 581 for (i = 1; latches.iterate (i, &e); i++)
89f8f30f
ZD
582 if (dominated_by_p (CDI_DOMINATORS, latch->src, e->src))
583 latch = e;
584
585 /* Verify that it dominates all the latch edges. */
9771b263 586 FOR_EACH_VEC_ELT (latches, i, e)
89f8f30f
ZD
587 if (!dominated_by_p (CDI_DOMINATORS, e->src, latch->src))
588 return NULL;
589
590 /* Check for a phi node that would deny that this is a latch edge of
591 a subloop. */
726a989a 592 for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi))
89f8f30f 593 {
538dd0b7 594 phi = psi.phi ();
89f8f30f
ZD
595 lop = PHI_ARG_DEF_FROM_EDGE (phi, latch);
596
597 /* Ignore the values that are not changed inside the subloop. */
598 if (TREE_CODE (lop) != SSA_NAME
599 || SSA_NAME_DEF_STMT (lop) == phi)
600 continue;
726a989a 601 bb = gimple_bb (SSA_NAME_DEF_STMT (lop));
89f8f30f
ZD
602 if (!bb || !flow_bb_inside_loop_p (loop, bb))
603 continue;
604
9771b263 605 FOR_EACH_VEC_ELT (latches, i, e)
89f8f30f
ZD
606 if (e != latch
607 && PHI_ARG_DEF_FROM_EDGE (phi, e) == lop)
608 return NULL;
609 }
610
611 if (dump_file)
612 fprintf (dump_file,
613 "Found latch edge %d -> %d using iv structure.\n",
614 latch->src->index, latch->dest->index);
615 return latch;
616}
617
618/* If we can determine that one of the several latch edges of LOOP behaves
619 as a latch edge of a separate subloop, returns this edge. Otherwise
620 returns NULL. */
621
622static edge
623find_subloop_latch_edge (struct loop *loop)
624{
9771b263 625 vec<edge> latches = get_loop_latch_edges (loop);
89f8f30f
ZD
626 edge latch = NULL;
627
9771b263 628 if (latches.length () > 1)
89f8f30f
ZD
629 {
630 latch = find_subloop_latch_edge_by_profile (latches);
631
632 if (!latch
633 /* We consider ivs to guess the latch edge only in SSA. Perhaps we
634 should use cfghook for this, but it is hard to imagine it would
635 be useful elsewhere. */
636 && current_ir_type () == IR_GIMPLE)
637 latch = find_subloop_latch_edge_by_ivs (loop, latches);
638 }
639
9771b263 640 latches.release ();
89f8f30f
ZD
641 return latch;
642}
643
644/* Callback for make_forwarder_block. Returns true if the edge E is marked
645 in the set MFB_REIS_SET. */
646
6e2830c3 647static hash_set<edge> *mfb_reis_set;
89f8f30f
ZD
648static bool
649mfb_redirect_edges_in_set (edge e)
650{
6e2830c3 651 return mfb_reis_set->contains (e);
89f8f30f
ZD
652}
653
654/* Creates a subloop of LOOP with latch edge LATCH. */
655
656static void
657form_subloop (struct loop *loop, edge latch)
658{
659 edge_iterator ei;
660 edge e, new_entry;
661 struct loop *new_loop;
b8698a0f 662
6e2830c3 663 mfb_reis_set = new hash_set<edge>;
89f8f30f
ZD
664 FOR_EACH_EDGE (e, ei, loop->header->preds)
665 {
666 if (e != latch)
6e2830c3 667 mfb_reis_set->add (e);
89f8f30f
ZD
668 }
669 new_entry = make_forwarder_block (loop->header, mfb_redirect_edges_in_set,
670 NULL);
6e2830c3 671 delete mfb_reis_set;
89f8f30f
ZD
672
673 loop->header = new_entry->src;
674
675 /* Find the blocks and subloops that belong to the new loop, and add it to
676 the appropriate place in the loop tree. */
677 new_loop = alloc_loop ();
678 new_loop->header = new_entry->dest;
679 new_loop->latch = latch->src;
680 add_loop (new_loop, loop);
681}
682
683/* Make all the latch edges of LOOP to go to a single forwarder block --
684 a new latch of LOOP. */
685
686static void
687merge_latch_edges (struct loop *loop)
688{
9771b263 689 vec<edge> latches = get_loop_latch_edges (loop);
89f8f30f
ZD
690 edge latch, e;
691 unsigned i;
692
9771b263 693 gcc_assert (latches.length () > 0);
89f8f30f 694
9771b263
DN
695 if (latches.length () == 1)
696 loop->latch = latches[0]->src;
89f8f30f
ZD
697 else
698 {
699 if (dump_file)
700 fprintf (dump_file, "Merged latch edges of loop %d\n", loop->num);
701
6e2830c3 702 mfb_reis_set = new hash_set<edge>;
9771b263 703 FOR_EACH_VEC_ELT (latches, i, e)
6e2830c3 704 mfb_reis_set->add (e);
89f8f30f
ZD
705 latch = make_forwarder_block (loop->header, mfb_redirect_edges_in_set,
706 NULL);
6e2830c3 707 delete mfb_reis_set;
89f8f30f
ZD
708
709 loop->header = latch->dest;
710 loop->latch = latch->src;
711 }
712
9771b263 713 latches.release ();
89f8f30f
ZD
714}
715
716/* LOOP may have several latch edges. Transform it into (possibly several)
717 loops with single latch edge. */
718
719static void
720disambiguate_multiple_latches (struct loop *loop)
721{
722 edge e;
723
ea2c620c 724 /* We eliminate the multiple latches by splitting the header to the forwarder
89f8f30f
ZD
725 block F and the rest R, and redirecting the edges. There are two cases:
726
727 1) If there is a latch edge E that corresponds to a subloop (we guess
728 that based on profile -- if it is taken much more often than the
729 remaining edges; and on trees, using the information about induction
730 variables of the loops), we redirect E to R, all the remaining edges to
731 F, then rescan the loops and try again for the outer loop.
732 2) If there is no such edge, we redirect all latch edges to F, and the
733 entry edges to R, thus making F the single latch of the loop. */
734
735 if (dump_file)
736 fprintf (dump_file, "Disambiguating loop %d with multiple latches\n",
737 loop->num);
738
739 /* During latch merging, we may need to redirect the entry edges to a new
740 block. This would cause problems if the entry edge was the one from the
741 entry block. To avoid having to handle this case specially, split
742 such entry edge. */
fefa31b5 743 e = find_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun), loop->header);
89f8f30f
ZD
744 if (e)
745 split_edge (e);
746
747 while (1)
748 {
749 e = find_subloop_latch_edge (loop);
750 if (!e)
751 break;
752
753 form_subloop (loop, e);
754 }
755
756 merge_latch_edges (loop);
757}
758
759/* Split loops with multiple latch edges. */
760
761void
762disambiguate_loops_with_multiple_latches (void)
763{
89f8f30f
ZD
764 struct loop *loop;
765
f0bd40b1 766 FOR_EACH_LOOP (loop, 0)
89f8f30f
ZD
767 {
768 if (!loop->latch)
769 disambiguate_multiple_latches (loop);
770 }
771}
772
da7d8304 773/* Return nonzero if basic block BB belongs to LOOP. */
2ecfd709 774bool
ed7a4b4b 775flow_bb_inside_loop_p (const struct loop *loop, const_basic_block bb)
2ecfd709
ZD
776{
777 struct loop *source_loop;
778
fefa31b5
DM
779 if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
780 || bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
2ecfd709
ZD
781 return 0;
782
783 source_loop = bb->loop_father;
784 return loop == source_loop || flow_loop_nested_p (loop, source_loop);
785}
786
89f8f30f 787/* Enumeration predicate for get_loop_body_with_size. */
2ecfd709 788static bool
ed7a4b4b 789glb_enum_p (const_basic_block bb, const void *glb_loop)
2ecfd709 790{
ed7a4b4b 791 const struct loop *const loop = (const struct loop *) glb_loop;
89f8f30f
ZD
792 return (bb != loop->header
793 && dominated_by_p (CDI_DOMINATORS, bb, loop->header));
794}
795
796/* Gets basic blocks of a LOOP. Header is the 0-th block, rest is in dfs
797 order against direction of edges from latch. Specially, if
798 header != latch, latch is the 1-st block. LOOP cannot be the fake
799 loop tree root, and its size must be at most MAX_SIZE. The blocks
800 in the LOOP body are stored to BODY, and the size of the LOOP is
801 returned. */
802
803unsigned
804get_loop_body_with_size (const struct loop *loop, basic_block *body,
805 unsigned max_size)
806{
807 return dfs_enumerate_from (loop->header, 1, glb_enum_p,
ed7a4b4b 808 body, max_size, loop);
2ecfd709
ZD
809}
810
8d28e87d
ZD
811/* Gets basic blocks of a LOOP. Header is the 0-th block, rest is in dfs
812 order against direction of edges from latch. Specially, if
813 header != latch, latch is the 1-st block. */
89f8f30f 814
2ecfd709 815basic_block *
d329e058 816get_loop_body (const struct loop *loop)
2ecfd709 817{
89f8f30f 818 basic_block *body, bb;
3d436d2a 819 unsigned tv = 0;
2ecfd709 820
341c100f 821 gcc_assert (loop->num_nodes);
2ecfd709 822
c302207e 823 body = XNEWVEC (basic_block, loop->num_nodes);
2ecfd709 824
fefa31b5 825 if (loop->latch == EXIT_BLOCK_PTR_FOR_FN (cfun))
2ecfd709 826 {
89f8f30f
ZD
827 /* There may be blocks unreachable from EXIT_BLOCK, hence we need to
828 special-case the fake loop that contains the whole function. */
0cae8d31 829 gcc_assert (loop->num_nodes == (unsigned) n_basic_blocks_for_fn (cfun));
89f8f30f 830 body[tv++] = loop->header;
fefa31b5 831 body[tv++] = EXIT_BLOCK_PTR_FOR_FN (cfun);
11cd3bed 832 FOR_EACH_BB_FN (bb, cfun)
89f8f30f 833 body[tv++] = bb;
2ecfd709 834 }
89f8f30f
ZD
835 else
836 tv = get_loop_body_with_size (loop, body, loop->num_nodes);
2ecfd709 837
341c100f 838 gcc_assert (tv == loop->num_nodes);
89f8f30f 839 return body;
2ecfd709
ZD
840}
841
50654f6c
ZD
842/* Fills dominance descendants inside LOOP of the basic block BB into
843 array TOVISIT from index *TV. */
844
845static void
846fill_sons_in_loop (const struct loop *loop, basic_block bb,
847 basic_block *tovisit, int *tv)
848{
849 basic_block son, postpone = NULL;
850
851 tovisit[(*tv)++] = bb;
852 for (son = first_dom_son (CDI_DOMINATORS, bb);
853 son;
854 son = next_dom_son (CDI_DOMINATORS, son))
855 {
856 if (!flow_bb_inside_loop_p (loop, son))
857 continue;
858
859 if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
860 {
861 postpone = son;
862 continue;
863 }
864 fill_sons_in_loop (loop, son, tovisit, tv);
865 }
866
867 if (postpone)
868 fill_sons_in_loop (loop, postpone, tovisit, tv);
869}
870
871/* Gets body of a LOOP (that must be different from the outermost loop)
872 sorted by dominance relation. Additionally, if a basic block s dominates
873 the latch, then only blocks dominated by s are be after it. */
874
875basic_block *
876get_loop_body_in_dom_order (const struct loop *loop)
877{
878 basic_block *tovisit;
879 int tv;
880
341c100f 881 gcc_assert (loop->num_nodes);
50654f6c 882
c302207e 883 tovisit = XNEWVEC (basic_block, loop->num_nodes);
50654f6c 884
fefa31b5 885 gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
50654f6c
ZD
886
887 tv = 0;
888 fill_sons_in_loop (loop, loop->header, tovisit, &tv);
889
341c100f 890 gcc_assert (tv == (int) loop->num_nodes);
50654f6c
ZD
891
892 return tovisit;
893}
894
e855c69d
AB
895/* Gets body of a LOOP sorted via provided BB_COMPARATOR. */
896
897basic_block *
b8698a0f 898get_loop_body_in_custom_order (const struct loop *loop,
e855c69d
AB
899 int (*bb_comparator) (const void *, const void *))
900{
901 basic_block *bbs = get_loop_body (loop);
902
903 qsort (bbs, loop->num_nodes, sizeof (basic_block), bb_comparator);
904
905 return bbs;
906}
907
40923b20
DP
908/* Get body of a LOOP in breadth first sort order. */
909
910basic_block *
911get_loop_body_in_bfs_order (const struct loop *loop)
912{
913 basic_block *blocks;
914 basic_block bb;
915 bitmap visited;
895548a5
KT
916 unsigned int i = 1;
917 unsigned int vc = 0;
40923b20 918
341c100f 919 gcc_assert (loop->num_nodes);
fefa31b5 920 gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
40923b20 921
c302207e 922 blocks = XNEWVEC (basic_block, loop->num_nodes);
8bdbfff5 923 visited = BITMAP_ALLOC (NULL);
895548a5
KT
924 blocks[0] = loop->header;
925 bitmap_set_bit (visited, loop->header->index);
40923b20
DP
926 while (i < loop->num_nodes)
927 {
928 edge e;
628f6a4e 929 edge_iterator ei;
895548a5
KT
930 gcc_assert (i > vc);
931 bb = blocks[vc++];
c22cacf3 932
628f6a4e 933 FOR_EACH_EDGE (e, ei, bb->succs)
c22cacf3
MS
934 {
935 if (flow_bb_inside_loop_p (loop, e->dest))
936 {
895548a5 937 /* This bb is now visited. */
fcaa4ca4
NF
938 if (bitmap_set_bit (visited, e->dest->index))
939 blocks[i++] = e->dest;
c22cacf3
MS
940 }
941 }
40923b20 942 }
c22cacf3 943
8bdbfff5 944 BITMAP_FREE (visited);
40923b20
DP
945 return blocks;
946}
947
6270df4c
ZD
948/* Hash function for struct loop_exit. */
949
2a22f99c
TS
950hashval_t
951loop_exit_hasher::hash (loop_exit *exit)
6270df4c 952{
6270df4c
ZD
953 return htab_hash_pointer (exit->e);
954}
955
956/* Equality function for struct loop_exit. Compares with edge. */
957
2a22f99c
TS
958bool
959loop_exit_hasher::equal (loop_exit *exit, edge e)
6270df4c 960{
6270df4c
ZD
961 return exit->e == e;
962}
963
964/* Frees the list of loop exit descriptions EX. */
965
2a22f99c
TS
966void
967loop_exit_hasher::remove (loop_exit *exit)
6270df4c 968{
2a22f99c 969 loop_exit *next;
6270df4c
ZD
970 for (; exit; exit = next)
971 {
972 next = exit->next_e;
b8698a0f 973
6270df4c
ZD
974 exit->next->prev = exit->prev;
975 exit->prev->next = exit->next;
976
9e2f83a5 977 ggc_free (exit);
6270df4c
ZD
978 }
979}
980
981/* Returns the list of records for E as an exit of a loop. */
982
983static struct loop_exit *
984get_exit_descriptions (edge e)
985{
2a22f99c 986 return current_loops->exits->find_with_hash (e, htab_hash_pointer (e));
6270df4c
ZD
987}
988
989/* Updates the lists of loop exits in that E appears.
990 If REMOVED is true, E is being removed, and we
991 just remove it from the lists of exits.
992 If NEW_EDGE is true and E is not a loop exit, we
993 do not try to remove it from loop exit lists. */
994
995void
996rescan_loop_exit (edge e, bool new_edge, bool removed)
997{
6270df4c
ZD
998 struct loop_exit *exits = NULL, *exit;
999 struct loop *aloop, *cloop;
1000
f87000d0 1001 if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
6270df4c
ZD
1002 return;
1003
1004 if (!removed
1005 && e->src->loop_father != NULL
1006 && e->dest->loop_father != NULL
1007 && !flow_bb_inside_loop_p (e->src->loop_father, e->dest))
1008 {
1009 cloop = find_common_loop (e->src->loop_father, e->dest->loop_father);
1010 for (aloop = e->src->loop_father;
1011 aloop != cloop;
9ba025a2 1012 aloop = loop_outer (aloop))
6270df4c 1013 {
766090c2 1014 exit = ggc_alloc<loop_exit> ();
6270df4c
ZD
1015 exit->e = e;
1016
9e2f83a5
ZD
1017 exit->next = aloop->exits->next;
1018 exit->prev = aloop->exits;
6270df4c
ZD
1019 exit->next->prev = exit;
1020 exit->prev->next = exit;
1021
1022 exit->next_e = exits;
1023 exits = exit;
1024 }
b8698a0f 1025 }
6270df4c
ZD
1026
1027 if (!exits && new_edge)
1028 return;
1029
2a22f99c
TS
1030 loop_exit **slot
1031 = current_loops->exits->find_slot_with_hash (e, htab_hash_pointer (e),
1032 exits ? INSERT : NO_INSERT);
6270df4c
ZD
1033 if (!slot)
1034 return;
1035
1036 if (exits)
1037 {
1038 if (*slot)
2a22f99c 1039 loop_exit_hasher::remove (*slot);
6270df4c
ZD
1040 *slot = exits;
1041 }
1042 else
2a22f99c 1043 current_loops->exits->clear_slot (slot);
6270df4c
ZD
1044}
1045
1046/* For each loop, record list of exit edges, and start maintaining these
1047 lists. */
1048
1049void
1050record_loop_exits (void)
1051{
1052 basic_block bb;
1053 edge_iterator ei;
1054 edge e;
1055
4839cb59
ZD
1056 if (!current_loops)
1057 return;
1058
f87000d0 1059 if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
6270df4c 1060 return;
f87000d0 1061 loops_state_set (LOOPS_HAVE_RECORDED_EXITS);
6270df4c
ZD
1062
1063 gcc_assert (current_loops->exits == NULL);
2a22f99c
TS
1064 current_loops->exits
1065 = hash_table<loop_exit_hasher>::create_ggc (2 * number_of_loops (cfun));
6270df4c 1066
11cd3bed 1067 FOR_EACH_BB_FN (bb, cfun)
6270df4c
ZD
1068 {
1069 FOR_EACH_EDGE (e, ei, bb->succs)
1070 {
1071 rescan_loop_exit (e, true, false);
1072 }
1073 }
1074}
1075
1076/* Dumps information about the exit in *SLOT to FILE.
1077 Callback for htab_traverse. */
1078
2a22f99c
TS
1079int
1080dump_recorded_exit (loop_exit **slot, FILE *file)
6270df4c 1081{
2a22f99c 1082 struct loop_exit *exit = *slot;
6270df4c
ZD
1083 unsigned n = 0;
1084 edge e = exit->e;
1085
1086 for (; exit != NULL; exit = exit->next_e)
1087 n++;
1088
2a22f99c 1089 fprintf (file, "Edge %d->%d exits %u loops\n",
6270df4c
ZD
1090 e->src->index, e->dest->index, n);
1091
1092 return 1;
1093}
1094
1095/* Dumps the recorded exits of loops to FILE. */
1096
1097extern void dump_recorded_exits (FILE *);
1098void
1099dump_recorded_exits (FILE *file)
1100{
1101 if (!current_loops->exits)
1102 return;
2a22f99c 1103 current_loops->exits->traverse<FILE *, dump_recorded_exit> (file);
6270df4c
ZD
1104}
1105
1106/* Releases lists of loop exits. */
1107
1108void
61183076 1109release_recorded_exits (function *fn)
6270df4c 1110{
61183076
RB
1111 gcc_assert (loops_state_satisfies_p (fn, LOOPS_HAVE_RECORDED_EXITS));
1112 loops_for_fn (fn)->exits->empty ();
1113 loops_for_fn (fn)->exits = NULL;
1114 loops_state_clear (fn, LOOPS_HAVE_RECORDED_EXITS);
6270df4c
ZD
1115}
1116
ca83d385
ZD
1117/* Returns the list of the exit edges of a LOOP. */
1118
9771b263 1119vec<edge>
ca83d385 1120get_loop_exit_edges (const struct loop *loop)
35b07080 1121{
6e1aa848 1122 vec<edge> edges = vNULL;
ca83d385
ZD
1123 edge e;
1124 unsigned i;
1125 basic_block *body;
628f6a4e 1126 edge_iterator ei;
6270df4c 1127 struct loop_exit *exit;
35b07080 1128
fefa31b5 1129 gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
35b07080 1130
6270df4c
ZD
1131 /* If we maintain the lists of exits, use them. Otherwise we must
1132 scan the body of the loop. */
f87000d0 1133 if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
6270df4c 1134 {
9e2f83a5 1135 for (exit = loop->exits->next; exit->e; exit = exit->next)
9771b263 1136 edges.safe_push (exit->e);
6270df4c
ZD
1137 }
1138 else
1139 {
1140 body = get_loop_body (loop);
1141 for (i = 0; i < loop->num_nodes; i++)
1142 FOR_EACH_EDGE (e, ei, body[i]->succs)
1143 {
1144 if (!flow_bb_inside_loop_p (loop, e->dest))
9771b263 1145 edges.safe_push (e);
6270df4c
ZD
1146 }
1147 free (body);
1148 }
35b07080
ZD
1149
1150 return edges;
1151}
1152
50654f6c
ZD
1153/* Counts the number of conditional branches inside LOOP. */
1154
1155unsigned
1156num_loop_branches (const struct loop *loop)
1157{
1158 unsigned i, n;
1159 basic_block * body;
1160
fefa31b5 1161 gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
50654f6c
ZD
1162
1163 body = get_loop_body (loop);
1164 n = 0;
1165 for (i = 0; i < loop->num_nodes; i++)
628f6a4e 1166 if (EDGE_COUNT (body[i]->succs) >= 2)
50654f6c
ZD
1167 n++;
1168 free (body);
1169
1170 return n;
1171}
1172
2ecfd709
ZD
1173/* Adds basic block BB to LOOP. */
1174void
d329e058
AJ
1175add_bb_to_loop (basic_block bb, struct loop *loop)
1176{
9ba025a2
ZD
1177 unsigned i;
1178 loop_p ploop;
6270df4c
ZD
1179 edge_iterator ei;
1180 edge e;
1181
1182 gcc_assert (bb->loop_father == NULL);
1183 bb->loop_father = loop;
6270df4c 1184 loop->num_nodes++;
9771b263 1185 FOR_EACH_VEC_SAFE_ELT (loop->superloops, i, ploop)
9ba025a2 1186 ploop->num_nodes++;
6270df4c
ZD
1187
1188 FOR_EACH_EDGE (e, ei, bb->succs)
1189 {
1190 rescan_loop_exit (e, true, false);
1191 }
1192 FOR_EACH_EDGE (e, ei, bb->preds)
1193 {
1194 rescan_loop_exit (e, true, false);
1195 }
598ec7bd 1196}
2ecfd709
ZD
1197
1198/* Remove basic block BB from loops. */
1199void
d329e058
AJ
1200remove_bb_from_loops (basic_block bb)
1201{
9771b263 1202 unsigned i;
6270df4c 1203 struct loop *loop = bb->loop_father;
9ba025a2 1204 loop_p ploop;
6270df4c
ZD
1205 edge_iterator ei;
1206 edge e;
1207
1208 gcc_assert (loop != NULL);
1209 loop->num_nodes--;
9771b263 1210 FOR_EACH_VEC_SAFE_ELT (loop->superloops, i, ploop)
9ba025a2 1211 ploop->num_nodes--;
6270df4c 1212 bb->loop_father = NULL;
6270df4c
ZD
1213
1214 FOR_EACH_EDGE (e, ei, bb->succs)
1215 {
1216 rescan_loop_exit (e, false, true);
1217 }
1218 FOR_EACH_EDGE (e, ei, bb->preds)
1219 {
1220 rescan_loop_exit (e, false, true);
1221 }
a310245f 1222}
2ecfd709
ZD
1223
1224/* Finds nearest common ancestor in loop tree for given loops. */
1225struct loop *
d329e058 1226find_common_loop (struct loop *loop_s, struct loop *loop_d)
2ecfd709 1227{
9ba025a2
ZD
1228 unsigned sdepth, ddepth;
1229
2ecfd709
ZD
1230 if (!loop_s) return loop_d;
1231 if (!loop_d) return loop_s;
d329e058 1232
9ba025a2
ZD
1233 sdepth = loop_depth (loop_s);
1234 ddepth = loop_depth (loop_d);
1235
1236 if (sdepth < ddepth)
9771b263 1237 loop_d = (*loop_d->superloops)[sdepth];
9ba025a2 1238 else if (sdepth > ddepth)
9771b263 1239 loop_s = (*loop_s->superloops)[ddepth];
2ecfd709
ZD
1240
1241 while (loop_s != loop_d)
1242 {
9ba025a2
ZD
1243 loop_s = loop_outer (loop_s);
1244 loop_d = loop_outer (loop_d);
2ecfd709
ZD
1245 }
1246 return loop_s;
1247}
1248
42fd6772
ZD
1249/* Removes LOOP from structures and frees its data. */
1250
1251void
1252delete_loop (struct loop *loop)
1253{
1254 /* Remove the loop from structure. */
1255 flow_loop_tree_node_remove (loop);
1256
1257 /* Remove loop from loops array. */
9771b263 1258 (*current_loops->larray)[loop->num] = NULL;
42fd6772
ZD
1259
1260 /* Free loop data. */
1261 flow_loop_free (loop);
1262}
1263
3d436d2a 1264/* Cancels the LOOP; it must be innermost one. */
b00bf166
KH
1265
1266static void
d73be268 1267cancel_loop (struct loop *loop)
3d436d2a
ZD
1268{
1269 basic_block *bbs;
1270 unsigned i;
9ba025a2 1271 struct loop *outer = loop_outer (loop);
3d436d2a 1272
341c100f 1273 gcc_assert (!loop->inner);
3d436d2a
ZD
1274
1275 /* Move blocks up one level (they should be removed as soon as possible). */
1276 bbs = get_loop_body (loop);
1277 for (i = 0; i < loop->num_nodes; i++)
9ba025a2 1278 bbs[i]->loop_father = outer;
3d436d2a 1279
b78384e0 1280 free (bbs);
42fd6772 1281 delete_loop (loop);
3d436d2a
ZD
1282}
1283
1284/* Cancels LOOP and all its subloops. */
1285void
d73be268 1286cancel_loop_tree (struct loop *loop)
3d436d2a
ZD
1287{
1288 while (loop->inner)
d73be268
ZD
1289 cancel_loop_tree (loop->inner);
1290 cancel_loop (loop);
3d436d2a
ZD
1291}
1292
d73be268 1293/* Checks that information about loops is correct
e0bb17a8 1294 -- sizes of loops are all right
2ecfd709
ZD
1295 -- results of get_loop_body really belong to the loop
1296 -- loop header have just single entry edge and single latch edge
1297 -- loop latches have only single successor that is header of their loop
3d436d2a 1298 -- irreducible loops are correctly marked
cc360b36 1299 -- the cached loop depth and loop father of each bb is correct
2ecfd709 1300 */
24e47c76 1301DEBUG_FUNCTION void
d73be268 1302verify_loop_structure (void)
2ecfd709 1303{
3d436d2a
ZD
1304 unsigned *sizes, i, j;
1305 sbitmap irreds;
a271b42d 1306 basic_block bb, *bbs;
2ecfd709
ZD
1307 struct loop *loop;
1308 int err = 0;
35b07080 1309 edge e;
0fc822d0 1310 unsigned num = number_of_loops (cfun);
6270df4c 1311 struct loop_exit *exit, *mexit;
7d776ee2 1312 bool dom_available = dom_info_available_p (CDI_DOMINATORS);
0375167b 1313 sbitmap visited;
2ecfd709 1314
a9e0d843
RB
1315 if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
1316 {
1317 error ("loop verification on loop tree that needs fixup");
1318 err = 1;
1319 }
1320
7d776ee2
RG
1321 /* We need up-to-date dominators, compute or verify them. */
1322 if (!dom_available)
1323 calculate_dominance_info (CDI_DOMINATORS);
1324 else
1325 verify_dominators (CDI_DOMINATORS);
510dbcce 1326
b0dd8c90
RB
1327 /* Check the loop tree root. */
1328 if (current_loops->tree_root->header != ENTRY_BLOCK_PTR_FOR_FN (cfun)
1329 || current_loops->tree_root->latch != EXIT_BLOCK_PTR_FOR_FN (cfun)
1330 || (current_loops->tree_root->num_nodes
1331 != (unsigned) n_basic_blocks_for_fn (cfun)))
1332 {
1333 error ("corrupt loop tree root");
1334 err = 1;
1335 }
1336
f64fb0fa 1337 /* Check the headers. */
11cd3bed 1338 FOR_EACH_BB_FN (bb, cfun)
a271b42d 1339 if (bb_loop_header_p (bb))
f64fb0fa 1340 {
a271b42d
RB
1341 if (bb->loop_father->header == NULL)
1342 {
1343 error ("loop with header %d marked for removal", bb->index);
1344 err = 1;
1345 }
1346 else if (bb->loop_father->header != bb)
1347 {
1348 error ("loop with header %d not in loop tree", bb->index);
1349 err = 1;
1350 }
1351 }
1352 else if (bb->loop_father->header == bb)
1353 {
1354 error ("non-loop with header %d not marked for removal", bb->index);
f64fb0fa
MP
1355 err = 1;
1356 }
1357
a271b42d 1358 /* Check the recorded loop father and sizes of loops. */
8b1c6fd7 1359 visited = sbitmap_alloc (last_basic_block_for_fn (cfun));
f61e445a 1360 bitmap_clear (visited);
0cae8d31 1361 bbs = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
f0bd40b1 1362 FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
cc360b36 1363 {
a271b42d 1364 unsigned n;
cc360b36 1365
a271b42d
RB
1366 if (loop->header == NULL)
1367 {
1368 error ("removed loop %d in loop tree", loop->num);
1369 err = 1;
1370 continue;
1371 }
1372
0cae8d31 1373 n = get_loop_body_with_size (loop, bbs, n_basic_blocks_for_fn (cfun));
a271b42d
RB
1374 if (loop->num_nodes != n)
1375 {
1376 error ("size of loop %d should be %d, not %d",
1377 loop->num, n, loop->num_nodes);
1378 err = 1;
1379 }
1380
1381 for (j = 0; j < n; j++)
cc360b36
SB
1382 {
1383 bb = bbs[j];
1384
0375167b
RB
1385 if (!flow_bb_inside_loop_p (loop, bb))
1386 {
1387 error ("bb %d does not belong to loop %d",
1388 bb->index, loop->num);
1389 err = 1;
1390 }
1391
cc360b36 1392 /* Ignore this block if it is in an inner loop. */
d7c028c0 1393 if (bitmap_bit_p (visited, bb->index))
cc360b36 1394 continue;
d7c028c0 1395 bitmap_set_bit (visited, bb->index);
cc360b36
SB
1396
1397 if (bb->loop_father != loop)
1398 {
1399 error ("bb %d has father loop %d, should be loop %d",
1400 bb->index, bb->loop_father->num, loop->num);
1401 err = 1;
1402 }
1403 }
cc360b36 1404 }
a271b42d 1405 free (bbs);
0375167b 1406 sbitmap_free (visited);
2ecfd709
ZD
1407
1408 /* Check headers and latches. */
f0bd40b1 1409 FOR_EACH_LOOP (loop, 0)
2ecfd709 1410 {
42fd6772 1411 i = loop->num;
a271b42d
RB
1412 if (loop->header == NULL)
1413 continue;
0375167b
RB
1414 if (!bb_loop_header_p (loop->header))
1415 {
1416 error ("loop %d%'s header is not a loop header", i);
1417 err = 1;
1418 }
f87000d0 1419 if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS)
628f6a4e 1420 && EDGE_COUNT (loop->header->preds) != 2)
2ecfd709 1421 {
d8a07487 1422 error ("loop %d%'s header does not have exactly 2 entries", i);
2ecfd709
ZD
1423 err = 1;
1424 }
6aaf596b
RB
1425 if (loop->latch)
1426 {
1427 if (!find_edge (loop->latch, loop->header))
1428 {
1429 error ("loop %d%'s latch does not have an edge to its header", i);
1430 err = 1;
1431 }
1432 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, loop->header))
1433 {
1434 error ("loop %d%'s latch is not dominated by its header", i);
1435 err = 1;
1436 }
1437 }
f87000d0 1438 if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
2ecfd709 1439 {
c5cbcccf 1440 if (!single_succ_p (loop->latch))
2ecfd709 1441 {
d8a07487 1442 error ("loop %d%'s latch does not have exactly 1 successor", i);
2ecfd709
ZD
1443 err = 1;
1444 }
c5cbcccf 1445 if (single_succ (loop->latch) != loop->header)
2ecfd709 1446 {
d8a07487 1447 error ("loop %d%'s latch does not have header as successor", i);
2ecfd709
ZD
1448 err = 1;
1449 }
1450 if (loop->latch->loop_father != loop)
1451 {
d8a07487 1452 error ("loop %d%'s latch does not belong directly to it", i);
2ecfd709
ZD
1453 err = 1;
1454 }
1455 }
1456 if (loop->header->loop_father != loop)
1457 {
d8a07487 1458 error ("loop %d%'s header does not belong directly to it", i);
2ecfd709
ZD
1459 err = 1;
1460 }
f87000d0 1461 if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
35b07080
ZD
1462 && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
1463 {
d8a07487 1464 error ("loop %d%'s latch is marked as part of irreducible region", i);
35b07080
ZD
1465 err = 1;
1466 }
2ecfd709
ZD
1467 }
1468
3d436d2a 1469 /* Check irreducible loops. */
f87000d0 1470 if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
3d436d2a
ZD
1471 {
1472 /* Record old info. */
8b1c6fd7 1473 irreds = sbitmap_alloc (last_basic_block_for_fn (cfun));
11cd3bed 1474 FOR_EACH_BB_FN (bb, cfun)
35b07080 1475 {
628f6a4e 1476 edge_iterator ei;
35b07080 1477 if (bb->flags & BB_IRREDUCIBLE_LOOP)
d7c028c0 1478 bitmap_set_bit (irreds, bb->index);
35b07080 1479 else
d7c028c0 1480 bitmap_clear_bit (irreds, bb->index);
628f6a4e 1481 FOR_EACH_EDGE (e, ei, bb->succs)
35b07080 1482 if (e->flags & EDGE_IRREDUCIBLE_LOOP)
d329e058 1483 e->flags |= EDGE_ALL_FLAGS + 1;
35b07080 1484 }
3d436d2a
ZD
1485
1486 /* Recount it. */
d73be268 1487 mark_irreducible_loops ();
3d436d2a
ZD
1488
1489 /* Compare. */
11cd3bed 1490 FOR_EACH_BB_FN (bb, cfun)
3d436d2a 1491 {
628f6a4e
BE
1492 edge_iterator ei;
1493
3d436d2a 1494 if ((bb->flags & BB_IRREDUCIBLE_LOOP)
d7c028c0 1495 && !bitmap_bit_p (irreds, bb->index))
3d436d2a 1496 {
ab532386 1497 error ("basic block %d should be marked irreducible", bb->index);
3d436d2a
ZD
1498 err = 1;
1499 }
1500 else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
d7c028c0 1501 && bitmap_bit_p (irreds, bb->index))
3d436d2a 1502 {
ab532386 1503 error ("basic block %d should not be marked irreducible", bb->index);
3d436d2a
ZD
1504 err = 1;
1505 }
628f6a4e 1506 FOR_EACH_EDGE (e, ei, bb->succs)
35b07080
ZD
1507 {
1508 if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
1509 && !(e->flags & (EDGE_ALL_FLAGS + 1)))
1510 {
ab532386 1511 error ("edge from %d to %d should be marked irreducible",
35b07080
ZD
1512 e->src->index, e->dest->index);
1513 err = 1;
1514 }
1515 else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
1516 && (e->flags & (EDGE_ALL_FLAGS + 1)))
1517 {
ab532386 1518 error ("edge from %d to %d should not be marked irreducible",
35b07080
ZD
1519 e->src->index, e->dest->index);
1520 err = 1;
1521 }
1522 e->flags &= ~(EDGE_ALL_FLAGS + 1);
1523 }
3d436d2a
ZD
1524 }
1525 free (irreds);
1526 }
1527
6270df4c 1528 /* Check the recorded loop exits. */
f0bd40b1 1529 FOR_EACH_LOOP (loop, 0)
82b85a85 1530 {
9e2f83a5 1531 if (!loop->exits || loop->exits->e != NULL)
6270df4c
ZD
1532 {
1533 error ("corrupted head of the exits list of loop %d",
1534 loop->num);
1535 err = 1;
1536 }
1537 else
1538 {
1539 /* Check that the list forms a cycle, and all elements except
1540 for the head are nonnull. */
9e2f83a5 1541 for (mexit = loop->exits, exit = mexit->next, i = 0;
6270df4c
ZD
1542 exit->e && exit != mexit;
1543 exit = exit->next)
1544 {
1545 if (i++ & 1)
1546 mexit = mexit->next;
1547 }
1548
9e2f83a5 1549 if (exit != loop->exits)
6270df4c
ZD
1550 {
1551 error ("corrupted exits list of loop %d", loop->num);
1552 err = 1;
1553 }
1554 }
1555
f87000d0 1556 if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
6270df4c 1557 {
9e2f83a5 1558 if (loop->exits->next != loop->exits)
6270df4c
ZD
1559 {
1560 error ("nonempty exits list of loop %d, but exits are not recorded",
1561 loop->num);
1562 err = 1;
1563 }
1564 }
1565 }
1566
f87000d0 1567 if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
6270df4c
ZD
1568 {
1569 unsigned n_exits = 0, eloops;
1570
a271b42d 1571 sizes = XCNEWVEC (unsigned, num);
42fd6772 1572 memset (sizes, 0, sizeof (unsigned) * num);
11cd3bed 1573 FOR_EACH_BB_FN (bb, cfun)
82b85a85 1574 {
628f6a4e 1575 edge_iterator ei;
d73be268 1576 if (bb->loop_father == current_loops->tree_root)
82b85a85 1577 continue;
628f6a4e 1578 FOR_EACH_EDGE (e, ei, bb->succs)
82b85a85 1579 {
82b85a85
ZD
1580 if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
1581 continue;
1582
6270df4c
ZD
1583 n_exits++;
1584 exit = get_exit_descriptions (e);
1585 if (!exit)
1586 {
d8a07487 1587 error ("exit %d->%d not recorded",
6270df4c
ZD
1588 e->src->index, e->dest->index);
1589 err = 1;
1590 }
1591 eloops = 0;
1592 for (; exit; exit = exit->next_e)
1593 eloops++;
1594
82b85a85 1595 for (loop = bb->loop_father;
661bc682
RB
1596 loop != e->dest->loop_father
1597 /* When a loop exit is also an entry edge which
1598 can happen when avoiding CFG manipulations
1599 then the last loop exited is the outer loop
1600 of the loop entered. */
1601 && loop != loop_outer (e->dest->loop_father);
9ba025a2 1602 loop = loop_outer (loop))
82b85a85 1603 {
6270df4c 1604 eloops--;
82b85a85 1605 sizes[loop->num]++;
6270df4c
ZD
1606 }
1607
1608 if (eloops != 0)
1609 {
d8a07487 1610 error ("wrong list of exited loops for edge %d->%d",
6270df4c
ZD
1611 e->src->index, e->dest->index);
1612 err = 1;
82b85a85
ZD
1613 }
1614 }
1615 }
1616
2a22f99c 1617 if (n_exits != current_loops->exits->elements ())
82b85a85 1618 {
d8a07487 1619 error ("too many loop exits recorded");
6270df4c
ZD
1620 err = 1;
1621 }
82b85a85 1622
f0bd40b1 1623 FOR_EACH_LOOP (loop, 0)
6270df4c
ZD
1624 {
1625 eloops = 0;
9e2f83a5 1626 for (exit = loop->exits->next; exit->e; exit = exit->next)
6270df4c
ZD
1627 eloops++;
1628 if (eloops != sizes[loop->num])
82b85a85 1629 {
6270df4c
ZD
1630 error ("%d exits recorded for loop %d (having %d exits)",
1631 eloops, loop->num, sizes[loop->num]);
82b85a85
ZD
1632 err = 1;
1633 }
1634 }
a271b42d
RB
1635
1636 free (sizes);
82b85a85
ZD
1637 }
1638
341c100f 1639 gcc_assert (!err);
82b85a85 1640
7d776ee2
RG
1641 if (!dom_available)
1642 free_dominance_info (CDI_DOMINATORS);
2ecfd709
ZD
1643}
1644
1645/* Returns latch edge of LOOP. */
1646edge
d329e058 1647loop_latch_edge (const struct loop *loop)
2ecfd709 1648{
9ff3d2de 1649 return find_edge (loop->latch, loop->header);
402209ff 1650}
2ecfd709
ZD
1651
1652/* Returns preheader edge of LOOP. */
1653edge
d329e058 1654loop_preheader_edge (const struct loop *loop)
2ecfd709
ZD
1655{
1656 edge e;
628f6a4e 1657 edge_iterator ei;
2ecfd709 1658
f87000d0 1659 gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS));
c7b852c8 1660
628f6a4e
BE
1661 FOR_EACH_EDGE (e, ei, loop->header->preds)
1662 if (e->src != loop->latch)
1663 break;
2ecfd709
ZD
1664
1665 return e;
1666}
70388d94
ZD
1667
1668/* Returns true if E is an exit of LOOP. */
1669
1670bool
ed7a4b4b 1671loop_exit_edge_p (const struct loop *loop, const_edge e)
70388d94
ZD
1672{
1673 return (flow_bb_inside_loop_p (loop, e->src)
1674 && !flow_bb_inside_loop_p (loop, e->dest));
1675}
ac8f6c69
ZD
1676
1677/* Returns the single exit edge of LOOP, or NULL if LOOP has either no exit
6270df4c
ZD
1678 or more than one exit. If loops do not have the exits recorded, NULL
1679 is returned always. */
ac8f6c69
ZD
1680
1681edge
1682single_exit (const struct loop *loop)
1683{
9e2f83a5 1684 struct loop_exit *exit = loop->exits->next;
ac8f6c69 1685
f87000d0 1686 if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
6270df4c 1687 return NULL;
ac8f6c69 1688
9e2f83a5 1689 if (exit->e && exit->next == loop->exits)
6270df4c
ZD
1690 return exit->e;
1691 else
1692 return NULL;
ac8f6c69 1693}
f8bf9252 1694
f4ce375d 1695/* Returns true when BB has an incoming edge exiting LOOP. */
f8bf9252
SP
1696
1697bool
f4ce375d 1698loop_exits_to_bb_p (struct loop *loop, basic_block bb)
f8bf9252
SP
1699{
1700 edge e;
1701 edge_iterator ei;
1702
1703 FOR_EACH_EDGE (e, ei, bb->preds)
1704 if (loop_exit_edge_p (loop, e))
1705 return true;
1706
1707 return false;
1708}
f4ce375d
VK
1709
1710/* Returns true when BB has an outgoing edge exiting LOOP. */
1711
1712bool
1713loop_exits_from_bb_p (struct loop *loop, basic_block bb)
1714{
1715 edge e;
1716 edge_iterator ei;
1717
1718 FOR_EACH_EDGE (e, ei, bb->succs)
1719 if (loop_exit_edge_p (loop, e))
1720 return true;
1721
1722 return false;
1723}
e25a6711
TJ
1724
1725/* Return location corresponding to the loop control condition if possible. */
1726
1727location_t
1728get_loop_location (struct loop *loop)
1729{
9d56eaa2 1730 rtx_insn *insn = NULL;
e25a6711
TJ
1731 struct niter_desc *desc = NULL;
1732 edge exit;
1733
1734 /* For a for or while loop, we would like to return the location
1735 of the for or while statement, if possible. To do this, look
1736 for the branch guarding the loop back-edge. */
1737
1738 /* If this is a simple loop with an in_edge, then the loop control
1739 branch is typically at the end of its source. */
1740 desc = get_simple_loop_desc (loop);
1741 if (desc->in_edge)
1742 {
1743 FOR_BB_INSNS_REVERSE (desc->in_edge->src, insn)
1744 {
1745 if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
1746 return INSN_LOCATION (insn);
1747 }
1748 }
1749 /* If loop has a single exit, then the loop control branch
1750 must be at the end of its source. */
1751 if ((exit = single_exit (loop)))
1752 {
1753 FOR_BB_INSNS_REVERSE (exit->src, insn)
1754 {
1755 if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
1756 return INSN_LOCATION (insn);
1757 }
1758 }
1759 /* Next check the latch, to see if it is non-empty. */
1760 FOR_BB_INSNS_REVERSE (loop->latch, insn)
1761 {
1762 if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
1763 return INSN_LOCATION (insn);
1764 }
1765 /* Finally, if none of the above identifies the loop control branch,
1766 return the first location in the loop header. */
1767 FOR_BB_INSNS (loop->header, insn)
1768 {
1769 if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
1770 return INSN_LOCATION (insn);
1771 }
1772 /* If all else fails, simply return the current function location. */
1773 return DECL_SOURCE_LOCATION (current_function_decl);
1774}
1775
71343877
AM
1776/* Records that every statement in LOOP is executed I_BOUND times.
1777 REALISTIC is true if I_BOUND is expected to be close to the real number
1778 of iterations. UPPER is true if we are sure the loop iterates at most
1779 I_BOUND times. */
1780
1781void
807e902e
KZ
1782record_niter_bound (struct loop *loop, const widest_int &i_bound,
1783 bool realistic, bool upper)
71343877
AM
1784{
1785 /* Update the bounds only when there is no previous estimation, or when the
1786 current estimation is smaller. */
1787 if (upper
1788 && (!loop->any_upper_bound
807e902e 1789 || wi::ltu_p (i_bound, loop->nb_iterations_upper_bound)))
71343877
AM
1790 {
1791 loop->any_upper_bound = true;
1792 loop->nb_iterations_upper_bound = i_bound;
105e29c5
JH
1793 if (!loop->any_likely_upper_bound)
1794 {
1795 loop->any_likely_upper_bound = true;
1796 loop->nb_iterations_likely_upper_bound = i_bound;
1797 }
71343877
AM
1798 }
1799 if (realistic
1800 && (!loop->any_estimate
807e902e 1801 || wi::ltu_p (i_bound, loop->nb_iterations_estimate)))
71343877
AM
1802 {
1803 loop->any_estimate = true;
1804 loop->nb_iterations_estimate = i_bound;
1805 }
105e29c5
JH
1806 if (!realistic
1807 && (!loop->any_likely_upper_bound
1808 || wi::ltu_p (i_bound, loop->nb_iterations_likely_upper_bound)))
1809 {
1810 loop->any_likely_upper_bound = true;
1811 loop->nb_iterations_likely_upper_bound = i_bound;
1812 }
71343877
AM
1813
1814 /* If an upper bound is smaller than the realistic estimate of the
1815 number of iterations, use the upper bound instead. */
1816 if (loop->any_upper_bound
1817 && loop->any_estimate
807e902e
KZ
1818 && wi::ltu_p (loop->nb_iterations_upper_bound,
1819 loop->nb_iterations_estimate))
71343877 1820 loop->nb_iterations_estimate = loop->nb_iterations_upper_bound;
105e29c5
JH
1821 if (loop->any_upper_bound
1822 && loop->any_likely_upper_bound
1823 && wi::ltu_p (loop->nb_iterations_upper_bound,
1824 loop->nb_iterations_likely_upper_bound))
1825 loop->nb_iterations_likely_upper_bound = loop->nb_iterations_upper_bound;
71343877
AM
1826}
1827
1ef88893 1828/* Similar to get_estimated_loop_iterations, but returns the estimate only
71343877
AM
1829 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
1830 on the number of iterations of LOOP could not be derived, returns -1. */
1831
1832HOST_WIDE_INT
1ef88893 1833get_estimated_loop_iterations_int (struct loop *loop)
71343877 1834{
807e902e 1835 widest_int nit;
71343877
AM
1836 HOST_WIDE_INT hwi_nit;
1837
1838 if (!get_estimated_loop_iterations (loop, &nit))
1839 return -1;
1840
807e902e 1841 if (!wi::fits_shwi_p (nit))
71343877
AM
1842 return -1;
1843 hwi_nit = nit.to_shwi ();
1844
1845 return hwi_nit < 0 ? -1 : hwi_nit;
1846}
1847
1848/* Returns an upper bound on the number of executions of statements
1849 in the LOOP. For statements before the loop exit, this exceeds
1850 the number of execution of the latch by one. */
1851
1852HOST_WIDE_INT
1853max_stmt_executions_int (struct loop *loop)
1854{
1ef88893 1855 HOST_WIDE_INT nit = get_max_loop_iterations_int (loop);
71343877
AM
1856 HOST_WIDE_INT snit;
1857
1858 if (nit == -1)
1859 return -1;
1860
1861 snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
1862
1863 /* If the computation overflows, return -1. */
1864 return snit < 0 ? -1 : snit;
1865}
1866
105e29c5
JH
1867/* Returns an likely upper bound on the number of executions of statements
1868 in the LOOP. For statements before the loop exit, this exceeds
1869 the number of execution of the latch by one. */
1870
1871HOST_WIDE_INT
1872likely_max_stmt_executions_int (struct loop *loop)
1873{
1874 HOST_WIDE_INT nit = get_likely_max_loop_iterations_int (loop);
1875 HOST_WIDE_INT snit;
1876
1877 if (nit == -1)
1878 return -1;
1879
1880 snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
1881
1882 /* If the computation overflows, return -1. */
1883 return snit < 0 ? -1 : snit;
1884}
1885
71343877
AM
1886/* Sets NIT to the estimated number of executions of the latch of the
1887 LOOP. If we have no reliable estimate, the function returns false, otherwise
1888 returns true. */
1889
1890bool
807e902e 1891get_estimated_loop_iterations (struct loop *loop, widest_int *nit)
71343877
AM
1892{
1893 /* Even if the bound is not recorded, possibly we can derrive one from
1894 profile. */
1895 if (!loop->any_estimate)
1896 {
1897 if (loop->header->count)
1898 {
807e902e 1899 *nit = gcov_type_to_wide_int
71343877
AM
1900 (expected_loop_iterations_unbounded (loop) + 1);
1901 return true;
1902 }
1903 return false;
1904 }
1905
1906 *nit = loop->nb_iterations_estimate;
1907 return true;
1908}
1909
1910/* Sets NIT to an upper bound for the maximum number of executions of the
1911 latch of the LOOP. If we have no reliable estimate, the function returns
1912 false, otherwise returns true. */
1913
1914bool
807e902e 1915get_max_loop_iterations (struct loop *loop, widest_int *nit)
71343877
AM
1916{
1917 if (!loop->any_upper_bound)
1918 return false;
1919
1920 *nit = loop->nb_iterations_upper_bound;
1921 return true;
1922}
1ef88893
AM
1923
1924/* Similar to get_max_loop_iterations, but returns the estimate only
1925 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
1926 on the number of iterations of LOOP could not be derived, returns -1. */
1927
1928HOST_WIDE_INT
1929get_max_loop_iterations_int (struct loop *loop)
1930{
807e902e 1931 widest_int nit;
1ef88893
AM
1932 HOST_WIDE_INT hwi_nit;
1933
1934 if (!get_max_loop_iterations (loop, &nit))
1935 return -1;
1936
807e902e 1937 if (!wi::fits_shwi_p (nit))
1ef88893
AM
1938 return -1;
1939 hwi_nit = nit.to_shwi ();
1940
1941 return hwi_nit < 0 ? -1 : hwi_nit;
1942}
1943
105e29c5
JH
1944/* Sets NIT to an upper bound for the maximum number of executions of the
1945 latch of the LOOP. If we have no reliable estimate, the function returns
1946 false, otherwise returns true. */
1947
1948bool
1949get_likely_max_loop_iterations (struct loop *loop, widest_int *nit)
1950{
1951 if (!loop->any_likely_upper_bound)
1952 return false;
1953
1954 *nit = loop->nb_iterations_likely_upper_bound;
1955 return true;
1956}
1957
1958/* Similar to get_max_loop_iterations, but returns the estimate only
1959 if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
1960 on the number of iterations of LOOP could not be derived, returns -1. */
1961
1962HOST_WIDE_INT
1963get_likely_max_loop_iterations_int (struct loop *loop)
1964{
1965 widest_int nit;
1966 HOST_WIDE_INT hwi_nit;
1967
1968 if (!get_likely_max_loop_iterations (loop, &nit))
1969 return -1;
1970
1971 if (!wi::fits_shwi_p (nit))
1972 return -1;
1973 hwi_nit = nit.to_shwi ();
1974
1975 return hwi_nit < 0 ? -1 : hwi_nit;
1976}
1977
4484a35a 1978/* Returns the loop depth of the loop BB belongs to. */
1ef88893 1979
4484a35a
AM
1980int
1981bb_loop_depth (const_basic_block bb)
1982{
1983 return bb->loop_father ? loop_depth (bb->loop_father) : 0;
1984}
08c13199
RB
1985
1986/* Marks LOOP for removal and sets LOOPS_NEED_FIXUP. */
1987
1988void
1989mark_loop_for_removal (loop_p loop)
1990{
024660c5
RB
1991 if (loop->header == NULL)
1992 return;
e4ca2139 1993 loop->former_header = loop->header;
08c13199
RB
1994 loop->header = NULL;
1995 loop->latch = NULL;
1996 loops_state_set (LOOPS_NEED_FIXUP);
1997}