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