OSDN Git Service

2008-06-15 Mark Shinwell <shinwell@codesourcery.com>
[pf3gnuchains/gcc-fork.git] / gcc / cfgloopmanip.c
1 /* Loop manipulation code for GNU compiler.
2    Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008 Free Software
3    Foundation, Inc.
4
5 This file is part of GCC.
6
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.
11
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.
16
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/>.  */
20
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
34 static void duplicate_subloops (struct loop *, struct loop *);
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 *);
45
46 #define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
47
48 /* Checks whether basic block BB is dominated by DATA.  */
49 static bool
50 rpe_enum_p (const_basic_block bb, const void *data)
51 {
52   return dominated_by_p (CDI_DOMINATORS, bb, (const_basic_block) data);
53 }
54
55 /* Remove basic blocks BBS.  NBBS is the number of the basic blocks.  */
56
57 static void
58 remove_bbs (basic_block *bbs, int nbbs)
59 {
60   int i;
61
62   for (i = 0; i < nbbs; i++)
63     delete_basic_block (bbs[i]);
64 }
65
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)
74 {
75   gcc_assert (EDGE_COUNT (e->dest->preds) <= 1);
76
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);
81 }
82
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)
92 {
93   edge e;
94   edge_iterator ei;
95   struct loop *loop = current_loops->tree_root, *act;
96
97   FOR_EACH_EDGE (e, ei, bb->succs)
98     {
99       if (e->dest == EXIT_BLOCK_PTR)
100         continue;
101
102       act = e->dest->loop_father;
103       if (act->header == e->dest)
104         act = loop_outer (act);
105
106       if (flow_loop_nested_p (loop, act))
107         loop = act;
108     }
109
110   if (loop == bb->loop_father)
111     return false;
112
113   remove_bb_from_loops (bb);
114   add_bb_to_loop (bb, loop);
115
116   return true;
117 }
118
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.  */
123
124 static bool
125 fix_loop_placement (struct loop *loop)
126 {
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;
132
133   for (i = 0; VEC_iterate (edge, exits, i, e); i++)
134     {
135       act = find_common_loop (loop, e->dest->loop_father);
136       if (flow_loop_nested_p (father, act))
137         father = act;
138     }
139
140   if (father != loop_outer (loop))
141     {
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);
146
147       /* The exit edges of LOOP no longer exits its original immediate
148          superloops; remove them from the appropriate exit lists.  */
149       for (i = 0; VEC_iterate (edge, exits, i, e); i++)
150         rescan_loop_exit (e, false, false);
151
152       ret = true;
153     }
154
155   VEC_free (edge, heap, exits);
156   return ret;
157 }
158
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.
167  
168    If the changes may invalidate the information about irreducible regions,
169    IRRED_INVALIDATED is set to true.  */
170
171 static void
172 fix_bb_placements (basic_block from,
173                    bool *irred_invalidated)
174 {
175   sbitmap in_queue;
176   basic_block *queue, *qtop, *qbeg, *qend;
177   struct loop *base_loop;
178   edge e;
179
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.  */
186
187   base_loop = from->loop_father;
188   if (base_loop == current_loops->tree_root)
189     return;
190
191   in_queue = sbitmap_alloc (last_basic_block);
192   sbitmap_zero (in_queue);
193   SET_BIT (in_queue, from->index);
194   /* Prevent us from going out of the base_loop.  */
195   SET_BIT (in_queue, base_loop->header->index);
196
197   queue = XNEWVEC (basic_block, base_loop->num_nodes + 1);
198   qtop = queue + base_loop->num_nodes + 1;
199   qbeg = queue;
200   qend = queue + 1;
201   *qbeg = from;
202
203   while (qbeg != qend)
204     {
205       edge_iterator ei;
206       from = *qbeg;
207       qbeg++;
208       if (qbeg == qtop)
209         qbeg = queue;
210       RESET_BIT (in_queue, from->index);
211
212       if (from->loop_father->header == from)
213         {
214           /* Subloop header, maybe move the loop upward.  */
215           if (!fix_loop_placement (from->loop_father))
216             continue;
217         }
218       else
219         {
220           /* Ordinary basic block.  */
221           if (!fix_bb_placement (from))
222             continue;
223         }
224
225       FOR_EACH_EDGE (e, ei, from->succs)
226         {
227           if (e->flags & EDGE_IRREDUCIBLE_LOOP)
228             *irred_invalidated = true;
229         }
230
231       /* Something has changed, insert predecessors into queue.  */
232       FOR_EACH_EDGE (e, ei, from->preds)
233         {
234           basic_block pred = e->src;
235           struct loop *nca;
236
237           if (e->flags & EDGE_IRREDUCIBLE_LOOP)
238             *irred_invalidated = true;
239
240           if (TEST_BIT (in_queue, pred->index))
241             continue;
242
243           /* If it is subloop, then it either was not moved, or
244              the path up the loop tree from base_loop do not contain
245              it.  */
246           nca = find_common_loop (pred->loop_father, base_loop);
247           if (pred->loop_father != base_loop
248               && (nca == base_loop
249                   || nca != pred->loop_father))
250             pred = pred->loop_father->header;
251           else if (!flow_loop_nested_p (from->loop_father, pred->loop_father))
252             {
253               /* No point in processing it.  */
254               continue;
255             }
256
257           if (TEST_BIT (in_queue, pred->index))
258             continue;
259
260           /* Schedule the basic block.  */
261           *qend = pred;
262           qend++;
263           if (qend == qtop)
264             qend = queue;
265           SET_BIT (in_queue, pred->index);
266         }
267     }
268   free (in_queue);
269   free (queue);
270 }
271
272 /* Removes path beginning at edge E, i.e. remove basic blocks dominated by E
273    and update loop structures and dominators.  Return true if we were able
274    to remove the path, false otherwise (and nothing is affected then).  */
275 bool
276 remove_path (edge e)
277 {
278   edge ae;
279   basic_block *rem_bbs, *bord_bbs, from, bb;
280   VEC (basic_block, heap) *dom_bbs;
281   int i, nrem, n_bord_bbs, nreml;
282   sbitmap seen;
283   bool irred_invalidated = false;
284   struct loop **deleted_loop;
285
286   if (!can_remove_branch_p (e))
287     return false;
288
289   /* Keep track of whether we need to update information about irreducible
290      regions.  This is the case if the removed area is a part of the
291      irreducible region, or if the set of basic blocks that belong to a loop
292      that is inside an irreducible region is changed, or if such a loop is
293      removed.  */
294   if (e->flags & EDGE_IRREDUCIBLE_LOOP)
295     irred_invalidated = true;
296
297   /* We need to check whether basic blocks are dominated by the edge
298      e, but we only have basic block dominators.  This is easy to
299      fix -- when e->dest has exactly one predecessor, this corresponds
300      to blocks dominated by e->dest, if not, split the edge.  */
301   if (!single_pred_p (e->dest))
302     e = single_pred_edge (split_edge (e));
303
304   /* It may happen that by removing path we remove one or more loops
305      we belong to.  In this case first unloop the loops, then proceed
306      normally.   We may assume that e->dest is not a header of any loop,
307      as it now has exactly one predecessor.  */
308   while (loop_outer (e->src->loop_father)
309          && dominated_by_p (CDI_DOMINATORS,
310                             e->src->loop_father->latch, e->dest))
311     unloop (e->src->loop_father, &irred_invalidated);
312
313   /* Identify the path.  */
314   nrem = find_path (e, &rem_bbs);
315
316   n_bord_bbs = 0;
317   bord_bbs = XCNEWVEC (basic_block, n_basic_blocks);
318   seen = sbitmap_alloc (last_basic_block);
319   sbitmap_zero (seen);
320
321   /* Find "border" hexes -- i.e. those with predecessor in removed path.  */
322   for (i = 0; i < nrem; i++)
323     SET_BIT (seen, rem_bbs[i]->index);
324   for (i = 0; i < nrem; i++)
325     {
326       edge_iterator ei;
327       bb = rem_bbs[i];
328       FOR_EACH_EDGE (ae, ei, rem_bbs[i]->succs)
329         if (ae->dest != EXIT_BLOCK_PTR && !TEST_BIT (seen, ae->dest->index))
330           {
331             SET_BIT (seen, ae->dest->index);
332             bord_bbs[n_bord_bbs++] = ae->dest;
333           
334             if (ae->flags & EDGE_IRREDUCIBLE_LOOP)
335               irred_invalidated = true;
336           }
337     }
338
339   /* Remove the path.  */
340   from = e->src;
341   remove_branch (e);
342   dom_bbs = NULL;
343
344   /* Cancel loops contained in the path.  */
345   deleted_loop = XNEWVEC (struct loop *, nrem);
346   nreml = 0;
347   for (i = 0; i < nrem; i++)
348     if (rem_bbs[i]->loop_father->header == rem_bbs[i])
349       deleted_loop[nreml++] = rem_bbs[i]->loop_father;
350
351   remove_bbs (rem_bbs, nrem);
352   free (rem_bbs);
353
354   for (i = 0; i < nreml; i++)
355     cancel_loop_tree (deleted_loop[i]);
356   free (deleted_loop);
357
358   /* Find blocks whose dominators may be affected.  */
359   sbitmap_zero (seen);
360   for (i = 0; i < n_bord_bbs; i++)
361     {
362       basic_block ldom;
363
364       bb = get_immediate_dominator (CDI_DOMINATORS, bord_bbs[i]);
365       if (TEST_BIT (seen, bb->index))
366         continue;
367       SET_BIT (seen, bb->index);
368
369       for (ldom = first_dom_son (CDI_DOMINATORS, bb);
370            ldom;
371            ldom = next_dom_son (CDI_DOMINATORS, ldom))
372         if (!dominated_by_p (CDI_DOMINATORS, from, ldom))
373           VEC_safe_push (basic_block, heap, dom_bbs, ldom);
374     }
375
376   free (seen);
377
378   /* Recount dominators.  */
379   iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, true);
380   VEC_free (basic_block, heap, dom_bbs);
381   free (bord_bbs);
382
383   /* Fix placements of basic blocks inside loops and the placement of
384      loops in the loop tree.  */
385   fix_bb_placements (from, &irred_invalidated);
386   fix_loop_placements (from->loop_father, &irred_invalidated);
387
388   if (irred_invalidated
389       && loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
390     mark_irreducible_loops ();
391
392   return true;
393 }
394
395 /* Creates place for a new LOOP in loops structure.  */
396
397 static void
398 place_new_loop (struct loop *loop)
399 {
400   loop->num = number_of_loops ();
401   VEC_safe_push (loop_p, gc, current_loops->larray, loop);
402 }
403
404 /* Given LOOP structure with filled header and latch, find the body of the
405    corresponding loop and add it to loops tree.  Insert the LOOP as a son of
406    outer.  */
407
408 void
409 add_loop (struct loop *loop, struct loop *outer)
410 {
411   basic_block *bbs;
412   int i, n;
413   struct loop *subloop;
414   edge e;
415   edge_iterator ei;
416
417   /* Add it to loop structure.  */
418   place_new_loop (loop);
419   flow_loop_tree_node_add (outer, loop);
420
421   /* Find its nodes.  */
422   bbs = XNEWVEC (basic_block, n_basic_blocks);
423   n = get_loop_body_with_size (loop, bbs, n_basic_blocks);
424
425   for (i = 0; i < n; i++)
426     {
427       if (bbs[i]->loop_father == outer)
428         {
429           remove_bb_from_loops (bbs[i]);
430           add_bb_to_loop (bbs[i], loop);
431           continue;
432         }
433
434       loop->num_nodes++;
435
436       /* If we find a direct subloop of OUTER, move it to LOOP.  */
437       subloop = bbs[i]->loop_father;
438       if (loop_outer (subloop) == outer
439           && subloop->header == bbs[i])
440         {
441           flow_loop_tree_node_remove (subloop);
442           flow_loop_tree_node_add (loop, subloop);
443         }
444     }
445
446   /* Update the information about loop exit edges.  */
447   for (i = 0; i < n; i++)
448     {
449       FOR_EACH_EDGE (e, ei, bbs[i]->succs)
450         {
451           rescan_loop_exit (e, false, false);
452         }
453     }
454
455   free (bbs);
456 }
457
458 /* Multiply all frequencies in LOOP by NUM/DEN.  */
459 void
460 scale_loop_frequencies (struct loop *loop, int num, int den)
461 {
462   basic_block *bbs;
463
464   bbs = get_loop_body (loop);
465   scale_bbs_frequencies_int (bbs, loop->num_nodes, num, den);
466   free (bbs);
467 }
468
469 /* Make area between HEADER_EDGE and LATCH_EDGE a loop by connecting
470    latch to header and update loop tree and dominators
471    accordingly. Everything between them plus LATCH_EDGE destination must
472    be dominated by HEADER_EDGE destination, and back-reachable from
473    LATCH_EDGE source.  HEADER_EDGE is redirected to basic block SWITCH_BB,
474    FALSE_EDGE of SWITCH_BB to original destination of HEADER_EDGE and
475    TRUE_EDGE of SWITCH_BB to original destination of LATCH_EDGE.
476    Returns the newly created loop.  Frequencies and counts in the new loop
477    are scaled by FALSE_SCALE and in the old one by TRUE_SCALE.  */
478
479 struct loop *
480 loopify (edge latch_edge, edge header_edge,
481          basic_block switch_bb, edge true_edge, edge false_edge,
482          bool redirect_all_edges, unsigned true_scale, unsigned false_scale)
483 {
484   basic_block succ_bb = latch_edge->dest;
485   basic_block pred_bb = header_edge->src;
486   basic_block *body;
487   VEC (basic_block, heap) *dom_bbs;
488   unsigned i;
489   sbitmap seen;
490   struct loop *loop = alloc_loop ();
491   struct loop *outer = loop_outer (succ_bb->loop_father);
492   int freq;
493   gcov_type cnt;
494   edge e;
495   edge_iterator ei;
496
497   loop->header = header_edge->dest;
498   loop->latch = latch_edge->src;
499
500   freq = EDGE_FREQUENCY (header_edge);
501   cnt = header_edge->count;
502
503   /* Redirect edges.  */
504   loop_redirect_edge (latch_edge, loop->header);
505   loop_redirect_edge (true_edge, succ_bb);
506
507   /* During loop versioning, one of the switch_bb edge is already properly
508      set. Do not redirect it again unless redirect_all_edges is true.  */
509   if (redirect_all_edges)
510     {
511       loop_redirect_edge (header_edge, switch_bb);
512       loop_redirect_edge (false_edge, loop->header);
513
514       /* Update dominators.  */
515       set_immediate_dominator (CDI_DOMINATORS, switch_bb, pred_bb);
516       set_immediate_dominator (CDI_DOMINATORS, loop->header, switch_bb);
517     }
518
519   set_immediate_dominator (CDI_DOMINATORS, succ_bb, switch_bb);
520
521   /* Compute new loop.  */
522   add_loop (loop, outer);
523
524   /* Add switch_bb to appropriate loop.  */
525   if (switch_bb->loop_father)
526     remove_bb_from_loops (switch_bb);
527   add_bb_to_loop (switch_bb, outer);
528
529   /* Fix frequencies.  */
530   if (redirect_all_edges)
531     {
532       switch_bb->frequency = freq;
533       switch_bb->count = cnt;
534       FOR_EACH_EDGE (e, ei, switch_bb->succs)
535         {
536           e->count = (switch_bb->count * e->probability) / REG_BR_PROB_BASE;
537         }
538     }
539   scale_loop_frequencies (loop, false_scale, REG_BR_PROB_BASE);
540   scale_loop_frequencies (succ_bb->loop_father, true_scale, REG_BR_PROB_BASE);
541
542   /* Update dominators of blocks outside of LOOP.  */
543   dom_bbs = NULL;
544   seen = sbitmap_alloc (last_basic_block);
545   sbitmap_zero (seen);
546   body = get_loop_body (loop);
547
548   for (i = 0; i < loop->num_nodes; i++)
549     SET_BIT (seen, body[i]->index);
550
551   for (i = 0; i < loop->num_nodes; i++)
552     {
553       basic_block ldom;
554
555       for (ldom = first_dom_son (CDI_DOMINATORS, body[i]);
556            ldom;
557            ldom = next_dom_son (CDI_DOMINATORS, ldom))
558         if (!TEST_BIT (seen, ldom->index))
559           {
560             SET_BIT (seen, ldom->index);
561             VEC_safe_push (basic_block, heap, dom_bbs, ldom);
562           }
563     }
564
565   iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false);
566
567   free (body);
568   free (seen);
569   VEC_free (basic_block, heap, dom_bbs);
570
571   return loop;
572 }
573
574 /* Remove the latch edge of a LOOP and update loops to indicate that
575    the LOOP was removed.  After this function, original loop latch will
576    have no successor, which caller is expected to fix somehow.
577
578    If this may cause the information about irreducible regions to become
579    invalid, IRRED_INVALIDATED is set to true.  */
580
581 static void
582 unloop (struct loop *loop, bool *irred_invalidated)
583 {
584   basic_block *body;
585   struct loop *ploop;
586   unsigned i, n;
587   basic_block latch = loop->latch;
588   bool dummy = false;
589
590   if (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP)
591     *irred_invalidated = true;
592
593   /* This is relatively straightforward.  The dominators are unchanged, as
594      loop header dominates loop latch, so the only thing we have to care of
595      is the placement of loops and basic blocks inside the loop tree.  We
596      move them all to the loop->outer, and then let fix_bb_placements do
597      its work.  */
598
599   body = get_loop_body (loop);
600   n = loop->num_nodes;
601   for (i = 0; i < n; i++)
602     if (body[i]->loop_father == loop)
603       {
604         remove_bb_from_loops (body[i]);
605         add_bb_to_loop (body[i], loop_outer (loop));
606       }
607   free(body);
608
609   while (loop->inner)
610     {
611       ploop = loop->inner;
612       flow_loop_tree_node_remove (ploop);
613       flow_loop_tree_node_add (loop_outer (loop), ploop);
614     }
615
616   /* Remove the loop and free its data.  */
617   delete_loop (loop);
618
619   remove_edge (single_succ_edge (latch));
620
621   /* We do not pass IRRED_INVALIDATED to fix_bb_placements here, as even if
622      there is an irreducible region inside the cancelled loop, the flags will
623      be still correct.  */
624   fix_bb_placements (latch, &dummy);
625 }
626
627 /* Fix placement of superloops of LOOP inside loop tree, i.e. ensure that
628    condition stated in description of fix_loop_placement holds for them.
629    It is used in case when we removed some edges coming out of LOOP, which
630    may cause the right placement of LOOP inside loop tree to change.
631  
632    IRRED_INVALIDATED is set to true if a change in the loop structures might
633    invalidate the information about irreducible regions.  */
634
635 static void
636 fix_loop_placements (struct loop *loop, bool *irred_invalidated)
637 {
638   struct loop *outer;
639
640   while (loop_outer (loop))
641     {
642       outer = loop_outer (loop);
643       if (!fix_loop_placement (loop))
644         break;
645
646       /* Changing the placement of a loop in the loop tree may alter the
647          validity of condition 2) of the description of fix_bb_placement
648          for its preheader, because the successor is the header and belongs
649          to the loop.  So call fix_bb_placements to fix up the placement
650          of the preheader and (possibly) of its predecessors.  */
651       fix_bb_placements (loop_preheader_edge (loop)->src,
652                          irred_invalidated);
653       loop = outer;
654     }
655 }
656
657 /* Copies copy of LOOP as subloop of TARGET loop, placing newly
658    created loop into loops structure.  */
659 struct loop *
660 duplicate_loop (struct loop *loop, struct loop *target)
661 {
662   struct loop *cloop;
663   cloop = alloc_loop ();
664   place_new_loop (cloop);
665
666   /* Mark the new loop as copy of LOOP.  */
667   set_loop_copy (loop, cloop);
668
669   /* Add it to target.  */
670   flow_loop_tree_node_add (target, cloop);
671
672   return cloop;
673 }
674
675 /* Copies structure of subloops of LOOP into TARGET loop, placing
676    newly created loops into loop tree.  */
677 static void
678 duplicate_subloops (struct loop *loop, struct loop *target)
679 {
680   struct loop *aloop, *cloop;
681
682   for (aloop = loop->inner; aloop; aloop = aloop->next)
683     {
684       cloop = duplicate_loop (aloop, target);
685       duplicate_subloops (aloop, cloop);
686     }
687 }
688
689 /* Copies structure of subloops of N loops, stored in array COPIED_LOOPS,
690    into TARGET loop, placing newly created loops into loop tree.  */
691 static void
692 copy_loops_to (struct loop **copied_loops, int n, struct loop *target)
693 {
694   struct loop *aloop;
695   int i;
696
697   for (i = 0; i < n; i++)
698     {
699       aloop = duplicate_loop (copied_loops[i], target);
700       duplicate_subloops (copied_loops[i], aloop);
701     }
702 }
703
704 /* Redirects edge E to basic block DEST.  */
705 static void
706 loop_redirect_edge (edge e, basic_block dest)
707 {
708   if (e->dest == dest)
709     return;
710
711   redirect_edge_and_branch_force (e, dest);
712 }
713
714 /* Check whether LOOP's body can be duplicated.  */
715 bool
716 can_duplicate_loop_p (const struct loop *loop)
717 {
718   int ret;
719   basic_block *bbs = get_loop_body (loop);
720
721   ret = can_copy_bbs_p (bbs, loop->num_nodes);
722   free (bbs);
723
724   return ret;
725 }
726
727 /* Sets probability and count of edge E to zero.  The probability and count
728    is redistributed evenly to the remaining edges coming from E->src.  */
729
730 static void
731 set_zero_probability (edge e)
732 {
733   basic_block bb = e->src;
734   edge_iterator ei;
735   edge ae, last = NULL;
736   unsigned n = EDGE_COUNT (bb->succs);
737   gcov_type cnt = e->count, cnt1;
738   unsigned prob = e->probability, prob1;
739
740   gcc_assert (n > 1);
741   cnt1 = cnt / (n - 1);
742   prob1 = prob / (n - 1);
743
744   FOR_EACH_EDGE (ae, ei, bb->succs)
745     {
746       if (ae == e)
747         continue;
748
749       ae->probability += prob1;
750       ae->count += cnt1;
751       last = ae;
752     }
753
754   /* Move the rest to one of the edges.  */
755   last->probability += prob % (n - 1);
756   last->count += cnt % (n - 1);
757
758   e->probability = 0;
759   e->count = 0;
760 }
761
762 /* Duplicates body of LOOP to given edge E NDUPL times.  Takes care of updating
763    loop structure and dominators.  E's destination must be LOOP header for
764    this to work, i.e. it must be entry or latch edge of this loop; these are
765    unique, as the loops must have preheaders for this function to work
766    correctly (in case E is latch, the function unrolls the loop, if E is entry
767    edge, it peels the loop).  Store edges created by copying ORIG edge from
768    copies corresponding to set bits in WONT_EXIT bitmap (bit 0 corresponds to
769    original LOOP body, the other copies are numbered in order given by control
770    flow through them) into TO_REMOVE array.  Returns false if duplication is
771    impossible.  */
772
773 bool
774 duplicate_loop_to_header_edge (struct loop *loop, edge e,
775                                unsigned int ndupl, sbitmap wont_exit,
776                                edge orig, VEC (edge, heap) **to_remove,
777                                int flags)
778 {
779   struct loop *target, *aloop;
780   struct loop **orig_loops;
781   unsigned n_orig_loops;
782   basic_block header = loop->header, latch = loop->latch;
783   basic_block *new_bbs, *bbs, *first_active;
784   basic_block new_bb, bb, first_active_latch = NULL;
785   edge ae, latch_edge;
786   edge spec_edges[2], new_spec_edges[2];
787 #define SE_LATCH 0
788 #define SE_ORIG 1
789   unsigned i, j, n;
790   int is_latch = (latch == e->src);
791   int scale_act = 0, *scale_step = NULL, scale_main = 0;
792   int scale_after_exit = 0;
793   int p, freq_in, freq_le, freq_out_orig;
794   int prob_pass_thru, prob_pass_wont_exit, prob_pass_main;
795   int add_irreducible_flag;
796   basic_block place_after;
797   bitmap bbs_to_scale = NULL;
798   bitmap_iterator bi;
799
800   gcc_assert (e->dest == loop->header);
801   gcc_assert (ndupl > 0);
802
803   if (orig)
804     {
805       /* Orig must be edge out of the loop.  */
806       gcc_assert (flow_bb_inside_loop_p (loop, orig->src));
807       gcc_assert (!flow_bb_inside_loop_p (loop, orig->dest));
808     }
809
810   n = loop->num_nodes;
811   bbs = get_loop_body_in_dom_order (loop);
812   gcc_assert (bbs[0] == loop->header);
813   gcc_assert (bbs[n  - 1] == loop->latch);
814
815   /* Check whether duplication is possible.  */
816   if (!can_copy_bbs_p (bbs, loop->num_nodes))
817     {
818       free (bbs);
819       return false;
820     }
821   new_bbs = XNEWVEC (basic_block, loop->num_nodes);
822
823   /* In case we are doing loop peeling and the loop is in the middle of
824      irreducible region, the peeled copies will be inside it too.  */
825   add_irreducible_flag = e->flags & EDGE_IRREDUCIBLE_LOOP;
826   gcc_assert (!is_latch || !add_irreducible_flag);
827
828   /* Find edge from latch.  */
829   latch_edge = loop_latch_edge (loop);
830
831   if (flags & DLTHE_FLAG_UPDATE_FREQ)
832     {
833       /* Calculate coefficients by that we have to scale frequencies
834          of duplicated loop bodies.  */
835       freq_in = header->frequency;
836       freq_le = EDGE_FREQUENCY (latch_edge);
837       if (freq_in == 0)
838         freq_in = 1;
839       if (freq_in < freq_le)
840         freq_in = freq_le;
841       freq_out_orig = orig ? EDGE_FREQUENCY (orig) : freq_in - freq_le;
842       if (freq_out_orig > freq_in - freq_le)
843         freq_out_orig = freq_in - freq_le;
844       prob_pass_thru = RDIV (REG_BR_PROB_BASE * freq_le, freq_in);
845       prob_pass_wont_exit =
846               RDIV (REG_BR_PROB_BASE * (freq_le + freq_out_orig), freq_in);
847
848       if (orig
849           && REG_BR_PROB_BASE - orig->probability != 0)
850         {
851           /* The blocks that are dominated by a removed exit edge ORIG have
852              frequencies scaled by this.  */
853           scale_after_exit = RDIV (REG_BR_PROB_BASE * REG_BR_PROB_BASE,
854                                    REG_BR_PROB_BASE - orig->probability);
855           bbs_to_scale = BITMAP_ALLOC (NULL);
856           for (i = 0; i < n; i++)
857             {
858               if (bbs[i] != orig->src
859                   && dominated_by_p (CDI_DOMINATORS, bbs[i], orig->src))
860                 bitmap_set_bit (bbs_to_scale, i);
861             }
862         }
863
864       scale_step = XNEWVEC (int, ndupl);
865
866       for (i = 1; i <= ndupl; i++)
867         scale_step[i - 1] = TEST_BIT (wont_exit, i)
868                                 ? prob_pass_wont_exit
869                                 : prob_pass_thru;
870
871       /* Complete peeling is special as the probability of exit in last
872          copy becomes 1.  */
873       if (flags & DLTHE_FLAG_COMPLETTE_PEEL)
874         {
875           int wanted_freq = EDGE_FREQUENCY (e);
876
877           if (wanted_freq > freq_in)
878             wanted_freq = freq_in;
879
880           gcc_assert (!is_latch);
881           /* First copy has frequency of incoming edge.  Each subsequent
882              frequency should be reduced by prob_pass_wont_exit.  Caller
883              should've managed the flags so all except for original loop
884              has won't exist set.  */
885           scale_act = RDIV (wanted_freq * REG_BR_PROB_BASE, freq_in);
886           /* Now simulate the duplication adjustments and compute header
887              frequency of the last copy.  */
888           for (i = 0; i < ndupl; i++)
889             wanted_freq = RDIV (wanted_freq * scale_step[i], REG_BR_PROB_BASE);
890           scale_main = RDIV (wanted_freq * REG_BR_PROB_BASE, freq_in);
891         }
892       else if (is_latch)
893         {
894           prob_pass_main = TEST_BIT (wont_exit, 0)
895                                 ? prob_pass_wont_exit
896                                 : prob_pass_thru;
897           p = prob_pass_main;
898           scale_main = REG_BR_PROB_BASE;
899           for (i = 0; i < ndupl; i++)
900             {
901               scale_main += p;
902               p = RDIV (p * scale_step[i], REG_BR_PROB_BASE);
903             }
904           scale_main = RDIV (REG_BR_PROB_BASE * REG_BR_PROB_BASE, scale_main);
905           scale_act = RDIV (scale_main * prob_pass_main, REG_BR_PROB_BASE);
906         }
907       else
908         {
909           scale_main = REG_BR_PROB_BASE;
910           for (i = 0; i < ndupl; i++)
911             scale_main = RDIV (scale_main * scale_step[i], REG_BR_PROB_BASE);
912           scale_act = REG_BR_PROB_BASE - prob_pass_thru;
913         }
914       for (i = 0; i < ndupl; i++)
915         gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE);
916       gcc_assert (scale_main >= 0 && scale_main <= REG_BR_PROB_BASE
917                   && scale_act >= 0  && scale_act <= REG_BR_PROB_BASE);
918     }
919
920   /* Loop the new bbs will belong to.  */
921   target = e->src->loop_father;
922
923   /* Original loops.  */
924   n_orig_loops = 0;
925   for (aloop = loop->inner; aloop; aloop = aloop->next)
926     n_orig_loops++;
927   orig_loops = XCNEWVEC (struct loop *, n_orig_loops);
928   for (aloop = loop->inner, i = 0; aloop; aloop = aloop->next, i++)
929     orig_loops[i] = aloop;
930
931   set_loop_copy (loop, target);
932
933   first_active = XNEWVEC (basic_block, n);
934   if (is_latch)
935     {
936       memcpy (first_active, bbs, n * sizeof (basic_block));
937       first_active_latch = latch;
938     }
939
940   spec_edges[SE_ORIG] = orig;
941   spec_edges[SE_LATCH] = latch_edge;
942
943   place_after = e->src;
944   for (j = 0; j < ndupl; j++)
945     {
946       /* Copy loops.  */
947       copy_loops_to (orig_loops, n_orig_loops, target);
948
949       /* Copy bbs.  */
950       copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop,
951                 place_after);
952       place_after = new_spec_edges[SE_LATCH]->src;
953
954       if (flags & DLTHE_RECORD_COPY_NUMBER)
955         for (i = 0; i < n; i++)
956           {
957             gcc_assert (!new_bbs[i]->aux);
958             new_bbs[i]->aux = (void *)(size_t)(j + 1);
959           }
960
961       /* Note whether the blocks and edges belong to an irreducible loop.  */
962       if (add_irreducible_flag)
963         {
964           for (i = 0; i < n; i++)
965             new_bbs[i]->flags |= BB_DUPLICATED;
966           for (i = 0; i < n; i++)
967             {
968               edge_iterator ei;
969               new_bb = new_bbs[i];
970               if (new_bb->loop_father == target)
971                 new_bb->flags |= BB_IRREDUCIBLE_LOOP;
972
973               FOR_EACH_EDGE (ae, ei, new_bb->succs)
974                 if ((ae->dest->flags & BB_DUPLICATED)
975                     && (ae->src->loop_father == target
976                         || ae->dest->loop_father == target))
977                   ae->flags |= EDGE_IRREDUCIBLE_LOOP;
978             }
979           for (i = 0; i < n; i++)
980             new_bbs[i]->flags &= ~BB_DUPLICATED;
981         }
982
983       /* Redirect the special edges.  */
984       if (is_latch)
985         {
986           redirect_edge_and_branch_force (latch_edge, new_bbs[0]);
987           redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
988                                           loop->header);
989           set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], latch);
990           latch = loop->latch = new_bbs[n - 1];
991           e = latch_edge = new_spec_edges[SE_LATCH];
992         }
993       else
994         {
995           redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
996                                           loop->header);
997           redirect_edge_and_branch_force (e, new_bbs[0]);
998           set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], e->src);
999           e = new_spec_edges[SE_LATCH];
1000         }
1001
1002       /* Record exit edge in this copy.  */
1003       if (orig && TEST_BIT (wont_exit, j + 1))
1004         {
1005           if (to_remove)
1006             VEC_safe_push (edge, heap, *to_remove, new_spec_edges[SE_ORIG]);
1007           set_zero_probability (new_spec_edges[SE_ORIG]);
1008
1009           /* Scale the frequencies of the blocks dominated by the exit.  */
1010           if (bbs_to_scale)
1011             {
1012               EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1013                 {
1014                   scale_bbs_frequencies_int (new_bbs + i, 1, scale_after_exit,
1015                                              REG_BR_PROB_BASE);
1016                 }
1017             }
1018         }
1019
1020       /* Record the first copy in the control flow order if it is not
1021          the original loop (i.e. in case of peeling).  */
1022       if (!first_active_latch)
1023         {
1024           memcpy (first_active, new_bbs, n * sizeof (basic_block));
1025           first_active_latch = new_bbs[n - 1];
1026         }
1027
1028       /* Set counts and frequencies.  */
1029       if (flags & DLTHE_FLAG_UPDATE_FREQ)
1030         {
1031           scale_bbs_frequencies_int (new_bbs, n, scale_act, REG_BR_PROB_BASE);
1032           scale_act = RDIV (scale_act * scale_step[j], REG_BR_PROB_BASE);
1033         }
1034     }
1035   free (new_bbs);
1036   free (orig_loops);
1037
1038   /* Record the exit edge in the original loop body, and update the frequencies.  */
1039   if (orig && TEST_BIT (wont_exit, 0))
1040     {
1041       if (to_remove)
1042         VEC_safe_push (edge, heap, *to_remove, orig);
1043       set_zero_probability (orig);
1044
1045       /* Scale the frequencies of the blocks dominated by the exit.  */
1046       if (bbs_to_scale)
1047         {
1048           EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1049             {
1050               scale_bbs_frequencies_int (bbs + i, 1, scale_after_exit,
1051                                          REG_BR_PROB_BASE);
1052             }
1053         }
1054     }
1055
1056   /* Update the original loop.  */
1057   if (!is_latch)
1058     set_immediate_dominator (CDI_DOMINATORS, e->dest, e->src);
1059   if (flags & DLTHE_FLAG_UPDATE_FREQ)
1060     {
1061       scale_bbs_frequencies_int (bbs, n, scale_main, REG_BR_PROB_BASE);
1062       free (scale_step);
1063     }
1064
1065   /* Update dominators of outer blocks if affected.  */
1066   for (i = 0; i < n; i++)
1067     {
1068       basic_block dominated, dom_bb;
1069       VEC (basic_block, heap) *dom_bbs;
1070       unsigned j;
1071
1072       bb = bbs[i];
1073       bb->aux = 0;
1074
1075       dom_bbs = get_dominated_by (CDI_DOMINATORS, bb);
1076       for (j = 0; VEC_iterate (basic_block, dom_bbs, j, dominated); j++)
1077         {
1078           if (flow_bb_inside_loop_p (loop, dominated))
1079             continue;
1080           dom_bb = nearest_common_dominator (
1081                         CDI_DOMINATORS, first_active[i], first_active_latch);
1082           set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb);
1083         }
1084       VEC_free (basic_block, heap, dom_bbs);
1085     }
1086   free (first_active);
1087
1088   free (bbs);
1089   BITMAP_FREE (bbs_to_scale);
1090
1091   return true;
1092 }
1093
1094 /* A callback for make_forwarder block, to redirect all edges except for
1095    MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide
1096    whether to redirect it.  */
1097
1098 edge mfb_kj_edge;
1099 bool
1100 mfb_keep_just (edge e)
1101 {
1102   return e != mfb_kj_edge;
1103 }
1104
1105 /* Creates a pre-header for a LOOP.  Returns newly created block.  Unless
1106    CP_SIMPLE_PREHEADERS is set in FLAGS, we only force LOOP to have single
1107    entry; otherwise we also force preheader block to have only one successor.
1108    The function also updates dominators.  */
1109
1110 basic_block
1111 create_preheader (struct loop *loop, int flags)
1112 {
1113   edge e, fallthru;
1114   basic_block dummy;
1115   int nentry = 0;
1116   bool irred = false;
1117   bool latch_edge_was_fallthru;
1118   edge one_succ_pred = NULL, single_entry = NULL;
1119   edge_iterator ei;
1120
1121   FOR_EACH_EDGE (e, ei, loop->header->preds)
1122     {
1123       if (e->src == loop->latch)
1124         continue;
1125       irred |= (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
1126       nentry++;
1127       single_entry = e;
1128       if (single_succ_p (e->src))
1129         one_succ_pred = e;
1130     }
1131   gcc_assert (nentry);
1132   if (nentry == 1)
1133     {
1134       if (/* We do not allow entry block to be the loop preheader, since we
1135              cannot emit code there.  */
1136           single_entry->src != ENTRY_BLOCK_PTR
1137           /* If we want simple preheaders, also force the preheader to have
1138              just a single successor.  */
1139           && !((flags & CP_SIMPLE_PREHEADERS)
1140                && !single_succ_p (single_entry->src)))
1141         return NULL;
1142     }
1143
1144   mfb_kj_edge = loop_latch_edge (loop);
1145   latch_edge_was_fallthru = (mfb_kj_edge->flags & EDGE_FALLTHRU) != 0;
1146   fallthru = make_forwarder_block (loop->header, mfb_keep_just, NULL);
1147   dummy = fallthru->src;
1148   loop->header = fallthru->dest;
1149
1150   /* Try to be clever in placing the newly created preheader.  The idea is to
1151      avoid breaking any "fallthruness" relationship between blocks.
1152
1153      The preheader was created just before the header and all incoming edges
1154      to the header were redirected to the preheader, except the latch edge.
1155      So the only problematic case is when this latch edge was a fallthru
1156      edge: it is not anymore after the preheader creation so we have broken
1157      the fallthruness.  We're therefore going to look for a better place.  */
1158   if (latch_edge_was_fallthru)
1159     {
1160       if (one_succ_pred)
1161         e = one_succ_pred;
1162       else
1163         e = EDGE_PRED (dummy, 0);
1164
1165       move_block_after (dummy, e->src);
1166     }
1167
1168   if (irred)
1169     {
1170       dummy->flags |= BB_IRREDUCIBLE_LOOP;
1171       single_succ_edge (dummy)->flags |= EDGE_IRREDUCIBLE_LOOP;
1172     }
1173
1174   if (dump_file)
1175     fprintf (dump_file, "Created preheader block for loop %i\n",
1176              loop->num);
1177
1178   return dummy;
1179 }
1180
1181 /* Create preheaders for each loop; for meaning of FLAGS see create_preheader.  */
1182
1183 void
1184 create_preheaders (int flags)
1185 {
1186   loop_iterator li;
1187   struct loop *loop;
1188
1189   if (!current_loops)
1190     return;
1191
1192   FOR_EACH_LOOP (li, loop, 0)
1193     create_preheader (loop, flags);
1194   loops_state_set (LOOPS_HAVE_PREHEADERS);
1195 }
1196
1197 /* Forces all loop latches to have only single successor.  */
1198
1199 void
1200 force_single_succ_latches (void)
1201 {
1202   loop_iterator li;
1203   struct loop *loop;
1204   edge e;
1205
1206   FOR_EACH_LOOP (li, loop, 0)
1207     {
1208       if (loop->latch != loop->header && single_succ_p (loop->latch))
1209         continue;
1210
1211       e = find_edge (loop->latch, loop->header);
1212
1213       split_edge (e);
1214     }
1215   loops_state_set (LOOPS_HAVE_SIMPLE_LATCHES);
1216 }
1217
1218 /* This function is called from loop_version.  It splits the entry edge
1219    of the loop we want to version, adds the versioning condition, and
1220    adjust the edges to the two versions of the loop appropriately.
1221    e is an incoming edge. Returns the basic block containing the
1222    condition.
1223
1224    --- edge e ---- > [second_head]
1225
1226    Split it and insert new conditional expression and adjust edges.
1227
1228     --- edge e ---> [cond expr] ---> [first_head]
1229                         |
1230                         +---------> [second_head]
1231
1232   THEN_PROB is the probability of then branch of the condition.  */
1233
1234 static basic_block
1235 lv_adjust_loop_entry_edge (basic_block first_head, basic_block second_head,
1236                            edge e, void *cond_expr, unsigned then_prob)
1237 {
1238   basic_block new_head = NULL;
1239   edge e1;
1240
1241   gcc_assert (e->dest == second_head);
1242
1243   /* Split edge 'e'. This will create a new basic block, where we can
1244      insert conditional expr.  */
1245   new_head = split_edge (e);
1246
1247   lv_add_condition_to_bb (first_head, second_head, new_head,
1248                           cond_expr);
1249
1250   /* Don't set EDGE_TRUE_VALUE in RTL mode, as it's invalid there.  */
1251   e = single_succ_edge (new_head);
1252   e1 = make_edge (new_head, first_head,
1253                   current_ir_type () == IR_GIMPLE ? EDGE_TRUE_VALUE : 0);
1254   e1->probability = then_prob;
1255   e->probability = REG_BR_PROB_BASE - then_prob;
1256   e1->count = RDIV (e->count * e1->probability, REG_BR_PROB_BASE);
1257   e->count = RDIV (e->count * e->probability, REG_BR_PROB_BASE);
1258
1259   set_immediate_dominator (CDI_DOMINATORS, first_head, new_head);
1260   set_immediate_dominator (CDI_DOMINATORS, second_head, new_head);
1261
1262   /* Adjust loop header phi nodes.  */
1263   lv_adjust_loop_header_phi (first_head, second_head, new_head, e1);
1264
1265   return new_head;
1266 }
1267
1268 /* Main entry point for Loop Versioning transformation.
1269
1270    This transformation given a condition and a loop, creates
1271    -if (condition) { loop_copy1 } else { loop_copy2 },
1272    where loop_copy1 is the loop transformed in one way, and loop_copy2
1273    is the loop transformed in another way (or unchanged). 'condition'
1274    may be a run time test for things that were not resolved by static
1275    analysis (overlapping ranges (anti-aliasing), alignment, etc.).
1276
1277    THEN_PROB is the probability of the then edge of the if.  THEN_SCALE
1278    is the ratio by that the frequencies in the original loop should
1279    be scaled.  ELSE_SCALE is the ratio by that the frequencies in the
1280    new loop should be scaled.
1281    
1282    If PLACE_AFTER is true, we place the new loop after LOOP in the
1283    instruction stream, otherwise it is placed before LOOP.  */
1284
1285 struct loop *
1286 loop_version (struct loop *loop,
1287               void *cond_expr, basic_block *condition_bb,
1288               unsigned then_prob, unsigned then_scale, unsigned else_scale,
1289               bool place_after)
1290 {
1291   basic_block first_head, second_head;
1292   edge entry, latch_edge, true_edge, false_edge;
1293   int irred_flag;
1294   struct loop *nloop;
1295   basic_block cond_bb;
1296
1297   /* Record entry and latch edges for the loop */
1298   entry = loop_preheader_edge (loop);
1299   irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;
1300   entry->flags &= ~EDGE_IRREDUCIBLE_LOOP;
1301
1302   /* Note down head of loop as first_head.  */
1303   first_head = entry->dest;
1304
1305   /* Duplicate loop.  */
1306   if (!cfg_hook_duplicate_loop_to_header_edge (loop, entry, 1,
1307                                                NULL, NULL, NULL, 0))
1308     return NULL;
1309
1310   /* After duplication entry edge now points to new loop head block.
1311      Note down new head as second_head.  */
1312   second_head = entry->dest;
1313
1314   /* Split loop entry edge and insert new block with cond expr.  */
1315   cond_bb =  lv_adjust_loop_entry_edge (first_head, second_head,
1316                                         entry, cond_expr, then_prob);
1317   if (condition_bb)
1318     *condition_bb = cond_bb;
1319
1320   if (!cond_bb)
1321     {
1322       entry->flags |= irred_flag;
1323       return NULL;
1324     }
1325
1326   latch_edge = single_succ_edge (get_bb_copy (loop->latch));
1327
1328   extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1329   nloop = loopify (latch_edge,
1330                    single_pred_edge (get_bb_copy (loop->header)),
1331                    cond_bb, true_edge, false_edge,
1332                    false /* Do not redirect all edges.  */,
1333                    then_scale, else_scale);
1334
1335   /* loopify redirected latch_edge. Update its PENDING_STMTS.  */
1336   lv_flush_pending_stmts (latch_edge);
1337
1338   /* loopify redirected condition_bb's succ edge. Update its PENDING_STMTS.  */
1339   extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1340   lv_flush_pending_stmts (false_edge);
1341   /* Adjust irreducible flag.  */
1342   if (irred_flag)
1343     {
1344       cond_bb->flags |= BB_IRREDUCIBLE_LOOP;
1345       loop_preheader_edge (loop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1346       loop_preheader_edge (nloop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1347       single_pred_edge (cond_bb)->flags |= EDGE_IRREDUCIBLE_LOOP;
1348     }
1349
1350   if (place_after)
1351     {
1352       basic_block *bbs = get_loop_body_in_dom_order (nloop), after;
1353       unsigned i;
1354
1355       after = loop->latch;
1356
1357       for (i = 0; i < nloop->num_nodes; i++)
1358         {
1359           move_block_after (bbs[i], after);
1360           after = bbs[i];
1361         }
1362       free (bbs);
1363     }
1364
1365   /* At this point condition_bb is loop preheader with two successors,
1366      first_head and second_head.   Make sure that loop preheader has only
1367      one successor.  */
1368   split_edge (loop_preheader_edge (loop));
1369   split_edge (loop_preheader_edge (nloop));
1370
1371   return nloop;
1372 }
1373
1374 /* The structure of loops might have changed.  Some loops might get removed
1375    (and their headers and latches were set to NULL), loop exists might get
1376    removed (thus the loop nesting may be wrong), and some blocks and edges
1377    were changed (so the information about bb --> loop mapping does not have
1378    to be correct).  But still for the remaining loops the header dominates
1379    the latch, and loops did not get new subloops (new loops might possibly
1380    get created, but we are not interested in them).  Fix up the mess.
1381
1382    If CHANGED_BBS is not NULL, basic blocks whose loop has changed are
1383    marked in it.  */
1384
1385 void
1386 fix_loop_structure (bitmap changed_bbs)
1387 {
1388   basic_block bb;
1389   struct loop *loop, *ploop;
1390   loop_iterator li;
1391   bool record_exits = false;
1392   struct loop **superloop = XNEWVEC (struct loop *, number_of_loops ());
1393
1394   /* Remove the old bb -> loop mapping.  Remember the depth of the blocks in
1395      the loop hierarchy, so that we can recognize blocks whose loop nesting
1396      relationship has changed.  */
1397   FOR_EACH_BB (bb)
1398     {
1399       if (changed_bbs)
1400         bb->aux = (void *) (size_t) loop_depth (bb->loop_father);
1401       bb->loop_father = current_loops->tree_root;
1402     }
1403
1404   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1405     {
1406       release_recorded_exits ();
1407       record_exits = true;
1408     }
1409
1410   /* Remove the dead loops from structures.  We start from the innermost
1411      loops, so that when we remove the loops, we know that the loops inside
1412      are preserved, and do not waste time relinking loops that will be
1413      removed later.  */
1414   FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
1415     {
1416       if (loop->header)
1417         continue;
1418
1419       while (loop->inner)
1420         {
1421           ploop = loop->inner;
1422           flow_loop_tree_node_remove (ploop);
1423           flow_loop_tree_node_add (loop_outer (loop), ploop);
1424         }
1425
1426       /* Remove the loop and free its data.  */
1427       delete_loop (loop);
1428     }
1429
1430   /* Rescan the bodies of loops, starting from the outermost ones.  We assume
1431      that no optimization interchanges the order of the loops, i.e., it cannot
1432      happen that L1 was superloop of L2 before and it is subloop of L2 now
1433      (without explicitly updating loop information).  At the same time, we also
1434      determine the new loop structure.  */
1435   current_loops->tree_root->num_nodes = n_basic_blocks;
1436   FOR_EACH_LOOP (li, loop, 0)
1437     {
1438       superloop[loop->num] = loop->header->loop_father;
1439       loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
1440     }
1441
1442   /* Now fix the loop nesting.  */
1443   FOR_EACH_LOOP (li, loop, 0)
1444     {
1445       ploop = superloop[loop->num];
1446       if (ploop != loop_outer (loop))
1447         {
1448           flow_loop_tree_node_remove (loop);
1449           flow_loop_tree_node_add (ploop, loop);
1450         }
1451     }
1452   free (superloop);
1453
1454   /* Mark the blocks whose loop has changed.  */
1455   if (changed_bbs)
1456     {
1457       FOR_EACH_BB (bb)
1458         {
1459           if ((void *) (size_t) loop_depth (bb->loop_father) != bb->aux)
1460             bitmap_set_bit (changed_bbs, bb->index);
1461
1462           bb->aux = NULL;
1463         }
1464     }
1465
1466   if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS))
1467     create_preheaders (CP_SIMPLE_PREHEADERS);
1468
1469   if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
1470     force_single_succ_latches ();
1471
1472   if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
1473     mark_irreducible_loops ();
1474
1475   if (record_exits)
1476     record_loop_exits ();
1477
1478 #ifdef ENABLE_CHECKING
1479   verify_loop_structure ();
1480 #endif
1481 }