31370.cc: Skip this test on powerpc64-*-freebsd*.
[official-gcc.git] / gcc / cfgloopmanip.c
blob33bcf4b987279f500c834564b28145b7a5ccb102
1 /* Loop manipulation code for GNU compiler.
2 Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
3 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "rtl.h"
26 #include "hard-reg-set.h"
27 #include "obstack.h"
28 #include "basic-block.h"
29 #include "cfgloop.h"
30 #include "cfglayout.h"
31 #include "cfghooks.h"
32 #include "output.h"
33 #include "tree-flow.h"
35 static void copy_loops_to (struct loop **, int,
36 struct loop *);
37 static void loop_redirect_edge (edge, basic_block);
38 static void remove_bbs (basic_block *, int);
39 static bool rpe_enum_p (const_basic_block, const void *);
40 static int find_path (edge, basic_block **);
41 static void fix_loop_placements (struct loop *, bool *);
42 static bool fix_bb_placement (basic_block);
43 static void fix_bb_placements (basic_block, bool *);
44 static void unloop (struct loop *, bool *);
46 #define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
48 /* Checks whether basic block BB is dominated by DATA. */
49 static bool
50 rpe_enum_p (const_basic_block bb, const void *data)
52 return dominated_by_p (CDI_DOMINATORS, bb, (const_basic_block) data);
55 /* Remove basic blocks BBS. NBBS is the number of the basic blocks. */
57 static void
58 remove_bbs (basic_block *bbs, int nbbs)
60 int i;
62 for (i = 0; i < nbbs; i++)
63 delete_basic_block (bbs[i]);
66 /* Find path -- i.e. the basic blocks dominated by edge E and put them
67 into array BBS, that will be allocated large enough to contain them.
68 E->dest must have exactly one predecessor for this to work (it is
69 easy to achieve and we do not put it here because we do not want to
70 alter anything by this function). The number of basic blocks in the
71 path is returned. */
72 static int
73 find_path (edge e, basic_block **bbs)
75 gcc_assert (EDGE_COUNT (e->dest->preds) <= 1);
77 /* Find bbs in the path. */
78 *bbs = XCNEWVEC (basic_block, n_basic_blocks);
79 return dfs_enumerate_from (e->dest, 0, rpe_enum_p, *bbs,
80 n_basic_blocks, e->dest);
83 /* Fix placement of basic block BB inside loop hierarchy --
84 Let L be a loop to that BB belongs. Then every successor of BB must either
85 1) belong to some superloop of loop L, or
86 2) be a header of loop K such that K->outer is superloop of L
87 Returns true if we had to move BB into other loop to enforce this condition,
88 false if the placement of BB was already correct (provided that placements
89 of its successors are correct). */
90 static bool
91 fix_bb_placement (basic_block bb)
93 edge e;
94 edge_iterator ei;
95 struct loop *loop = current_loops->tree_root, *act;
97 FOR_EACH_EDGE (e, ei, bb->succs)
99 if (e->dest == EXIT_BLOCK_PTR)
100 continue;
102 act = e->dest->loop_father;
103 if (act->header == e->dest)
104 act = loop_outer (act);
106 if (flow_loop_nested_p (loop, act))
107 loop = act;
110 if (loop == bb->loop_father)
111 return false;
113 remove_bb_from_loops (bb);
114 add_bb_to_loop (bb, loop);
116 return true;
119 /* Fix placement of LOOP inside loop tree, i.e. find the innermost superloop
120 of LOOP to that leads at least one exit edge of LOOP, and set it
121 as the immediate superloop of LOOP. Return true if the immediate superloop
122 of LOOP changed. */
124 static bool
125 fix_loop_placement (struct loop *loop)
127 unsigned i;
128 edge e;
129 VEC (edge, heap) *exits = get_loop_exit_edges (loop);
130 struct loop *father = current_loops->tree_root, *act;
131 bool ret = false;
133 FOR_EACH_VEC_ELT (edge, exits, i, e)
135 act = find_common_loop (loop, e->dest->loop_father);
136 if (flow_loop_nested_p (father, act))
137 father = act;
140 if (father != loop_outer (loop))
142 for (act = loop_outer (loop); act != father; act = loop_outer (act))
143 act->num_nodes -= loop->num_nodes;
144 flow_loop_tree_node_remove (loop);
145 flow_loop_tree_node_add (father, loop);
147 /* The exit edges of LOOP no longer exits its original immediate
148 superloops; remove them from the appropriate exit lists. */
149 FOR_EACH_VEC_ELT (edge, exits, i, e)
150 rescan_loop_exit (e, false, false);
152 ret = true;
155 VEC_free (edge, heap, exits);
156 return ret;
159 /* Fix placements of basic blocks inside loop hierarchy stored in loops; i.e.
160 enforce condition condition stated in description of fix_bb_placement. We
161 start from basic block FROM that had some of its successors removed, so that
162 his placement no longer has to be correct, and iteratively fix placement of
163 its predecessors that may change if placement of FROM changed. Also fix
164 placement of subloops of FROM->loop_father, that might also be altered due
165 to this change; the condition for them is similar, except that instead of
166 successors we consider edges coming out of the loops.
168 If the changes may invalidate the information about irreducible regions,
169 IRRED_INVALIDATED is set to true. */
171 static void
172 fix_bb_placements (basic_block from,
173 bool *irred_invalidated)
175 sbitmap in_queue;
176 basic_block *queue, *qtop, *qbeg, *qend;
177 struct loop *base_loop, *target_loop;
178 edge e;
180 /* We pass through blocks back-reachable from FROM, testing whether some
181 of their successors moved to outer loop. It may be necessary to
182 iterate several times, but it is finite, as we stop unless we move
183 the basic block up the loop structure. The whole story is a bit
184 more complicated due to presence of subloops, those are moved using
185 fix_loop_placement. */
187 base_loop = from->loop_father;
188 /* If we are already in the outermost loop, the basic blocks cannot be moved
189 outside of it. If FROM is the header of the base loop, it cannot be moved
190 outside of it, either. In both cases, we can end now. */
191 if (base_loop == current_loops->tree_root
192 || from == base_loop->header)
193 return;
195 in_queue = sbitmap_alloc (last_basic_block);
196 sbitmap_zero (in_queue);
197 SET_BIT (in_queue, from->index);
198 /* Prevent us from going out of the base_loop. */
199 SET_BIT (in_queue, base_loop->header->index);
201 queue = XNEWVEC (basic_block, base_loop->num_nodes + 1);
202 qtop = queue + base_loop->num_nodes + 1;
203 qbeg = queue;
204 qend = queue + 1;
205 *qbeg = from;
207 while (qbeg != qend)
209 edge_iterator ei;
210 from = *qbeg;
211 qbeg++;
212 if (qbeg == qtop)
213 qbeg = queue;
214 RESET_BIT (in_queue, from->index);
216 if (from->loop_father->header == from)
218 /* Subloop header, maybe move the loop upward. */
219 if (!fix_loop_placement (from->loop_father))
220 continue;
221 target_loop = loop_outer (from->loop_father);
223 else
225 /* Ordinary basic block. */
226 if (!fix_bb_placement (from))
227 continue;
228 target_loop = from->loop_father;
231 FOR_EACH_EDGE (e, ei, from->succs)
233 if (e->flags & EDGE_IRREDUCIBLE_LOOP)
234 *irred_invalidated = true;
237 /* Something has changed, insert predecessors into queue. */
238 FOR_EACH_EDGE (e, ei, from->preds)
240 basic_block pred = e->src;
241 struct loop *nca;
243 if (e->flags & EDGE_IRREDUCIBLE_LOOP)
244 *irred_invalidated = true;
246 if (TEST_BIT (in_queue, pred->index))
247 continue;
249 /* If it is subloop, then it either was not moved, or
250 the path up the loop tree from base_loop do not contain
251 it. */
252 nca = find_common_loop (pred->loop_father, base_loop);
253 if (pred->loop_father != base_loop
254 && (nca == base_loop
255 || nca != pred->loop_father))
256 pred = pred->loop_father->header;
257 else if (!flow_loop_nested_p (target_loop, pred->loop_father))
259 /* If PRED is already higher in the loop hierarchy than the
260 TARGET_LOOP to that we moved FROM, the change of the position
261 of FROM does not affect the position of PRED, so there is no
262 point in processing it. */
263 continue;
266 if (TEST_BIT (in_queue, pred->index))
267 continue;
269 /* Schedule the basic block. */
270 *qend = pred;
271 qend++;
272 if (qend == qtop)
273 qend = queue;
274 SET_BIT (in_queue, pred->index);
277 free (in_queue);
278 free (queue);
281 /* Removes path beginning at edge E, i.e. remove basic blocks dominated by E
282 and update loop structures and dominators. Return true if we were able
283 to remove the path, false otherwise (and nothing is affected then). */
284 bool
285 remove_path (edge e)
287 edge ae;
288 basic_block *rem_bbs, *bord_bbs, from, bb;
289 VEC (basic_block, heap) *dom_bbs;
290 int i, nrem, n_bord_bbs;
291 sbitmap seen;
292 bool irred_invalidated = false;
293 edge_iterator ei;
294 struct loop *l, *f;
296 if (!can_remove_branch_p (e))
297 return false;
299 /* Keep track of whether we need to update information about irreducible
300 regions. This is the case if the removed area is a part of the
301 irreducible region, or if the set of basic blocks that belong to a loop
302 that is inside an irreducible region is changed, or if such a loop is
303 removed. */
304 if (e->flags & EDGE_IRREDUCIBLE_LOOP)
305 irred_invalidated = true;
307 /* We need to check whether basic blocks are dominated by the edge
308 e, but we only have basic block dominators. This is easy to
309 fix -- when e->dest has exactly one predecessor, this corresponds
310 to blocks dominated by e->dest, if not, split the edge. */
311 if (!single_pred_p (e->dest))
312 e = single_pred_edge (split_edge (e));
314 /* It may happen that by removing path we remove one or more loops
315 we belong to. In this case first unloop the loops, then proceed
316 normally. We may assume that e->dest is not a header of any loop,
317 as it now has exactly one predecessor. */
318 for (l = e->src->loop_father; loop_outer (l); l = f)
320 f = loop_outer (l);
321 if (dominated_by_p (CDI_DOMINATORS, l->latch, e->dest))
322 unloop (l, &irred_invalidated);
325 /* Identify the path. */
326 nrem = find_path (e, &rem_bbs);
328 n_bord_bbs = 0;
329 bord_bbs = XCNEWVEC (basic_block, n_basic_blocks);
330 seen = sbitmap_alloc (last_basic_block);
331 sbitmap_zero (seen);
333 /* Find "border" hexes -- i.e. those with predecessor in removed path. */
334 for (i = 0; i < nrem; i++)
335 SET_BIT (seen, rem_bbs[i]->index);
336 if (!irred_invalidated)
337 FOR_EACH_EDGE (ae, ei, e->src->succs)
338 if (ae != e && ae->dest != EXIT_BLOCK_PTR && !TEST_BIT (seen, ae->dest->index)
339 && ae->flags & EDGE_IRREDUCIBLE_LOOP)
340 irred_invalidated = true;
341 for (i = 0; i < nrem; i++)
343 bb = rem_bbs[i];
344 FOR_EACH_EDGE (ae, ei, rem_bbs[i]->succs)
345 if (ae->dest != EXIT_BLOCK_PTR && !TEST_BIT (seen, ae->dest->index))
347 SET_BIT (seen, ae->dest->index);
348 bord_bbs[n_bord_bbs++] = ae->dest;
350 if (ae->flags & EDGE_IRREDUCIBLE_LOOP)
351 irred_invalidated = true;
355 /* Remove the path. */
356 from = e->src;
357 remove_branch (e);
358 dom_bbs = NULL;
360 /* Cancel loops contained in the path. */
361 for (i = 0; i < nrem; i++)
362 if (rem_bbs[i]->loop_father->header == rem_bbs[i])
363 cancel_loop_tree (rem_bbs[i]->loop_father);
365 remove_bbs (rem_bbs, nrem);
366 free (rem_bbs);
368 /* Find blocks whose dominators may be affected. */
369 sbitmap_zero (seen);
370 for (i = 0; i < n_bord_bbs; i++)
372 basic_block ldom;
374 bb = get_immediate_dominator (CDI_DOMINATORS, bord_bbs[i]);
375 if (TEST_BIT (seen, bb->index))
376 continue;
377 SET_BIT (seen, bb->index);
379 for (ldom = first_dom_son (CDI_DOMINATORS, bb);
380 ldom;
381 ldom = next_dom_son (CDI_DOMINATORS, ldom))
382 if (!dominated_by_p (CDI_DOMINATORS, from, ldom))
383 VEC_safe_push (basic_block, heap, dom_bbs, ldom);
386 free (seen);
388 /* Recount dominators. */
389 iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, true);
390 VEC_free (basic_block, heap, dom_bbs);
391 free (bord_bbs);
393 /* Fix placements of basic blocks inside loops and the placement of
394 loops in the loop tree. */
395 fix_bb_placements (from, &irred_invalidated);
396 fix_loop_placements (from->loop_father, &irred_invalidated);
398 if (irred_invalidated
399 && loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
400 mark_irreducible_loops ();
402 return true;
405 /* Creates place for a new LOOP in loops structure. */
407 static void
408 place_new_loop (struct loop *loop)
410 loop->num = number_of_loops ();
411 VEC_safe_push (loop_p, gc, current_loops->larray, loop);
414 /* Given LOOP structure with filled header and latch, find the body of the
415 corresponding loop and add it to loops tree. Insert the LOOP as a son of
416 outer. */
418 void
419 add_loop (struct loop *loop, struct loop *outer)
421 basic_block *bbs;
422 int i, n;
423 struct loop *subloop;
424 edge e;
425 edge_iterator ei;
427 /* Add it to loop structure. */
428 place_new_loop (loop);
429 flow_loop_tree_node_add (outer, loop);
431 /* Find its nodes. */
432 bbs = XNEWVEC (basic_block, n_basic_blocks);
433 n = get_loop_body_with_size (loop, bbs, n_basic_blocks);
435 for (i = 0; i < n; i++)
437 if (bbs[i]->loop_father == outer)
439 remove_bb_from_loops (bbs[i]);
440 add_bb_to_loop (bbs[i], loop);
441 continue;
444 loop->num_nodes++;
446 /* If we find a direct subloop of OUTER, move it to LOOP. */
447 subloop = bbs[i]->loop_father;
448 if (loop_outer (subloop) == outer
449 && subloop->header == bbs[i])
451 flow_loop_tree_node_remove (subloop);
452 flow_loop_tree_node_add (loop, subloop);
456 /* Update the information about loop exit edges. */
457 for (i = 0; i < n; i++)
459 FOR_EACH_EDGE (e, ei, bbs[i]->succs)
461 rescan_loop_exit (e, false, false);
465 free (bbs);
468 /* Multiply all frequencies in LOOP by NUM/DEN. */
469 void
470 scale_loop_frequencies (struct loop *loop, int num, int den)
472 basic_block *bbs;
474 bbs = get_loop_body (loop);
475 scale_bbs_frequencies_int (bbs, loop->num_nodes, num, den);
476 free (bbs);
479 /* Recompute dominance information for basic blocks outside LOOP. */
481 static void
482 update_dominators_in_loop (struct loop *loop)
484 VEC (basic_block, heap) *dom_bbs = NULL;
485 sbitmap seen;
486 basic_block *body;
487 unsigned i;
489 seen = sbitmap_alloc (last_basic_block);
490 sbitmap_zero (seen);
491 body = get_loop_body (loop);
493 for (i = 0; i < loop->num_nodes; i++)
494 SET_BIT (seen, body[i]->index);
496 for (i = 0; i < loop->num_nodes; i++)
498 basic_block ldom;
500 for (ldom = first_dom_son (CDI_DOMINATORS, body[i]);
501 ldom;
502 ldom = next_dom_son (CDI_DOMINATORS, ldom))
503 if (!TEST_BIT (seen, ldom->index))
505 SET_BIT (seen, ldom->index);
506 VEC_safe_push (basic_block, heap, dom_bbs, ldom);
510 iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false);
511 free (body);
512 free (seen);
513 VEC_free (basic_block, heap, dom_bbs);
516 /* Creates an if region as shown above. CONDITION is used to create
517 the test for the if.
520 | ------------- -------------
521 | | pred_bb | | pred_bb |
522 | ------------- -------------
523 | | |
524 | | | ENTRY_EDGE
525 | | ENTRY_EDGE V
526 | | ====> -------------
527 | | | cond_bb |
528 | | | CONDITION |
529 | | -------------
530 | V / \
531 | ------------- e_false / \ e_true
532 | | succ_bb | V V
533 | ------------- ----------- -----------
534 | | false_bb | | true_bb |
535 | ----------- -----------
536 | \ /
537 | \ /
538 | V V
539 | -------------
540 | | join_bb |
541 | -------------
542 | | exit_edge (result)
544 | -----------
545 | | succ_bb |
546 | -----------
550 edge
551 create_empty_if_region_on_edge (edge entry_edge, tree condition)
554 basic_block cond_bb, true_bb, false_bb, join_bb;
555 edge e_true, e_false, exit_edge;
556 gimple cond_stmt;
557 tree simple_cond;
558 gimple_stmt_iterator gsi;
560 cond_bb = split_edge (entry_edge);
562 /* Insert condition in cond_bb. */
563 gsi = gsi_last_bb (cond_bb);
564 simple_cond =
565 force_gimple_operand_gsi (&gsi, condition, true, NULL,
566 false, GSI_NEW_STMT);
567 cond_stmt = gimple_build_cond_from_tree (simple_cond, NULL_TREE, NULL_TREE);
568 gsi = gsi_last_bb (cond_bb);
569 gsi_insert_after (&gsi, cond_stmt, GSI_NEW_STMT);
571 join_bb = split_edge (single_succ_edge (cond_bb));
573 e_true = single_succ_edge (cond_bb);
574 true_bb = split_edge (e_true);
576 e_false = make_edge (cond_bb, join_bb, 0);
577 false_bb = split_edge (e_false);
579 e_true->flags &= ~EDGE_FALLTHRU;
580 e_true->flags |= EDGE_TRUE_VALUE;
581 e_false->flags &= ~EDGE_FALLTHRU;
582 e_false->flags |= EDGE_FALSE_VALUE;
584 set_immediate_dominator (CDI_DOMINATORS, cond_bb, entry_edge->src);
585 set_immediate_dominator (CDI_DOMINATORS, true_bb, cond_bb);
586 set_immediate_dominator (CDI_DOMINATORS, false_bb, cond_bb);
587 set_immediate_dominator (CDI_DOMINATORS, join_bb, cond_bb);
589 exit_edge = single_succ_edge (join_bb);
591 if (single_pred_p (exit_edge->dest))
592 set_immediate_dominator (CDI_DOMINATORS, exit_edge->dest, join_bb);
594 return exit_edge;
597 /* create_empty_loop_on_edge
599 | - pred_bb - ------ pred_bb ------
600 | | | | iv0 = initial_value |
601 | -----|----- ---------|-----------
602 | | ______ | entry_edge
603 | | entry_edge / | |
604 | | ====> | -V---V- loop_header -------------
605 | V | | iv_before = phi (iv0, iv_after) |
606 | - succ_bb - | ---|-----------------------------
607 | | | | |
608 | ----------- | ---V--- loop_body ---------------
609 | | | iv_after = iv_before + stride |
610 | | | if (iv_before < upper_bound) |
611 | | ---|--------------\--------------
612 | | | \ exit_e
613 | | V \
614 | | - loop_latch - V- succ_bb -
615 | | | | | |
616 | | /------------- -----------
617 | \ ___ /
619 Creates an empty loop as shown above, the IV_BEFORE is the SSA_NAME
620 that is used before the increment of IV. IV_BEFORE should be used for
621 adding code to the body that uses the IV. OUTER is the outer loop in
622 which the new loop should be inserted.
624 Both INITIAL_VALUE and UPPER_BOUND expressions are gimplified and
625 inserted on the loop entry edge. This implies that this function
626 should be used only when the UPPER_BOUND expression is a loop
627 invariant. */
629 struct loop *
630 create_empty_loop_on_edge (edge entry_edge,
631 tree initial_value,
632 tree stride, tree upper_bound,
633 tree iv,
634 tree *iv_before,
635 tree *iv_after,
636 struct loop *outer)
638 basic_block loop_header, loop_latch, succ_bb, pred_bb;
639 struct loop *loop;
640 gimple_stmt_iterator gsi;
641 gimple_seq stmts;
642 gimple cond_expr;
643 tree exit_test;
644 edge exit_e;
645 int prob;
647 gcc_assert (entry_edge && initial_value && stride && upper_bound && iv);
649 /* Create header, latch and wire up the loop. */
650 pred_bb = entry_edge->src;
651 loop_header = split_edge (entry_edge);
652 loop_latch = split_edge (single_succ_edge (loop_header));
653 succ_bb = single_succ (loop_latch);
654 make_edge (loop_header, succ_bb, 0);
655 redirect_edge_succ_nodup (single_succ_edge (loop_latch), loop_header);
657 /* Set immediate dominator information. */
658 set_immediate_dominator (CDI_DOMINATORS, loop_header, pred_bb);
659 set_immediate_dominator (CDI_DOMINATORS, loop_latch, loop_header);
660 set_immediate_dominator (CDI_DOMINATORS, succ_bb, loop_header);
662 /* Initialize a loop structure and put it in a loop hierarchy. */
663 loop = alloc_loop ();
664 loop->header = loop_header;
665 loop->latch = loop_latch;
666 add_loop (loop, outer);
668 /* TODO: Fix frequencies and counts. */
669 prob = REG_BR_PROB_BASE / 2;
671 scale_loop_frequencies (loop, REG_BR_PROB_BASE - prob, REG_BR_PROB_BASE);
673 /* Update dominators. */
674 update_dominators_in_loop (loop);
676 /* Modify edge flags. */
677 exit_e = single_exit (loop);
678 exit_e->flags = EDGE_LOOP_EXIT | EDGE_FALSE_VALUE;
679 single_pred_edge (loop_latch)->flags = EDGE_TRUE_VALUE;
681 /* Construct IV code in loop. */
682 initial_value = force_gimple_operand (initial_value, &stmts, true, iv);
683 if (stmts)
685 gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
686 gsi_commit_edge_inserts ();
689 upper_bound = force_gimple_operand (upper_bound, &stmts, true, NULL);
690 if (stmts)
692 gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
693 gsi_commit_edge_inserts ();
696 gsi = gsi_last_bb (loop_header);
697 create_iv (initial_value, stride, iv, loop, &gsi, false,
698 iv_before, iv_after);
700 /* Insert loop exit condition. */
701 cond_expr = gimple_build_cond
702 (LT_EXPR, *iv_before, upper_bound, NULL_TREE, NULL_TREE);
704 exit_test = gimple_cond_lhs (cond_expr);
705 exit_test = force_gimple_operand_gsi (&gsi, exit_test, true, NULL,
706 false, GSI_NEW_STMT);
707 gimple_cond_set_lhs (cond_expr, exit_test);
708 gsi = gsi_last_bb (exit_e->src);
709 gsi_insert_after (&gsi, cond_expr, GSI_NEW_STMT);
711 split_block_after_labels (loop_header);
713 return loop;
716 /* Make area between HEADER_EDGE and LATCH_EDGE a loop by connecting
717 latch to header and update loop tree and dominators
718 accordingly. Everything between them plus LATCH_EDGE destination must
719 be dominated by HEADER_EDGE destination, and back-reachable from
720 LATCH_EDGE source. HEADER_EDGE is redirected to basic block SWITCH_BB,
721 FALSE_EDGE of SWITCH_BB to original destination of HEADER_EDGE and
722 TRUE_EDGE of SWITCH_BB to original destination of LATCH_EDGE.
723 Returns the newly created loop. Frequencies and counts in the new loop
724 are scaled by FALSE_SCALE and in the old one by TRUE_SCALE. */
726 struct loop *
727 loopify (edge latch_edge, edge header_edge,
728 basic_block switch_bb, edge true_edge, edge false_edge,
729 bool redirect_all_edges, unsigned true_scale, unsigned false_scale)
731 basic_block succ_bb = latch_edge->dest;
732 basic_block pred_bb = header_edge->src;
733 struct loop *loop = alloc_loop ();
734 struct loop *outer = loop_outer (succ_bb->loop_father);
735 int freq;
736 gcov_type cnt;
737 edge e;
738 edge_iterator ei;
740 loop->header = header_edge->dest;
741 loop->latch = latch_edge->src;
743 freq = EDGE_FREQUENCY (header_edge);
744 cnt = header_edge->count;
746 /* Redirect edges. */
747 loop_redirect_edge (latch_edge, loop->header);
748 loop_redirect_edge (true_edge, succ_bb);
750 /* During loop versioning, one of the switch_bb edge is already properly
751 set. Do not redirect it again unless redirect_all_edges is true. */
752 if (redirect_all_edges)
754 loop_redirect_edge (header_edge, switch_bb);
755 loop_redirect_edge (false_edge, loop->header);
757 /* Update dominators. */
758 set_immediate_dominator (CDI_DOMINATORS, switch_bb, pred_bb);
759 set_immediate_dominator (CDI_DOMINATORS, loop->header, switch_bb);
762 set_immediate_dominator (CDI_DOMINATORS, succ_bb, switch_bb);
764 /* Compute new loop. */
765 add_loop (loop, outer);
767 /* Add switch_bb to appropriate loop. */
768 if (switch_bb->loop_father)
769 remove_bb_from_loops (switch_bb);
770 add_bb_to_loop (switch_bb, outer);
772 /* Fix frequencies. */
773 if (redirect_all_edges)
775 switch_bb->frequency = freq;
776 switch_bb->count = cnt;
777 FOR_EACH_EDGE (e, ei, switch_bb->succs)
779 e->count = (switch_bb->count * e->probability) / REG_BR_PROB_BASE;
782 scale_loop_frequencies (loop, false_scale, REG_BR_PROB_BASE);
783 scale_loop_frequencies (succ_bb->loop_father, true_scale, REG_BR_PROB_BASE);
784 update_dominators_in_loop (loop);
786 return loop;
789 /* Remove the latch edge of a LOOP and update loops to indicate that
790 the LOOP was removed. After this function, original loop latch will
791 have no successor, which caller is expected to fix somehow.
793 If this may cause the information about irreducible regions to become
794 invalid, IRRED_INVALIDATED is set to true. */
796 static void
797 unloop (struct loop *loop, bool *irred_invalidated)
799 basic_block *body;
800 struct loop *ploop;
801 unsigned i, n;
802 basic_block latch = loop->latch;
803 bool dummy = false;
805 if (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP)
806 *irred_invalidated = true;
808 /* This is relatively straightforward. The dominators are unchanged, as
809 loop header dominates loop latch, so the only thing we have to care of
810 is the placement of loops and basic blocks inside the loop tree. We
811 move them all to the loop->outer, and then let fix_bb_placements do
812 its work. */
814 body = get_loop_body (loop);
815 n = loop->num_nodes;
816 for (i = 0; i < n; i++)
817 if (body[i]->loop_father == loop)
819 remove_bb_from_loops (body[i]);
820 add_bb_to_loop (body[i], loop_outer (loop));
822 free(body);
824 while (loop->inner)
826 ploop = loop->inner;
827 flow_loop_tree_node_remove (ploop);
828 flow_loop_tree_node_add (loop_outer (loop), ploop);
831 /* Remove the loop and free its data. */
832 delete_loop (loop);
834 remove_edge (single_succ_edge (latch));
836 /* We do not pass IRRED_INVALIDATED to fix_bb_placements here, as even if
837 there is an irreducible region inside the cancelled loop, the flags will
838 be still correct. */
839 fix_bb_placements (latch, &dummy);
842 /* Fix placement of superloops of LOOP inside loop tree, i.e. ensure that
843 condition stated in description of fix_loop_placement holds for them.
844 It is used in case when we removed some edges coming out of LOOP, which
845 may cause the right placement of LOOP inside loop tree to change.
847 IRRED_INVALIDATED is set to true if a change in the loop structures might
848 invalidate the information about irreducible regions. */
850 static void
851 fix_loop_placements (struct loop *loop, bool *irred_invalidated)
853 struct loop *outer;
855 while (loop_outer (loop))
857 outer = loop_outer (loop);
858 if (!fix_loop_placement (loop))
859 break;
861 /* Changing the placement of a loop in the loop tree may alter the
862 validity of condition 2) of the description of fix_bb_placement
863 for its preheader, because the successor is the header and belongs
864 to the loop. So call fix_bb_placements to fix up the placement
865 of the preheader and (possibly) of its predecessors. */
866 fix_bb_placements (loop_preheader_edge (loop)->src,
867 irred_invalidated);
868 loop = outer;
872 /* Copies copy of LOOP as subloop of TARGET loop, placing newly
873 created loop into loops structure. */
874 struct loop *
875 duplicate_loop (struct loop *loop, struct loop *target)
877 struct loop *cloop;
878 cloop = alloc_loop ();
879 place_new_loop (cloop);
881 /* Mark the new loop as copy of LOOP. */
882 set_loop_copy (loop, cloop);
884 /* Add it to target. */
885 flow_loop_tree_node_add (target, cloop);
887 return cloop;
890 /* Copies structure of subloops of LOOP into TARGET loop, placing
891 newly created loops into loop tree. */
892 void
893 duplicate_subloops (struct loop *loop, struct loop *target)
895 struct loop *aloop, *cloop;
897 for (aloop = loop->inner; aloop; aloop = aloop->next)
899 cloop = duplicate_loop (aloop, target);
900 duplicate_subloops (aloop, cloop);
904 /* Copies structure of subloops of N loops, stored in array COPIED_LOOPS,
905 into TARGET loop, placing newly created loops into loop tree. */
906 static void
907 copy_loops_to (struct loop **copied_loops, int n, struct loop *target)
909 struct loop *aloop;
910 int i;
912 for (i = 0; i < n; i++)
914 aloop = duplicate_loop (copied_loops[i], target);
915 duplicate_subloops (copied_loops[i], aloop);
919 /* Redirects edge E to basic block DEST. */
920 static void
921 loop_redirect_edge (edge e, basic_block dest)
923 if (e->dest == dest)
924 return;
926 redirect_edge_and_branch_force (e, dest);
929 /* Check whether LOOP's body can be duplicated. */
930 bool
931 can_duplicate_loop_p (const struct loop *loop)
933 int ret;
934 basic_block *bbs = get_loop_body (loop);
936 ret = can_copy_bbs_p (bbs, loop->num_nodes);
937 free (bbs);
939 return ret;
942 /* Sets probability and count of edge E to zero. The probability and count
943 is redistributed evenly to the remaining edges coming from E->src. */
945 static void
946 set_zero_probability (edge e)
948 basic_block bb = e->src;
949 edge_iterator ei;
950 edge ae, last = NULL;
951 unsigned n = EDGE_COUNT (bb->succs);
952 gcov_type cnt = e->count, cnt1;
953 unsigned prob = e->probability, prob1;
955 gcc_assert (n > 1);
956 cnt1 = cnt / (n - 1);
957 prob1 = prob / (n - 1);
959 FOR_EACH_EDGE (ae, ei, bb->succs)
961 if (ae == e)
962 continue;
964 ae->probability += prob1;
965 ae->count += cnt1;
966 last = ae;
969 /* Move the rest to one of the edges. */
970 last->probability += prob % (n - 1);
971 last->count += cnt % (n - 1);
973 e->probability = 0;
974 e->count = 0;
977 /* Duplicates body of LOOP to given edge E NDUPL times. Takes care of updating
978 loop structure and dominators. E's destination must be LOOP header for
979 this to work, i.e. it must be entry or latch edge of this loop; these are
980 unique, as the loops must have preheaders for this function to work
981 correctly (in case E is latch, the function unrolls the loop, if E is entry
982 edge, it peels the loop). Store edges created by copying ORIG edge from
983 copies corresponding to set bits in WONT_EXIT bitmap (bit 0 corresponds to
984 original LOOP body, the other copies are numbered in order given by control
985 flow through them) into TO_REMOVE array. Returns false if duplication is
986 impossible. */
988 bool
989 duplicate_loop_to_header_edge (struct loop *loop, edge e,
990 unsigned int ndupl, sbitmap wont_exit,
991 edge orig, VEC (edge, heap) **to_remove,
992 int flags)
994 struct loop *target, *aloop;
995 struct loop **orig_loops;
996 unsigned n_orig_loops;
997 basic_block header = loop->header, latch = loop->latch;
998 basic_block *new_bbs, *bbs, *first_active;
999 basic_block new_bb, bb, first_active_latch = NULL;
1000 edge ae, latch_edge;
1001 edge spec_edges[2], new_spec_edges[2];
1002 #define SE_LATCH 0
1003 #define SE_ORIG 1
1004 unsigned i, j, n;
1005 int is_latch = (latch == e->src);
1006 int scale_act = 0, *scale_step = NULL, scale_main = 0;
1007 int scale_after_exit = 0;
1008 int p, freq_in, freq_le, freq_out_orig;
1009 int prob_pass_thru, prob_pass_wont_exit, prob_pass_main;
1010 int add_irreducible_flag;
1011 basic_block place_after;
1012 bitmap bbs_to_scale = NULL;
1013 bitmap_iterator bi;
1015 gcc_assert (e->dest == loop->header);
1016 gcc_assert (ndupl > 0);
1018 if (orig)
1020 /* Orig must be edge out of the loop. */
1021 gcc_assert (flow_bb_inside_loop_p (loop, orig->src));
1022 gcc_assert (!flow_bb_inside_loop_p (loop, orig->dest));
1025 n = loop->num_nodes;
1026 bbs = get_loop_body_in_dom_order (loop);
1027 gcc_assert (bbs[0] == loop->header);
1028 gcc_assert (bbs[n - 1] == loop->latch);
1030 /* Check whether duplication is possible. */
1031 if (!can_copy_bbs_p (bbs, loop->num_nodes))
1033 free (bbs);
1034 return false;
1036 new_bbs = XNEWVEC (basic_block, loop->num_nodes);
1038 /* In case we are doing loop peeling and the loop is in the middle of
1039 irreducible region, the peeled copies will be inside it too. */
1040 add_irreducible_flag = e->flags & EDGE_IRREDUCIBLE_LOOP;
1041 gcc_assert (!is_latch || !add_irreducible_flag);
1043 /* Find edge from latch. */
1044 latch_edge = loop_latch_edge (loop);
1046 if (flags & DLTHE_FLAG_UPDATE_FREQ)
1048 /* Calculate coefficients by that we have to scale frequencies
1049 of duplicated loop bodies. */
1050 freq_in = header->frequency;
1051 freq_le = EDGE_FREQUENCY (latch_edge);
1052 if (freq_in == 0)
1053 freq_in = 1;
1054 if (freq_in < freq_le)
1055 freq_in = freq_le;
1056 freq_out_orig = orig ? EDGE_FREQUENCY (orig) : freq_in - freq_le;
1057 if (freq_out_orig > freq_in - freq_le)
1058 freq_out_orig = freq_in - freq_le;
1059 prob_pass_thru = RDIV (REG_BR_PROB_BASE * freq_le, freq_in);
1060 prob_pass_wont_exit =
1061 RDIV (REG_BR_PROB_BASE * (freq_le + freq_out_orig), freq_in);
1063 if (orig
1064 && REG_BR_PROB_BASE - orig->probability != 0)
1066 /* The blocks that are dominated by a removed exit edge ORIG have
1067 frequencies scaled by this. */
1068 scale_after_exit = RDIV (REG_BR_PROB_BASE * REG_BR_PROB_BASE,
1069 REG_BR_PROB_BASE - orig->probability);
1070 bbs_to_scale = BITMAP_ALLOC (NULL);
1071 for (i = 0; i < n; i++)
1073 if (bbs[i] != orig->src
1074 && dominated_by_p (CDI_DOMINATORS, bbs[i], orig->src))
1075 bitmap_set_bit (bbs_to_scale, i);
1079 scale_step = XNEWVEC (int, ndupl);
1081 for (i = 1; i <= ndupl; i++)
1082 scale_step[i - 1] = TEST_BIT (wont_exit, i)
1083 ? prob_pass_wont_exit
1084 : prob_pass_thru;
1086 /* Complete peeling is special as the probability of exit in last
1087 copy becomes 1. */
1088 if (flags & DLTHE_FLAG_COMPLETTE_PEEL)
1090 int wanted_freq = EDGE_FREQUENCY (e);
1092 if (wanted_freq > freq_in)
1093 wanted_freq = freq_in;
1095 gcc_assert (!is_latch);
1096 /* First copy has frequency of incoming edge. Each subsequent
1097 frequency should be reduced by prob_pass_wont_exit. Caller
1098 should've managed the flags so all except for original loop
1099 has won't exist set. */
1100 scale_act = RDIV (wanted_freq * REG_BR_PROB_BASE, freq_in);
1101 /* Now simulate the duplication adjustments and compute header
1102 frequency of the last copy. */
1103 for (i = 0; i < ndupl; i++)
1104 wanted_freq = RDIV (wanted_freq * scale_step[i], REG_BR_PROB_BASE);
1105 scale_main = RDIV (wanted_freq * REG_BR_PROB_BASE, freq_in);
1107 else if (is_latch)
1109 prob_pass_main = TEST_BIT (wont_exit, 0)
1110 ? prob_pass_wont_exit
1111 : prob_pass_thru;
1112 p = prob_pass_main;
1113 scale_main = REG_BR_PROB_BASE;
1114 for (i = 0; i < ndupl; i++)
1116 scale_main += p;
1117 p = RDIV (p * scale_step[i], REG_BR_PROB_BASE);
1119 scale_main = RDIV (REG_BR_PROB_BASE * REG_BR_PROB_BASE, scale_main);
1120 scale_act = RDIV (scale_main * prob_pass_main, REG_BR_PROB_BASE);
1122 else
1124 scale_main = REG_BR_PROB_BASE;
1125 for (i = 0; i < ndupl; i++)
1126 scale_main = RDIV (scale_main * scale_step[i], REG_BR_PROB_BASE);
1127 scale_act = REG_BR_PROB_BASE - prob_pass_thru;
1129 for (i = 0; i < ndupl; i++)
1130 gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE);
1131 gcc_assert (scale_main >= 0 && scale_main <= REG_BR_PROB_BASE
1132 && scale_act >= 0 && scale_act <= REG_BR_PROB_BASE);
1135 /* Loop the new bbs will belong to. */
1136 target = e->src->loop_father;
1138 /* Original loops. */
1139 n_orig_loops = 0;
1140 for (aloop = loop->inner; aloop; aloop = aloop->next)
1141 n_orig_loops++;
1142 orig_loops = XCNEWVEC (struct loop *, n_orig_loops);
1143 for (aloop = loop->inner, i = 0; aloop; aloop = aloop->next, i++)
1144 orig_loops[i] = aloop;
1146 set_loop_copy (loop, target);
1148 first_active = XNEWVEC (basic_block, n);
1149 if (is_latch)
1151 memcpy (first_active, bbs, n * sizeof (basic_block));
1152 first_active_latch = latch;
1155 spec_edges[SE_ORIG] = orig;
1156 spec_edges[SE_LATCH] = latch_edge;
1158 place_after = e->src;
1159 for (j = 0; j < ndupl; j++)
1161 /* Copy loops. */
1162 copy_loops_to (orig_loops, n_orig_loops, target);
1164 /* Copy bbs. */
1165 copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop,
1166 place_after);
1167 place_after = new_spec_edges[SE_LATCH]->src;
1169 if (flags & DLTHE_RECORD_COPY_NUMBER)
1170 for (i = 0; i < n; i++)
1172 gcc_assert (!new_bbs[i]->aux);
1173 new_bbs[i]->aux = (void *)(size_t)(j + 1);
1176 /* Note whether the blocks and edges belong to an irreducible loop. */
1177 if (add_irreducible_flag)
1179 for (i = 0; i < n; i++)
1180 new_bbs[i]->flags |= BB_DUPLICATED;
1181 for (i = 0; i < n; i++)
1183 edge_iterator ei;
1184 new_bb = new_bbs[i];
1185 if (new_bb->loop_father == target)
1186 new_bb->flags |= BB_IRREDUCIBLE_LOOP;
1188 FOR_EACH_EDGE (ae, ei, new_bb->succs)
1189 if ((ae->dest->flags & BB_DUPLICATED)
1190 && (ae->src->loop_father == target
1191 || ae->dest->loop_father == target))
1192 ae->flags |= EDGE_IRREDUCIBLE_LOOP;
1194 for (i = 0; i < n; i++)
1195 new_bbs[i]->flags &= ~BB_DUPLICATED;
1198 /* Redirect the special edges. */
1199 if (is_latch)
1201 redirect_edge_and_branch_force (latch_edge, new_bbs[0]);
1202 redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
1203 loop->header);
1204 set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], latch);
1205 latch = loop->latch = new_bbs[n - 1];
1206 e = latch_edge = new_spec_edges[SE_LATCH];
1208 else
1210 redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
1211 loop->header);
1212 redirect_edge_and_branch_force (e, new_bbs[0]);
1213 set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], e->src);
1214 e = new_spec_edges[SE_LATCH];
1217 /* Record exit edge in this copy. */
1218 if (orig && TEST_BIT (wont_exit, j + 1))
1220 if (to_remove)
1221 VEC_safe_push (edge, heap, *to_remove, new_spec_edges[SE_ORIG]);
1222 set_zero_probability (new_spec_edges[SE_ORIG]);
1224 /* Scale the frequencies of the blocks dominated by the exit. */
1225 if (bbs_to_scale)
1227 EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1229 scale_bbs_frequencies_int (new_bbs + i, 1, scale_after_exit,
1230 REG_BR_PROB_BASE);
1235 /* Record the first copy in the control flow order if it is not
1236 the original loop (i.e. in case of peeling). */
1237 if (!first_active_latch)
1239 memcpy (first_active, new_bbs, n * sizeof (basic_block));
1240 first_active_latch = new_bbs[n - 1];
1243 /* Set counts and frequencies. */
1244 if (flags & DLTHE_FLAG_UPDATE_FREQ)
1246 scale_bbs_frequencies_int (new_bbs, n, scale_act, REG_BR_PROB_BASE);
1247 scale_act = RDIV (scale_act * scale_step[j], REG_BR_PROB_BASE);
1250 free (new_bbs);
1251 free (orig_loops);
1253 /* Record the exit edge in the original loop body, and update the frequencies. */
1254 if (orig && TEST_BIT (wont_exit, 0))
1256 if (to_remove)
1257 VEC_safe_push (edge, heap, *to_remove, orig);
1258 set_zero_probability (orig);
1260 /* Scale the frequencies of the blocks dominated by the exit. */
1261 if (bbs_to_scale)
1263 EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1265 scale_bbs_frequencies_int (bbs + i, 1, scale_after_exit,
1266 REG_BR_PROB_BASE);
1271 /* Update the original loop. */
1272 if (!is_latch)
1273 set_immediate_dominator (CDI_DOMINATORS, e->dest, e->src);
1274 if (flags & DLTHE_FLAG_UPDATE_FREQ)
1276 scale_bbs_frequencies_int (bbs, n, scale_main, REG_BR_PROB_BASE);
1277 free (scale_step);
1280 /* Update dominators of outer blocks if affected. */
1281 for (i = 0; i < n; i++)
1283 basic_block dominated, dom_bb;
1284 VEC (basic_block, heap) *dom_bbs;
1285 unsigned j;
1287 bb = bbs[i];
1288 bb->aux = 0;
1290 dom_bbs = get_dominated_by (CDI_DOMINATORS, bb);
1291 FOR_EACH_VEC_ELT (basic_block, dom_bbs, j, dominated)
1293 if (flow_bb_inside_loop_p (loop, dominated))
1294 continue;
1295 dom_bb = nearest_common_dominator (
1296 CDI_DOMINATORS, first_active[i], first_active_latch);
1297 set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb);
1299 VEC_free (basic_block, heap, dom_bbs);
1301 free (first_active);
1303 free (bbs);
1304 BITMAP_FREE (bbs_to_scale);
1306 return true;
1309 /* A callback for make_forwarder block, to redirect all edges except for
1310 MFB_KJ_EDGE to the entry part. E is the edge for that we should decide
1311 whether to redirect it. */
1313 edge mfb_kj_edge;
1314 bool
1315 mfb_keep_just (edge e)
1317 return e != mfb_kj_edge;
1320 /* True when a candidate preheader BLOCK has predecessors from LOOP. */
1322 static bool
1323 has_preds_from_loop (basic_block block, struct loop *loop)
1325 edge e;
1326 edge_iterator ei;
1328 FOR_EACH_EDGE (e, ei, block->preds)
1329 if (e->src->loop_father == loop)
1330 return true;
1331 return false;
1334 /* Creates a pre-header for a LOOP. Returns newly created block. Unless
1335 CP_SIMPLE_PREHEADERS is set in FLAGS, we only force LOOP to have single
1336 entry; otherwise we also force preheader block to have only one successor.
1337 When CP_FALLTHRU_PREHEADERS is set in FLAGS, we force the preheader block
1338 to be a fallthru predecessor to the loop header and to have only
1339 predecessors from outside of the loop.
1340 The function also updates dominators. */
1342 basic_block
1343 create_preheader (struct loop *loop, int flags)
1345 edge e, fallthru;
1346 basic_block dummy;
1347 int nentry = 0;
1348 bool irred = false;
1349 bool latch_edge_was_fallthru;
1350 edge one_succ_pred = NULL, single_entry = NULL;
1351 edge_iterator ei;
1353 FOR_EACH_EDGE (e, ei, loop->header->preds)
1355 if (e->src == loop->latch)
1356 continue;
1357 irred |= (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
1358 nentry++;
1359 single_entry = e;
1360 if (single_succ_p (e->src))
1361 one_succ_pred = e;
1363 gcc_assert (nentry);
1364 if (nentry == 1)
1366 bool need_forwarder_block = false;
1368 /* We do not allow entry block to be the loop preheader, since we
1369 cannot emit code there. */
1370 if (single_entry->src == ENTRY_BLOCK_PTR)
1371 need_forwarder_block = true;
1372 else
1374 /* If we want simple preheaders, also force the preheader to have
1375 just a single successor. */
1376 if ((flags & CP_SIMPLE_PREHEADERS)
1377 && !single_succ_p (single_entry->src))
1378 need_forwarder_block = true;
1379 /* If we want fallthru preheaders, also create forwarder block when
1380 preheader ends with a jump or has predecessors from loop. */
1381 else if ((flags & CP_FALLTHRU_PREHEADERS)
1382 && (JUMP_P (BB_END (single_entry->src))
1383 || has_preds_from_loop (single_entry->src, loop)))
1384 need_forwarder_block = true;
1386 if (! need_forwarder_block)
1387 return NULL;
1390 mfb_kj_edge = loop_latch_edge (loop);
1391 latch_edge_was_fallthru = (mfb_kj_edge->flags & EDGE_FALLTHRU) != 0;
1392 fallthru = make_forwarder_block (loop->header, mfb_keep_just, NULL);
1393 dummy = fallthru->src;
1394 loop->header = fallthru->dest;
1396 /* Try to be clever in placing the newly created preheader. The idea is to
1397 avoid breaking any "fallthruness" relationship between blocks.
1399 The preheader was created just before the header and all incoming edges
1400 to the header were redirected to the preheader, except the latch edge.
1401 So the only problematic case is when this latch edge was a fallthru
1402 edge: it is not anymore after the preheader creation so we have broken
1403 the fallthruness. We're therefore going to look for a better place. */
1404 if (latch_edge_was_fallthru)
1406 if (one_succ_pred)
1407 e = one_succ_pred;
1408 else
1409 e = EDGE_PRED (dummy, 0);
1411 move_block_after (dummy, e->src);
1414 if (irred)
1416 dummy->flags |= BB_IRREDUCIBLE_LOOP;
1417 single_succ_edge (dummy)->flags |= EDGE_IRREDUCIBLE_LOOP;
1420 if (dump_file)
1421 fprintf (dump_file, "Created preheader block for loop %i\n",
1422 loop->num);
1424 if (flags & CP_FALLTHRU_PREHEADERS)
1425 gcc_assert ((single_succ_edge (dummy)->flags & EDGE_FALLTHRU)
1426 && !JUMP_P (BB_END (dummy)));
1428 return dummy;
1431 /* Create preheaders for each loop; for meaning of FLAGS see create_preheader. */
1433 void
1434 create_preheaders (int flags)
1436 loop_iterator li;
1437 struct loop *loop;
1439 if (!current_loops)
1440 return;
1442 FOR_EACH_LOOP (li, loop, 0)
1443 create_preheader (loop, flags);
1444 loops_state_set (LOOPS_HAVE_PREHEADERS);
1447 /* Forces all loop latches to have only single successor. */
1449 void
1450 force_single_succ_latches (void)
1452 loop_iterator li;
1453 struct loop *loop;
1454 edge e;
1456 FOR_EACH_LOOP (li, loop, 0)
1458 if (loop->latch != loop->header && single_succ_p (loop->latch))
1459 continue;
1461 e = find_edge (loop->latch, loop->header);
1463 split_edge (e);
1465 loops_state_set (LOOPS_HAVE_SIMPLE_LATCHES);
1468 /* This function is called from loop_version. It splits the entry edge
1469 of the loop we want to version, adds the versioning condition, and
1470 adjust the edges to the two versions of the loop appropriately.
1471 e is an incoming edge. Returns the basic block containing the
1472 condition.
1474 --- edge e ---- > [second_head]
1476 Split it and insert new conditional expression and adjust edges.
1478 --- edge e ---> [cond expr] ---> [first_head]
1480 +---------> [second_head]
1482 THEN_PROB is the probability of then branch of the condition. */
1484 static basic_block
1485 lv_adjust_loop_entry_edge (basic_block first_head, basic_block second_head,
1486 edge e, void *cond_expr, unsigned then_prob)
1488 basic_block new_head = NULL;
1489 edge e1;
1491 gcc_assert (e->dest == second_head);
1493 /* Split edge 'e'. This will create a new basic block, where we can
1494 insert conditional expr. */
1495 new_head = split_edge (e);
1497 lv_add_condition_to_bb (first_head, second_head, new_head,
1498 cond_expr);
1500 /* Don't set EDGE_TRUE_VALUE in RTL mode, as it's invalid there. */
1501 e = single_succ_edge (new_head);
1502 e1 = make_edge (new_head, first_head,
1503 current_ir_type () == IR_GIMPLE ? EDGE_TRUE_VALUE : 0);
1504 e1->probability = then_prob;
1505 e->probability = REG_BR_PROB_BASE - then_prob;
1506 e1->count = RDIV (e->count * e1->probability, REG_BR_PROB_BASE);
1507 e->count = RDIV (e->count * e->probability, REG_BR_PROB_BASE);
1509 set_immediate_dominator (CDI_DOMINATORS, first_head, new_head);
1510 set_immediate_dominator (CDI_DOMINATORS, second_head, new_head);
1512 /* Adjust loop header phi nodes. */
1513 lv_adjust_loop_header_phi (first_head, second_head, new_head, e1);
1515 return new_head;
1518 /* Main entry point for Loop Versioning transformation.
1520 This transformation given a condition and a loop, creates
1521 -if (condition) { loop_copy1 } else { loop_copy2 },
1522 where loop_copy1 is the loop transformed in one way, and loop_copy2
1523 is the loop transformed in another way (or unchanged). 'condition'
1524 may be a run time test for things that were not resolved by static
1525 analysis (overlapping ranges (anti-aliasing), alignment, etc.).
1527 THEN_PROB is the probability of the then edge of the if. THEN_SCALE
1528 is the ratio by that the frequencies in the original loop should
1529 be scaled. ELSE_SCALE is the ratio by that the frequencies in the
1530 new loop should be scaled.
1532 If PLACE_AFTER is true, we place the new loop after LOOP in the
1533 instruction stream, otherwise it is placed before LOOP. */
1535 struct loop *
1536 loop_version (struct loop *loop,
1537 void *cond_expr, basic_block *condition_bb,
1538 unsigned then_prob, unsigned then_scale, unsigned else_scale,
1539 bool place_after)
1541 basic_block first_head, second_head;
1542 edge entry, latch_edge, true_edge, false_edge;
1543 int irred_flag;
1544 struct loop *nloop;
1545 basic_block cond_bb;
1547 /* Record entry and latch edges for the loop */
1548 entry = loop_preheader_edge (loop);
1549 irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;
1550 entry->flags &= ~EDGE_IRREDUCIBLE_LOOP;
1552 /* Note down head of loop as first_head. */
1553 first_head = entry->dest;
1555 /* Duplicate loop. */
1556 if (!cfg_hook_duplicate_loop_to_header_edge (loop, entry, 1,
1557 NULL, NULL, NULL, 0))
1559 entry->flags |= irred_flag;
1560 return NULL;
1563 /* After duplication entry edge now points to new loop head block.
1564 Note down new head as second_head. */
1565 second_head = entry->dest;
1567 /* Split loop entry edge and insert new block with cond expr. */
1568 cond_bb = lv_adjust_loop_entry_edge (first_head, second_head,
1569 entry, cond_expr, then_prob);
1570 if (condition_bb)
1571 *condition_bb = cond_bb;
1573 if (!cond_bb)
1575 entry->flags |= irred_flag;
1576 return NULL;
1579 latch_edge = single_succ_edge (get_bb_copy (loop->latch));
1581 extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1582 nloop = loopify (latch_edge,
1583 single_pred_edge (get_bb_copy (loop->header)),
1584 cond_bb, true_edge, false_edge,
1585 false /* Do not redirect all edges. */,
1586 then_scale, else_scale);
1588 /* loopify redirected latch_edge. Update its PENDING_STMTS. */
1589 lv_flush_pending_stmts (latch_edge);
1591 /* loopify redirected condition_bb's succ edge. Update its PENDING_STMTS. */
1592 extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1593 lv_flush_pending_stmts (false_edge);
1594 /* Adjust irreducible flag. */
1595 if (irred_flag)
1597 cond_bb->flags |= BB_IRREDUCIBLE_LOOP;
1598 loop_preheader_edge (loop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1599 loop_preheader_edge (nloop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1600 single_pred_edge (cond_bb)->flags |= EDGE_IRREDUCIBLE_LOOP;
1603 if (place_after)
1605 basic_block *bbs = get_loop_body_in_dom_order (nloop), after;
1606 unsigned i;
1608 after = loop->latch;
1610 for (i = 0; i < nloop->num_nodes; i++)
1612 move_block_after (bbs[i], after);
1613 after = bbs[i];
1615 free (bbs);
1618 /* At this point condition_bb is loop preheader with two successors,
1619 first_head and second_head. Make sure that loop preheader has only
1620 one successor. */
1621 split_edge (loop_preheader_edge (loop));
1622 split_edge (loop_preheader_edge (nloop));
1624 return nloop;
1627 /* The structure of loops might have changed. Some loops might get removed
1628 (and their headers and latches were set to NULL), loop exists might get
1629 removed (thus the loop nesting may be wrong), and some blocks and edges
1630 were changed (so the information about bb --> loop mapping does not have
1631 to be correct). But still for the remaining loops the header dominates
1632 the latch, and loops did not get new subloops (new loops might possibly
1633 get created, but we are not interested in them). Fix up the mess.
1635 If CHANGED_BBS is not NULL, basic blocks whose loop has changed are
1636 marked in it. */
1638 void
1639 fix_loop_structure (bitmap changed_bbs)
1641 basic_block bb;
1642 struct loop *loop, *ploop;
1643 loop_iterator li;
1644 bool record_exits = false;
1645 struct loop **superloop = XNEWVEC (struct loop *, number_of_loops ());
1647 /* Remove the old bb -> loop mapping. Remember the depth of the blocks in
1648 the loop hierarchy, so that we can recognize blocks whose loop nesting
1649 relationship has changed. */
1650 FOR_EACH_BB (bb)
1652 if (changed_bbs)
1653 bb->aux = (void *) (size_t) loop_depth (bb->loop_father);
1654 bb->loop_father = current_loops->tree_root;
1657 if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1659 release_recorded_exits ();
1660 record_exits = true;
1663 /* Remove the dead loops from structures. We start from the innermost
1664 loops, so that when we remove the loops, we know that the loops inside
1665 are preserved, and do not waste time relinking loops that will be
1666 removed later. */
1667 FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
1669 if (loop->header)
1670 continue;
1672 while (loop->inner)
1674 ploop = loop->inner;
1675 flow_loop_tree_node_remove (ploop);
1676 flow_loop_tree_node_add (loop_outer (loop), ploop);
1679 /* Remove the loop and free its data. */
1680 delete_loop (loop);
1683 /* Rescan the bodies of loops, starting from the outermost ones. We assume
1684 that no optimization interchanges the order of the loops, i.e., it cannot
1685 happen that L1 was superloop of L2 before and it is subloop of L2 now
1686 (without explicitly updating loop information). At the same time, we also
1687 determine the new loop structure. */
1688 current_loops->tree_root->num_nodes = n_basic_blocks;
1689 FOR_EACH_LOOP (li, loop, 0)
1691 superloop[loop->num] = loop->header->loop_father;
1692 loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
1695 /* Now fix the loop nesting. */
1696 FOR_EACH_LOOP (li, loop, 0)
1698 ploop = superloop[loop->num];
1699 if (ploop != loop_outer (loop))
1701 flow_loop_tree_node_remove (loop);
1702 flow_loop_tree_node_add (ploop, loop);
1705 free (superloop);
1707 /* Mark the blocks whose loop has changed. */
1708 if (changed_bbs)
1710 FOR_EACH_BB (bb)
1712 if ((void *) (size_t) loop_depth (bb->loop_father) != bb->aux)
1713 bitmap_set_bit (changed_bbs, bb->index);
1715 bb->aux = NULL;
1719 if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS))
1720 create_preheaders (CP_SIMPLE_PREHEADERS);
1722 if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
1723 force_single_succ_latches ();
1725 if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
1726 mark_irreducible_loops ();
1728 if (record_exits)
1729 record_loop_exits ();
1731 #ifdef ENABLE_CHECKING
1732 verify_loop_structure ();
1733 #endif