1 /* Loop manipulation code for GNU compiler.
2    Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
3    Free Software 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 #include "tree-flow.h"
34 
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_EACH_VEC_ELT (edge, exits, i, e)
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_EACH_VEC_ELT (edge, exits, i, e)
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, *target_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 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;
194 
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);
200 
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;
206 
207   while (qbeg != qend)
208     {
209       edge_iterator ei;
210       from = *qbeg;
211       qbeg++;
212       if (qbeg == qtop)
213 	qbeg = queue;
214       RESET_BIT (in_queue, from->index);
215 
216       if (from->loop_father->header == from)
217 	{
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);
222 	}
223       else
224 	{
225 	  /* Ordinary basic block.  */
226 	  if (!fix_bb_placement (from))
227 	    continue;
228 	  target_loop = from->loop_father;
229 	}
230 
231       FOR_EACH_EDGE (e, ei, from->succs)
232 	{
233 	  if (e->flags & EDGE_IRREDUCIBLE_LOOP)
234 	    *irred_invalidated = true;
235 	}
236 
237       /* Something has changed, insert predecessors into queue.  */
238       FOR_EACH_EDGE (e, ei, from->preds)
239 	{
240 	  basic_block pred = e->src;
241 	  struct loop *nca;
242 
243 	  if (e->flags & EDGE_IRREDUCIBLE_LOOP)
244 	    *irred_invalidated = true;
245 
246 	  if (TEST_BIT (in_queue, pred->index))
247 	    continue;
248 
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))
258 	    {
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;
264 	    }
265 
266 	  if (TEST_BIT (in_queue, pred->index))
267 	    continue;
268 
269 	  /* Schedule the basic block.  */
270 	  *qend = pred;
271 	  qend++;
272 	  if (qend == qtop)
273 	    qend = queue;
274 	  SET_BIT (in_queue, pred->index);
275 	}
276     }
277   free (in_queue);
278   free (queue);
279 }
280 
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)
286 {
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;
295 
296   if (!can_remove_branch_p (e))
297     return false;
298 
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;
306 
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));
313 
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)
319     {
320       f = loop_outer (l);
321       if (dominated_by_p (CDI_DOMINATORS, l->latch, e->dest))
322         unloop (l, &irred_invalidated);
323     }
324 
325   /* Identify the path.  */
326   nrem = find_path (e, &rem_bbs);
327 
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);
332 
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++)
342     {
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))
346 	  {
347 	    SET_BIT (seen, ae->dest->index);
348 	    bord_bbs[n_bord_bbs++] = ae->dest;
349 
350 	    if (ae->flags & EDGE_IRREDUCIBLE_LOOP)
351 	      irred_invalidated = true;
352 	  }
353     }
354 
355   /* Remove the path.  */
356   from = e->src;
357   remove_branch (e);
358   dom_bbs = NULL;
359 
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);
364 
365   remove_bbs (rem_bbs, nrem);
366   free (rem_bbs);
367 
368   /* Find blocks whose dominators may be affected.  */
369   sbitmap_zero (seen);
370   for (i = 0; i < n_bord_bbs; i++)
371     {
372       basic_block ldom;
373 
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);
378 
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);
384     }
385 
386   free (seen);
387 
388   /* Recount dominators.  */
389   iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, true);
390   VEC_free (basic_block, heap, dom_bbs);
391   free (bord_bbs);
392 
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);
397 
398   if (irred_invalidated
399       && loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
400     mark_irreducible_loops ();
401 
402   return true;
403 }
404 
405 /* Creates place for a new LOOP in loops structure.  */
406 
407 static void
408 place_new_loop (struct loop *loop)
409 {
410   loop->num = number_of_loops ();
411   VEC_safe_push (loop_p, gc, current_loops->larray, loop);
412 }
413 
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.  */
417 
418 void
419 add_loop (struct loop *loop, struct loop *outer)
420 {
421   basic_block *bbs;
422   int i, n;
423   struct loop *subloop;
424   edge e;
425   edge_iterator ei;
426 
427   /* Add it to loop structure.  */
428   place_new_loop (loop);
429   flow_loop_tree_node_add (outer, loop);
430 
431   /* Find its nodes.  */
432   bbs = XNEWVEC (basic_block, n_basic_blocks);
433   n = get_loop_body_with_size (loop, bbs, n_basic_blocks);
434 
435   for (i = 0; i < n; i++)
436     {
437       if (bbs[i]->loop_father == outer)
438 	{
439 	  remove_bb_from_loops (bbs[i]);
440 	  add_bb_to_loop (bbs[i], loop);
441 	  continue;
442 	}
443 
444       loop->num_nodes++;
445 
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])
450 	{
451 	  flow_loop_tree_node_remove (subloop);
452 	  flow_loop_tree_node_add (loop, subloop);
453 	}
454     }
455 
456   /* Update the information about loop exit edges.  */
457   for (i = 0; i < n; i++)
458     {
459       FOR_EACH_EDGE (e, ei, bbs[i]->succs)
460 	{
461 	  rescan_loop_exit (e, false, false);
462 	}
463     }
464 
465   free (bbs);
466 }
467 
468 /* Multiply all frequencies in LOOP by NUM/DEN.  */
469 void
470 scale_loop_frequencies (struct loop *loop, int num, int den)
471 {
472   basic_block *bbs;
473 
474   bbs = get_loop_body (loop);
475   scale_bbs_frequencies_int (bbs, loop->num_nodes, num, den);
476   free (bbs);
477 }
478 
479 /* Recompute dominance information for basic blocks outside LOOP.  */
480 
481 static void
482 update_dominators_in_loop (struct loop *loop)
483 {
484   VEC (basic_block, heap) *dom_bbs = NULL;
485   sbitmap seen;
486   basic_block *body;
487   unsigned i;
488 
489   seen = sbitmap_alloc (last_basic_block);
490   sbitmap_zero (seen);
491   body = get_loop_body (loop);
492 
493   for (i = 0; i < loop->num_nodes; i++)
494     SET_BIT (seen, body[i]->index);
495 
496   for (i = 0; i < loop->num_nodes; i++)
497     {
498       basic_block ldom;
499 
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))
504 	  {
505 	    SET_BIT (seen, ldom->index);
506 	    VEC_safe_push (basic_block, heap, dom_bbs, ldom);
507 	  }
508     }
509 
510   iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false);
511   free (body);
512   free (seen);
513   VEC_free (basic_block, heap, dom_bbs);
514 }
515 
516 /* Creates an if region as shown above. CONDITION is used to create
517    the test for the if.
518 
519    |
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)
543    |                                         V
544    |                                    -----------
545    |                                    | succ_bb |
546    |                                    -----------
547    |
548  */
549 
550 edge
551 create_empty_if_region_on_edge (edge entry_edge, tree condition)
552 {
553 
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;
559 
560   cond_bb = split_edge (entry_edge);
561 
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);
570 
571   join_bb = split_edge (single_succ_edge (cond_bb));
572 
573   e_true = single_succ_edge (cond_bb);
574   true_bb = split_edge (e_true);
575 
576   e_false = make_edge (cond_bb, join_bb, 0);
577   false_bb = split_edge (e_false);
578 
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;
583 
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);
588 
589   exit_edge = single_succ_edge (join_bb);
590 
591   if (single_pred_p (exit_edge->dest))
592     set_immediate_dominator (CDI_DOMINATORS, exit_edge->dest, join_bb);
593 
594   return exit_edge;
595 }
596 
597 /* create_empty_loop_on_edge
598    |
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    |                                \ ___ /
618 
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.
623 
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.  */
628 
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)
637 {
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;
646 
647   gcc_assert (entry_edge && initial_value && stride && upper_bound && iv);
648 
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);
656 
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);
661 
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);
667 
668   /* TODO: Fix frequencies and counts.  */
669   prob = REG_BR_PROB_BASE / 2;
670 
671   scale_loop_frequencies (loop, REG_BR_PROB_BASE - prob, REG_BR_PROB_BASE);
672 
673   /* Update dominators.  */
674   update_dominators_in_loop (loop);
675 
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;
680 
681   /* Construct IV code in loop.  */
682   initial_value = force_gimple_operand (initial_value, &stmts, true, iv);
683   if (stmts)
684     {
685       gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
686       gsi_commit_edge_inserts ();
687     }
688 
689   upper_bound = force_gimple_operand (upper_bound, &stmts, true, NULL);
690   if (stmts)
691     {
692       gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
693       gsi_commit_edge_inserts ();
694     }
695 
696   gsi = gsi_last_bb (loop_header);
697   create_iv (initial_value, stride, iv, loop, &gsi, false,
698 	     iv_before, iv_after);
699 
700   /* Insert loop exit condition.  */
701   cond_expr = gimple_build_cond
702     (LT_EXPR, *iv_before, upper_bound, NULL_TREE, NULL_TREE);
703 
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);
710 
711   split_block_after_labels (loop_header);
712 
713   return loop;
714 }
715 
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.  */
725 
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)
730 {
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;
739 
740   loop->header = header_edge->dest;
741   loop->latch = latch_edge->src;
742 
743   freq = EDGE_FREQUENCY (header_edge);
744   cnt = header_edge->count;
745 
746   /* Redirect edges.  */
747   loop_redirect_edge (latch_edge, loop->header);
748   loop_redirect_edge (true_edge, succ_bb);
749 
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)
753     {
754       loop_redirect_edge (header_edge, switch_bb);
755       loop_redirect_edge (false_edge, loop->header);
756 
757       /* Update dominators.  */
758       set_immediate_dominator (CDI_DOMINATORS, switch_bb, pred_bb);
759       set_immediate_dominator (CDI_DOMINATORS, loop->header, switch_bb);
760     }
761 
762   set_immediate_dominator (CDI_DOMINATORS, succ_bb, switch_bb);
763 
764   /* Compute new loop.  */
765   add_loop (loop, outer);
766 
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);
771 
772   /* Fix frequencies.  */
773   if (redirect_all_edges)
774     {
775       switch_bb->frequency = freq;
776       switch_bb->count = cnt;
777       FOR_EACH_EDGE (e, ei, switch_bb->succs)
778 	{
779 	  e->count = (switch_bb->count * e->probability) / REG_BR_PROB_BASE;
780 	}
781     }
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);
785 
786   return loop;
787 }
788 
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.
792 
793    If this may cause the information about irreducible regions to become
794    invalid, IRRED_INVALIDATED is set to true.  */
795 
796 static void
797 unloop (struct loop *loop, bool *irred_invalidated)
798 {
799   basic_block *body;
800   struct loop *ploop;
801   unsigned i, n;
802   basic_block latch = loop->latch;
803   bool dummy = false;
804 
805   if (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP)
806     *irred_invalidated = true;
807 
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.  */
813 
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)
818       {
819 	remove_bb_from_loops (body[i]);
820 	add_bb_to_loop (body[i], loop_outer (loop));
821       }
822   free(body);
823 
824   while (loop->inner)
825     {
826       ploop = loop->inner;
827       flow_loop_tree_node_remove (ploop);
828       flow_loop_tree_node_add (loop_outer (loop), ploop);
829     }
830 
831   /* Remove the loop and free its data.  */
832   delete_loop (loop);
833 
834   remove_edge (single_succ_edge (latch));
835 
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);
840 }
841 
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.
846 
847    IRRED_INVALIDATED is set to true if a change in the loop structures might
848    invalidate the information about irreducible regions.  */
849 
850 static void
851 fix_loop_placements (struct loop *loop, bool *irred_invalidated)
852 {
853   struct loop *outer;
854 
855   while (loop_outer (loop))
856     {
857       outer = loop_outer (loop);
858       if (!fix_loop_placement (loop))
859 	break;
860 
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;
869     }
870 }
871 
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)
876 {
877   struct loop *cloop;
878   cloop = alloc_loop ();
879   place_new_loop (cloop);
880 
881   /* Mark the new loop as copy of LOOP.  */
882   set_loop_copy (loop, cloop);
883 
884   /* Add it to target.  */
885   flow_loop_tree_node_add (target, cloop);
886 
887   return cloop;
888 }
889 
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)
894 {
895   struct loop *aloop, *cloop;
896 
897   for (aloop = loop->inner; aloop; aloop = aloop->next)
898     {
899       cloop = duplicate_loop (aloop, target);
900       duplicate_subloops (aloop, cloop);
901     }
902 }
903 
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)
908 {
909   struct loop *aloop;
910   int i;
911 
912   for (i = 0; i < n; i++)
913     {
914       aloop = duplicate_loop (copied_loops[i], target);
915       duplicate_subloops (copied_loops[i], aloop);
916     }
917 }
918 
919 /* Redirects edge E to basic block DEST.  */
920 static void
921 loop_redirect_edge (edge e, basic_block dest)
922 {
923   if (e->dest == dest)
924     return;
925 
926   redirect_edge_and_branch_force (e, dest);
927 }
928 
929 /* Check whether LOOP's body can be duplicated.  */
930 bool
931 can_duplicate_loop_p (const struct loop *loop)
932 {
933   int ret;
934   basic_block *bbs = get_loop_body (loop);
935 
936   ret = can_copy_bbs_p (bbs, loop->num_nodes);
937   free (bbs);
938 
939   return ret;
940 }
941 
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.  */
944 
945 static void
946 set_zero_probability (edge e)
947 {
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;
954 
955   gcc_assert (n > 1);
956   cnt1 = cnt / (n - 1);
957   prob1 = prob / (n - 1);
958 
959   FOR_EACH_EDGE (ae, ei, bb->succs)
960     {
961       if (ae == e)
962 	continue;
963 
964       ae->probability += prob1;
965       ae->count += cnt1;
966       last = ae;
967     }
968 
969   /* Move the rest to one of the edges.  */
970   last->probability += prob % (n - 1);
971   last->count += cnt % (n - 1);
972 
973   e->probability = 0;
974   e->count = 0;
975 }
976 
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.  */
987 
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)
993 {
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;
1014 
1015   gcc_assert (e->dest == loop->header);
1016   gcc_assert (ndupl > 0);
1017 
1018   if (orig)
1019     {
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));
1023     }
1024 
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);
1029 
1030   /* Check whether duplication is possible.  */
1031   if (!can_copy_bbs_p (bbs, loop->num_nodes))
1032     {
1033       free (bbs);
1034       return false;
1035     }
1036   new_bbs = XNEWVEC (basic_block, loop->num_nodes);
1037 
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);
1042 
1043   /* Find edge from latch.  */
1044   latch_edge = loop_latch_edge (loop);
1045 
1046   if (flags & DLTHE_FLAG_UPDATE_FREQ)
1047     {
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);
1062 
1063       if (orig
1064 	  && REG_BR_PROB_BASE - orig->probability != 0)
1065 	{
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++)
1072 	    {
1073 	      if (bbs[i] != orig->src
1074 		  && dominated_by_p (CDI_DOMINATORS, bbs[i], orig->src))
1075 		bitmap_set_bit (bbs_to_scale, i);
1076 	    }
1077 	}
1078 
1079       scale_step = XNEWVEC (int, ndupl);
1080 
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;
1085 
1086       /* Complete peeling is special as the probability of exit in last
1087 	 copy becomes 1.  */
1088       if (flags & DLTHE_FLAG_COMPLETTE_PEEL)
1089 	{
1090 	  int wanted_freq = EDGE_FREQUENCY (e);
1091 
1092 	  if (wanted_freq > freq_in)
1093 	    wanted_freq = freq_in;
1094 
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);
1106 	}
1107       else if (is_latch)
1108 	{
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++)
1115 	    {
1116 	      scale_main += p;
1117 	      p = RDIV (p * scale_step[i], REG_BR_PROB_BASE);
1118 	    }
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);
1121 	}
1122       else
1123 	{
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;
1128 	}
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);
1133     }
1134 
1135   /* Loop the new bbs will belong to.  */
1136   target = e->src->loop_father;
1137 
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;
1145 
1146   set_loop_copy (loop, target);
1147 
1148   first_active = XNEWVEC (basic_block, n);
1149   if (is_latch)
1150     {
1151       memcpy (first_active, bbs, n * sizeof (basic_block));
1152       first_active_latch = latch;
1153     }
1154 
1155   spec_edges[SE_ORIG] = orig;
1156   spec_edges[SE_LATCH] = latch_edge;
1157 
1158   place_after = e->src;
1159   for (j = 0; j < ndupl; j++)
1160     {
1161       /* Copy loops.  */
1162       copy_loops_to (orig_loops, n_orig_loops, target);
1163 
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;
1168 
1169       if (flags & DLTHE_RECORD_COPY_NUMBER)
1170 	for (i = 0; i < n; i++)
1171 	  {
1172 	    gcc_assert (!new_bbs[i]->aux);
1173 	    new_bbs[i]->aux = (void *)(size_t)(j + 1);
1174 	  }
1175 
1176       /* Note whether the blocks and edges belong to an irreducible loop.  */
1177       if (add_irreducible_flag)
1178 	{
1179 	  for (i = 0; i < n; i++)
1180 	    new_bbs[i]->flags |= BB_DUPLICATED;
1181 	  for (i = 0; i < n; i++)
1182 	    {
1183 	      edge_iterator ei;
1184 	      new_bb = new_bbs[i];
1185 	      if (new_bb->loop_father == target)
1186 		new_bb->flags |= BB_IRREDUCIBLE_LOOP;
1187 
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;
1193 	    }
1194 	  for (i = 0; i < n; i++)
1195 	    new_bbs[i]->flags &= ~BB_DUPLICATED;
1196 	}
1197 
1198       /* Redirect the special edges.  */
1199       if (is_latch)
1200 	{
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];
1207 	}
1208       else
1209 	{
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];
1215 	}
1216 
1217       /* Record exit edge in this copy.  */
1218       if (orig && TEST_BIT (wont_exit, j + 1))
1219 	{
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]);
1223 
1224 	  /* Scale the frequencies of the blocks dominated by the exit.  */
1225 	  if (bbs_to_scale)
1226 	    {
1227 	      EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1228 		{
1229 		  scale_bbs_frequencies_int (new_bbs + i, 1, scale_after_exit,
1230 					     REG_BR_PROB_BASE);
1231 		}
1232 	    }
1233 	}
1234 
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)
1238 	{
1239 	  memcpy (first_active, new_bbs, n * sizeof (basic_block));
1240 	  first_active_latch = new_bbs[n - 1];
1241 	}
1242 
1243       /* Set counts and frequencies.  */
1244       if (flags & DLTHE_FLAG_UPDATE_FREQ)
1245 	{
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);
1248 	}
1249     }
1250   free (new_bbs);
1251   free (orig_loops);
1252 
1253   /* Record the exit edge in the original loop body, and update the frequencies.  */
1254   if (orig && TEST_BIT (wont_exit, 0))
1255     {
1256       if (to_remove)
1257 	VEC_safe_push (edge, heap, *to_remove, orig);
1258       set_zero_probability (orig);
1259 
1260       /* Scale the frequencies of the blocks dominated by the exit.  */
1261       if (bbs_to_scale)
1262 	{
1263 	  EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1264 	    {
1265 	      scale_bbs_frequencies_int (bbs + i, 1, scale_after_exit,
1266 					 REG_BR_PROB_BASE);
1267 	    }
1268 	}
1269     }
1270 
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)
1275     {
1276       scale_bbs_frequencies_int (bbs, n, scale_main, REG_BR_PROB_BASE);
1277       free (scale_step);
1278     }
1279 
1280   /* Update dominators of outer blocks if affected.  */
1281   for (i = 0; i < n; i++)
1282     {
1283       basic_block dominated, dom_bb;
1284       VEC (basic_block, heap) *dom_bbs;
1285       unsigned j;
1286 
1287       bb = bbs[i];
1288       bb->aux = 0;
1289 
1290       dom_bbs = get_dominated_by (CDI_DOMINATORS, bb);
1291       FOR_EACH_VEC_ELT (basic_block, dom_bbs, j, dominated)
1292 	{
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);
1298 	}
1299       VEC_free (basic_block, heap, dom_bbs);
1300     }
1301   free (first_active);
1302 
1303   free (bbs);
1304   BITMAP_FREE (bbs_to_scale);
1305 
1306   return true;
1307 }
1308 
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.  */
1312 
1313 edge mfb_kj_edge;
1314 bool
1315 mfb_keep_just (edge e)
1316 {
1317   return e != mfb_kj_edge;
1318 }
1319 
1320 /* True when a candidate preheader BLOCK has predecessors from LOOP.  */
1321 
1322 static bool
1323 has_preds_from_loop (basic_block block, struct loop *loop)
1324 {
1325   edge e;
1326   edge_iterator ei;
1327 
1328   FOR_EACH_EDGE (e, ei, block->preds)
1329     if (e->src->loop_father == loop)
1330       return true;
1331   return false;
1332 }
1333 
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.  */
1341 
1342 basic_block
1343 create_preheader (struct loop *loop, int flags)
1344 {
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;
1352 
1353   FOR_EACH_EDGE (e, ei, loop->header->preds)
1354     {
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;
1362     }
1363   gcc_assert (nentry);
1364   if (nentry == 1)
1365     {
1366       bool need_forwarder_block = false;
1367 
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
1373         {
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;
1385         }
1386       if (! need_forwarder_block)
1387 	return NULL;
1388     }
1389 
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;
1395 
1396   /* Try to be clever in placing the newly created preheader.  The idea is to
1397      avoid breaking any "fallthruness" relationship between blocks.
1398 
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)
1405     {
1406       if (one_succ_pred)
1407 	e = one_succ_pred;
1408       else
1409 	e = EDGE_PRED (dummy, 0);
1410 
1411       move_block_after (dummy, e->src);
1412     }
1413 
1414   if (irred)
1415     {
1416       dummy->flags |= BB_IRREDUCIBLE_LOOP;
1417       single_succ_edge (dummy)->flags |= EDGE_IRREDUCIBLE_LOOP;
1418     }
1419 
1420   if (dump_file)
1421     fprintf (dump_file, "Created preheader block for loop %i\n",
1422 	     loop->num);
1423 
1424   if (flags & CP_FALLTHRU_PREHEADERS)
1425     gcc_assert ((single_succ_edge (dummy)->flags & EDGE_FALLTHRU)
1426                 && !JUMP_P (BB_END (dummy)));
1427 
1428   return dummy;
1429 }
1430 
1431 /* Create preheaders for each loop; for meaning of FLAGS see create_preheader.  */
1432 
1433 void
1434 create_preheaders (int flags)
1435 {
1436   loop_iterator li;
1437   struct loop *loop;
1438 
1439   if (!current_loops)
1440     return;
1441 
1442   FOR_EACH_LOOP (li, loop, 0)
1443     create_preheader (loop, flags);
1444   loops_state_set (LOOPS_HAVE_PREHEADERS);
1445 }
1446 
1447 /* Forces all loop latches to have only single successor.  */
1448 
1449 void
1450 force_single_succ_latches (void)
1451 {
1452   loop_iterator li;
1453   struct loop *loop;
1454   edge e;
1455 
1456   FOR_EACH_LOOP (li, loop, 0)
1457     {
1458       if (loop->latch != loop->header && single_succ_p (loop->latch))
1459 	continue;
1460 
1461       e = find_edge (loop->latch, loop->header);
1462 
1463       split_edge (e);
1464     }
1465   loops_state_set (LOOPS_HAVE_SIMPLE_LATCHES);
1466 }
1467 
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.
1473 
1474    --- edge e ---- > [second_head]
1475 
1476    Split it and insert new conditional expression and adjust edges.
1477 
1478     --- edge e ---> [cond expr] ---> [first_head]
1479 			|
1480 			+---------> [second_head]
1481 
1482   THEN_PROB is the probability of then branch of the condition.  */
1483 
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)
1487 {
1488   basic_block new_head = NULL;
1489   edge e1;
1490 
1491   gcc_assert (e->dest == second_head);
1492 
1493   /* Split edge 'e'. This will create a new basic block, where we can
1494      insert conditional expr.  */
1495   new_head = split_edge (e);
1496 
1497   lv_add_condition_to_bb (first_head, second_head, new_head,
1498 			  cond_expr);
1499 
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);
1508 
1509   set_immediate_dominator (CDI_DOMINATORS, first_head, new_head);
1510   set_immediate_dominator (CDI_DOMINATORS, second_head, new_head);
1511 
1512   /* Adjust loop header phi nodes.  */
1513   lv_adjust_loop_header_phi (first_head, second_head, new_head, e1);
1514 
1515   return new_head;
1516 }
1517 
1518 /* Main entry point for Loop Versioning transformation.
1519 
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.).
1526 
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.
1531 
1532    If PLACE_AFTER is true, we place the new loop after LOOP in the
1533    instruction stream, otherwise it is placed before LOOP.  */
1534 
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)
1540 {
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;
1546 
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;
1551 
1552   /* Note down head of loop as first_head.  */
1553   first_head = entry->dest;
1554 
1555   /* Duplicate loop.  */
1556   if (!cfg_hook_duplicate_loop_to_header_edge (loop, entry, 1,
1557 					       NULL, NULL, NULL, 0))
1558     {
1559       entry->flags |= irred_flag;
1560       return NULL;
1561     }
1562 
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;
1566 
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;
1572 
1573   if (!cond_bb)
1574     {
1575       entry->flags |= irred_flag;
1576       return NULL;
1577     }
1578 
1579   latch_edge = single_succ_edge (get_bb_copy (loop->latch));
1580 
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);
1587 
1588   /* loopify redirected latch_edge. Update its PENDING_STMTS.  */
1589   lv_flush_pending_stmts (latch_edge);
1590 
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)
1596     {
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;
1601     }
1602 
1603   if (place_after)
1604     {
1605       basic_block *bbs = get_loop_body_in_dom_order (nloop), after;
1606       unsigned i;
1607 
1608       after = loop->latch;
1609 
1610       for (i = 0; i < nloop->num_nodes; i++)
1611 	{
1612 	  move_block_after (bbs[i], after);
1613 	  after = bbs[i];
1614 	}
1615       free (bbs);
1616     }
1617 
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));
1623 
1624   return nloop;
1625 }
1626 
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.
1634 
1635    If CHANGED_BBS is not NULL, basic blocks whose loop has changed are
1636    marked in it.  */
1637 
1638 void
1639 fix_loop_structure (bitmap changed_bbs)
1640 {
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 ());
1646 
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)
1651     {
1652       if (changed_bbs)
1653 	bb->aux = (void *) (size_t) loop_depth (bb->loop_father);
1654       bb->loop_father = current_loops->tree_root;
1655     }
1656 
1657   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1658     {
1659       release_recorded_exits ();
1660       record_exits = true;
1661     }
1662 
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)
1668     {
1669       if (loop->header)
1670 	continue;
1671 
1672       while (loop->inner)
1673 	{
1674 	  ploop = loop->inner;
1675 	  flow_loop_tree_node_remove (ploop);
1676 	  flow_loop_tree_node_add (loop_outer (loop), ploop);
1677 	}
1678 
1679       /* Remove the loop and free its data.  */
1680       delete_loop (loop);
1681     }
1682 
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)
1690     {
1691       superloop[loop->num] = loop->header->loop_father;
1692       loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
1693     }
1694 
1695   /* Now fix the loop nesting.  */
1696   FOR_EACH_LOOP (li, loop, 0)
1697     {
1698       ploop = superloop[loop->num];
1699       if (ploop != loop_outer (loop))
1700 	{
1701 	  flow_loop_tree_node_remove (loop);
1702 	  flow_loop_tree_node_add (ploop, loop);
1703 	}
1704     }
1705   free (superloop);
1706 
1707   /* Mark the blocks whose loop has changed.  */
1708   if (changed_bbs)
1709     {
1710       FOR_EACH_BB (bb)
1711 	{
1712 	  if ((void *) (size_t) loop_depth (bb->loop_father) != bb->aux)
1713 	    bitmap_set_bit (changed_bbs, bb->index);
1714 
1715     	  bb->aux = NULL;
1716 	}
1717     }
1718 
1719   if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS))
1720     create_preheaders (CP_SIMPLE_PREHEADERS);
1721 
1722   if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
1723     force_single_succ_latches ();
1724 
1725   if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
1726     mark_irreducible_loops ();
1727 
1728   if (record_exits)
1729     record_loop_exits ();
1730 
1731 #ifdef ENABLE_CHECKING
1732   verify_loop_structure ();
1733 #endif
1734 }
1735