Eliminate n_basic_blocks macro
[platform/upstream/gcc.git] / gcc / cfgloopmanip.c
1 /* Loop manipulation code for GNU compiler.
2    Copyright (C) 2002-2013 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "tm.h"
24 #include "rtl.h"
25 #include "basic-block.h"
26 #include "cfgloop.h"
27 #include "tree.h"
28 #include "gimple.h"
29 #include "gimple-iterator.h"
30 #include "gimplify-me.h"
31 #include "tree-ssa-loop-manip.h"
32 #include "dumpfile.h"
33
34 static void copy_loops_to (struct loop **, int,
35                            struct loop *);
36 static void loop_redirect_edge (edge, basic_block);
37 static void remove_bbs (basic_block *, int);
38 static bool rpe_enum_p (const_basic_block, const void *);
39 static int find_path (edge, basic_block **);
40 static void fix_loop_placements (struct loop *, bool *);
41 static bool fix_bb_placement (basic_block);
42 static void fix_bb_placements (basic_block, bool *, bitmap);
43
44 /* Checks whether basic block BB is dominated by DATA.  */
45 static bool
46 rpe_enum_p (const_basic_block bb, const void *data)
47 {
48   return dominated_by_p (CDI_DOMINATORS, bb, (const_basic_block) data);
49 }
50
51 /* Remove basic blocks BBS.  NBBS is the number of the basic blocks.  */
52
53 static void
54 remove_bbs (basic_block *bbs, int nbbs)
55 {
56   int i;
57
58   for (i = 0; i < nbbs; i++)
59     delete_basic_block (bbs[i]);
60 }
61
62 /* Find path -- i.e. the basic blocks dominated by edge E and put them
63    into array BBS, that will be allocated large enough to contain them.
64    E->dest must have exactly one predecessor for this to work (it is
65    easy to achieve and we do not put it here because we do not want to
66    alter anything by this function).  The number of basic blocks in the
67    path is returned.  */
68 static int
69 find_path (edge e, basic_block **bbs)
70 {
71   gcc_assert (EDGE_COUNT (e->dest->preds) <= 1);
72
73   /* Find bbs in the path.  */
74   *bbs = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
75   return dfs_enumerate_from (e->dest, 0, rpe_enum_p, *bbs,
76                              n_basic_blocks_for_fn (cfun), e->dest);
77 }
78
79 /* Fix placement of basic block BB inside loop hierarchy --
80    Let L be a loop to that BB belongs.  Then every successor of BB must either
81      1) belong to some superloop of loop L, or
82      2) be a header of loop K such that K->outer is superloop of L
83    Returns true if we had to move BB into other loop to enforce this condition,
84    false if the placement of BB was already correct (provided that placements
85    of its successors are correct).  */
86 static bool
87 fix_bb_placement (basic_block bb)
88 {
89   edge e;
90   edge_iterator ei;
91   struct loop *loop = current_loops->tree_root, *act;
92
93   FOR_EACH_EDGE (e, ei, bb->succs)
94     {
95       if (e->dest == EXIT_BLOCK_PTR)
96         continue;
97
98       act = e->dest->loop_father;
99       if (act->header == e->dest)
100         act = loop_outer (act);
101
102       if (flow_loop_nested_p (loop, act))
103         loop = act;
104     }
105
106   if (loop == bb->loop_father)
107     return false;
108
109   remove_bb_from_loops (bb);
110   add_bb_to_loop (bb, loop);
111
112   return true;
113 }
114
115 /* Fix placement of LOOP inside loop tree, i.e. find the innermost superloop
116    of LOOP to that leads at least one exit edge of LOOP, and set it
117    as the immediate superloop of LOOP.  Return true if the immediate superloop
118    of LOOP changed.
119
120    IRRED_INVALIDATED is set to true if a change in the loop structures might
121    invalidate the information about irreducible regions.  */
122
123 static bool
124 fix_loop_placement (struct loop *loop, bool *irred_invalidated)
125 {
126   unsigned i;
127   edge e;
128   vec<edge> exits = get_loop_exit_edges (loop);
129   struct loop *father = current_loops->tree_root, *act;
130   bool ret = false;
131
132   FOR_EACH_VEC_ELT (exits, i, e)
133     {
134       act = find_common_loop (loop, e->dest->loop_father);
135       if (flow_loop_nested_p (father, act))
136         father = act;
137     }
138
139   if (father != loop_outer (loop))
140     {
141       for (act = loop_outer (loop); act != father; act = loop_outer (act))
142         act->num_nodes -= loop->num_nodes;
143       flow_loop_tree_node_remove (loop);
144       flow_loop_tree_node_add (father, loop);
145
146       /* The exit edges of LOOP no longer exits its original immediate
147          superloops; remove them from the appropriate exit lists.  */
148       FOR_EACH_VEC_ELT (exits, i, e)
149         {
150           /* We may need to recompute irreducible loops.  */
151           if (e->flags & EDGE_IRREDUCIBLE_LOOP)
152             *irred_invalidated = true;
153           rescan_loop_exit (e, false, false);
154         }
155
156       ret = true;
157     }
158
159   exits.release ();
160   return ret;
161 }
162
163 /* Fix placements of basic blocks inside loop hierarchy stored in loops; i.e.
164    enforce condition condition stated in description of fix_bb_placement. We
165    start from basic block FROM that had some of its successors removed, so that
166    his placement no longer has to be correct, and iteratively fix placement of
167    its predecessors that may change if placement of FROM changed.  Also fix
168    placement of subloops of FROM->loop_father, that might also be altered due
169    to this change; the condition for them is similar, except that instead of
170    successors we consider edges coming out of the loops.
171
172    If the changes may invalidate the information about irreducible regions,
173    IRRED_INVALIDATED is set to true.  
174
175    If LOOP_CLOSED_SSA_INVLIDATED is non-zero then all basic blocks with
176    changed loop_father are collected there. */
177
178 static void
179 fix_bb_placements (basic_block from,
180                    bool *irred_invalidated,
181                    bitmap loop_closed_ssa_invalidated)
182 {
183   sbitmap in_queue;
184   basic_block *queue, *qtop, *qbeg, *qend;
185   struct loop *base_loop, *target_loop;
186   edge e;
187
188   /* We pass through blocks back-reachable from FROM, testing whether some
189      of their successors moved to outer loop.  It may be necessary to
190      iterate several times, but it is finite, as we stop unless we move
191      the basic block up the loop structure.  The whole story is a bit
192      more complicated due to presence of subloops, those are moved using
193      fix_loop_placement.  */
194
195   base_loop = from->loop_father;
196   /* If we are already in the outermost loop, the basic blocks cannot be moved
197      outside of it.  If FROM is the header of the base loop, it cannot be moved
198      outside of it, either.  In both cases, we can end now.  */
199   if (base_loop == current_loops->tree_root
200       || from == base_loop->header)
201     return;
202
203   in_queue = sbitmap_alloc (last_basic_block);
204   bitmap_clear (in_queue);
205   bitmap_set_bit (in_queue, from->index);
206   /* Prevent us from going out of the base_loop.  */
207   bitmap_set_bit (in_queue, base_loop->header->index);
208
209   queue = XNEWVEC (basic_block, base_loop->num_nodes + 1);
210   qtop = queue + base_loop->num_nodes + 1;
211   qbeg = queue;
212   qend = queue + 1;
213   *qbeg = from;
214
215   while (qbeg != qend)
216     {
217       edge_iterator ei;
218       from = *qbeg;
219       qbeg++;
220       if (qbeg == qtop)
221         qbeg = queue;
222       bitmap_clear_bit (in_queue, from->index);
223
224       if (from->loop_father->header == from)
225         {
226           /* Subloop header, maybe move the loop upward.  */
227           if (!fix_loop_placement (from->loop_father, irred_invalidated))
228             continue;
229           target_loop = loop_outer (from->loop_father);
230           if (loop_closed_ssa_invalidated)
231             {
232               basic_block *bbs = get_loop_body (from->loop_father);
233               for (unsigned i = 0; i < from->loop_father->num_nodes; ++i)
234                 bitmap_set_bit (loop_closed_ssa_invalidated, bbs[i]->index);
235               free (bbs);
236             }
237         }
238       else
239         {
240           /* Ordinary basic block.  */
241           if (!fix_bb_placement (from))
242             continue;
243           target_loop = from->loop_father;
244           if (loop_closed_ssa_invalidated)
245             bitmap_set_bit (loop_closed_ssa_invalidated, from->index);
246         }
247
248       FOR_EACH_EDGE (e, ei, from->succs)
249         {
250           if (e->flags & EDGE_IRREDUCIBLE_LOOP)
251             *irred_invalidated = true;
252         }
253
254       /* Something has changed, insert predecessors into queue.  */
255       FOR_EACH_EDGE (e, ei, from->preds)
256         {
257           basic_block pred = e->src;
258           struct loop *nca;
259
260           if (e->flags & EDGE_IRREDUCIBLE_LOOP)
261             *irred_invalidated = true;
262
263           if (bitmap_bit_p (in_queue, pred->index))
264             continue;
265
266           /* If it is subloop, then it either was not moved, or
267              the path up the loop tree from base_loop do not contain
268              it.  */
269           nca = find_common_loop (pred->loop_father, base_loop);
270           if (pred->loop_father != base_loop
271               && (nca == base_loop
272                   || nca != pred->loop_father))
273             pred = pred->loop_father->header;
274           else if (!flow_loop_nested_p (target_loop, pred->loop_father))
275             {
276               /* If PRED is already higher in the loop hierarchy than the
277                  TARGET_LOOP to that we moved FROM, the change of the position
278                  of FROM does not affect the position of PRED, so there is no
279                  point in processing it.  */
280               continue;
281             }
282
283           if (bitmap_bit_p (in_queue, pred->index))
284             continue;
285
286           /* Schedule the basic block.  */
287           *qend = pred;
288           qend++;
289           if (qend == qtop)
290             qend = queue;
291           bitmap_set_bit (in_queue, pred->index);
292         }
293     }
294   free (in_queue);
295   free (queue);
296 }
297
298 /* Removes path beginning at edge E, i.e. remove basic blocks dominated by E
299    and update loop structures and dominators.  Return true if we were able
300    to remove the path, false otherwise (and nothing is affected then).  */
301 bool
302 remove_path (edge e)
303 {
304   edge ae;
305   basic_block *rem_bbs, *bord_bbs, from, bb;
306   vec<basic_block> dom_bbs;
307   int i, nrem, n_bord_bbs;
308   sbitmap seen;
309   bool irred_invalidated = false;
310   edge_iterator ei;
311   struct loop *l, *f;
312
313   if (!can_remove_branch_p (e))
314     return false;
315
316   /* Keep track of whether we need to update information about irreducible
317      regions.  This is the case if the removed area is a part of the
318      irreducible region, or if the set of basic blocks that belong to a loop
319      that is inside an irreducible region is changed, or if such a loop is
320      removed.  */
321   if (e->flags & EDGE_IRREDUCIBLE_LOOP)
322     irred_invalidated = true;
323
324   /* We need to check whether basic blocks are dominated by the edge
325      e, but we only have basic block dominators.  This is easy to
326      fix -- when e->dest has exactly one predecessor, this corresponds
327      to blocks dominated by e->dest, if not, split the edge.  */
328   if (!single_pred_p (e->dest))
329     e = single_pred_edge (split_edge (e));
330
331   /* It may happen that by removing path we remove one or more loops
332      we belong to.  In this case first unloop the loops, then proceed
333      normally.   We may assume that e->dest is not a header of any loop,
334      as it now has exactly one predecessor.  */
335   for (l = e->src->loop_father; loop_outer (l); l = f)
336     {
337       f = loop_outer (l);
338       if (dominated_by_p (CDI_DOMINATORS, l->latch, e->dest))
339         unloop (l, &irred_invalidated, NULL);
340     }
341
342   /* Identify the path.  */
343   nrem = find_path (e, &rem_bbs);
344
345   n_bord_bbs = 0;
346   bord_bbs = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
347   seen = sbitmap_alloc (last_basic_block);
348   bitmap_clear (seen);
349
350   /* Find "border" hexes -- i.e. those with predecessor in removed path.  */
351   for (i = 0; i < nrem; i++)
352     bitmap_set_bit (seen, rem_bbs[i]->index);
353   if (!irred_invalidated)
354     FOR_EACH_EDGE (ae, ei, e->src->succs)
355       if (ae != e && ae->dest != EXIT_BLOCK_PTR && !bitmap_bit_p (seen, ae->dest->index)
356           && ae->flags & EDGE_IRREDUCIBLE_LOOP)
357         {
358           irred_invalidated = true;
359           break;
360         }
361
362   for (i = 0; i < nrem; i++)
363     {
364       bb = rem_bbs[i];
365       FOR_EACH_EDGE (ae, ei, rem_bbs[i]->succs)
366         if (ae->dest != EXIT_BLOCK_PTR && !bitmap_bit_p (seen, ae->dest->index))
367           {
368             bitmap_set_bit (seen, ae->dest->index);
369             bord_bbs[n_bord_bbs++] = ae->dest;
370
371             if (ae->flags & EDGE_IRREDUCIBLE_LOOP)
372               irred_invalidated = true;
373           }
374     }
375
376   /* Remove the path.  */
377   from = e->src;
378   remove_branch (e);
379   dom_bbs.create (0);
380
381   /* Cancel loops contained in the path.  */
382   for (i = 0; i < nrem; i++)
383     if (rem_bbs[i]->loop_father->header == rem_bbs[i])
384       cancel_loop_tree (rem_bbs[i]->loop_father);
385
386   remove_bbs (rem_bbs, nrem);
387   free (rem_bbs);
388
389   /* Find blocks whose dominators may be affected.  */
390   bitmap_clear (seen);
391   for (i = 0; i < n_bord_bbs; i++)
392     {
393       basic_block ldom;
394
395       bb = get_immediate_dominator (CDI_DOMINATORS, bord_bbs[i]);
396       if (bitmap_bit_p (seen, bb->index))
397         continue;
398       bitmap_set_bit (seen, bb->index);
399
400       for (ldom = first_dom_son (CDI_DOMINATORS, bb);
401            ldom;
402            ldom = next_dom_son (CDI_DOMINATORS, ldom))
403         if (!dominated_by_p (CDI_DOMINATORS, from, ldom))
404           dom_bbs.safe_push (ldom);
405     }
406
407   free (seen);
408
409   /* Recount dominators.  */
410   iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, true);
411   dom_bbs.release ();
412   free (bord_bbs);
413
414   /* Fix placements of basic blocks inside loops and the placement of
415      loops in the loop tree.  */
416   fix_bb_placements (from, &irred_invalidated, NULL);
417   fix_loop_placements (from->loop_father, &irred_invalidated);
418
419   if (irred_invalidated
420       && loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
421     mark_irreducible_loops ();
422
423   return true;
424 }
425
426 /* Creates place for a new LOOP in loops structure of FN.  */
427
428 void
429 place_new_loop (struct function *fn, struct loop *loop)
430 {
431   loop->num = number_of_loops (fn);
432   vec_safe_push (loops_for_fn (fn)->larray, loop);
433 }
434
435 /* Given LOOP structure with filled header and latch, find the body of the
436    corresponding loop and add it to loops tree.  Insert the LOOP as a son of
437    outer.  */
438
439 void
440 add_loop (struct loop *loop, struct loop *outer)
441 {
442   basic_block *bbs;
443   int i, n;
444   struct loop *subloop;
445   edge e;
446   edge_iterator ei;
447
448   /* Add it to loop structure.  */
449   place_new_loop (cfun, loop);
450   flow_loop_tree_node_add (outer, loop);
451
452   /* Find its nodes.  */
453   bbs = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
454   n = get_loop_body_with_size (loop, bbs, n_basic_blocks_for_fn (cfun));
455
456   for (i = 0; i < n; i++)
457     {
458       if (bbs[i]->loop_father == outer)
459         {
460           remove_bb_from_loops (bbs[i]);
461           add_bb_to_loop (bbs[i], loop);
462           continue;
463         }
464
465       loop->num_nodes++;
466
467       /* If we find a direct subloop of OUTER, move it to LOOP.  */
468       subloop = bbs[i]->loop_father;
469       if (loop_outer (subloop) == outer
470           && subloop->header == bbs[i])
471         {
472           flow_loop_tree_node_remove (subloop);
473           flow_loop_tree_node_add (loop, subloop);
474         }
475     }
476
477   /* Update the information about loop exit edges.  */
478   for (i = 0; i < n; i++)
479     {
480       FOR_EACH_EDGE (e, ei, bbs[i]->succs)
481         {
482           rescan_loop_exit (e, false, false);
483         }
484     }
485
486   free (bbs);
487 }
488
489 /* Multiply all frequencies in LOOP by NUM/DEN.  */
490
491 void
492 scale_loop_frequencies (struct loop *loop, int num, int den)
493 {
494   basic_block *bbs;
495
496   bbs = get_loop_body (loop);
497   scale_bbs_frequencies_int (bbs, loop->num_nodes, num, den);
498   free (bbs);
499 }
500
501 /* Multiply all frequencies in LOOP by SCALE/REG_BR_PROB_BASE.
502    If ITERATION_BOUND is non-zero, scale even further if loop is predicted
503    to iterate too many times.  */
504
505 void
506 scale_loop_profile (struct loop *loop, int scale, gcov_type iteration_bound)
507 {
508   gcov_type iterations = expected_loop_iterations_unbounded (loop);
509   edge e;
510   edge_iterator ei;
511
512   if (dump_file && (dump_flags & TDF_DETAILS))
513     fprintf (dump_file, ";; Scaling loop %i with scale %f, "
514              "bounding iterations to %i from guessed %i\n",
515              loop->num, (double)scale / REG_BR_PROB_BASE,
516              (int)iteration_bound, (int)iterations);
517
518   /* See if loop is predicted to iterate too many times.  */
519   if (iteration_bound && iterations > 0
520       && apply_probability (iterations, scale) > iteration_bound)
521     {
522       /* Fixing loop profile for different trip count is not trivial; the exit
523          probabilities has to be updated to match and frequencies propagated down
524          to the loop body.
525
526          We fully update only the simple case of loop with single exit that is
527          either from the latch or BB just before latch and leads from BB with
528          simple conditional jump.   This is OK for use in vectorizer.  */
529       e = single_exit (loop);
530       if (e)
531         {
532           edge other_e;
533           int freq_delta;
534           gcov_type count_delta;
535
536           FOR_EACH_EDGE (other_e, ei, e->src->succs)
537             if (!(other_e->flags & (EDGE_ABNORMAL | EDGE_FAKE))
538                 && e != other_e)
539               break;
540
541           /* Probability of exit must be 1/iterations.  */
542           freq_delta = EDGE_FREQUENCY (e);
543           e->probability = REG_BR_PROB_BASE / iteration_bound;
544           other_e->probability = inverse_probability (e->probability);
545           freq_delta -= EDGE_FREQUENCY (e);
546
547           /* Adjust counts accordingly.  */
548           count_delta = e->count;
549           e->count = apply_probability (e->src->count, e->probability);
550           other_e->count = apply_probability (e->src->count, other_e->probability);
551           count_delta -= e->count;
552
553           /* If latch exists, change its frequency and count, since we changed
554              probability of exit.  Theoretically we should update everything from
555              source of exit edge to latch, but for vectorizer this is enough.  */
556           if (loop->latch
557               && loop->latch != e->src)
558             {
559               loop->latch->frequency += freq_delta;
560               if (loop->latch->frequency < 0)
561                 loop->latch->frequency = 0;
562               loop->latch->count += count_delta;
563               if (loop->latch->count < 0)
564                 loop->latch->count = 0;
565             }
566         }
567
568       /* Roughly speaking we want to reduce the loop body profile by the
569          the difference of loop iterations.  We however can do better if
570          we look at the actual profile, if it is available.  */
571       scale = RDIV (iteration_bound * scale, iterations);
572       if (loop->header->count)
573         {
574           gcov_type count_in = 0;
575
576           FOR_EACH_EDGE (e, ei, loop->header->preds)
577             if (e->src != loop->latch)
578               count_in += e->count;
579
580           if (count_in != 0)
581             scale = GCOV_COMPUTE_SCALE (count_in * iteration_bound,
582                                         loop->header->count);
583         }
584       else if (loop->header->frequency)
585         {
586           int freq_in = 0;
587
588           FOR_EACH_EDGE (e, ei, loop->header->preds)
589             if (e->src != loop->latch)
590               freq_in += EDGE_FREQUENCY (e);
591
592           if (freq_in != 0)
593             scale = GCOV_COMPUTE_SCALE (freq_in * iteration_bound,
594                                         loop->header->frequency);
595         }
596       if (!scale)
597         scale = 1;
598     }
599
600   if (scale == REG_BR_PROB_BASE)
601     return;
602
603   /* Scale the actual probabilities.  */
604   scale_loop_frequencies (loop, scale, REG_BR_PROB_BASE);
605   if (dump_file && (dump_flags & TDF_DETAILS))
606     fprintf (dump_file, ";; guessed iterations are now %i\n",
607              (int)expected_loop_iterations_unbounded (loop));
608 }
609
610 /* Recompute dominance information for basic blocks outside LOOP.  */
611
612 static void
613 update_dominators_in_loop (struct loop *loop)
614 {
615   vec<basic_block> dom_bbs = vNULL;
616   sbitmap seen;
617   basic_block *body;
618   unsigned i;
619
620   seen = sbitmap_alloc (last_basic_block);
621   bitmap_clear (seen);
622   body = get_loop_body (loop);
623
624   for (i = 0; i < loop->num_nodes; i++)
625     bitmap_set_bit (seen, body[i]->index);
626
627   for (i = 0; i < loop->num_nodes; i++)
628     {
629       basic_block ldom;
630
631       for (ldom = first_dom_son (CDI_DOMINATORS, body[i]);
632            ldom;
633            ldom = next_dom_son (CDI_DOMINATORS, ldom))
634         if (!bitmap_bit_p (seen, ldom->index))
635           {
636             bitmap_set_bit (seen, ldom->index);
637             dom_bbs.safe_push (ldom);
638           }
639     }
640
641   iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false);
642   free (body);
643   free (seen);
644   dom_bbs.release ();
645 }
646
647 /* Creates an if region as shown above. CONDITION is used to create
648    the test for the if.
649
650    |
651    |     -------------                 -------------
652    |     |  pred_bb  |                 |  pred_bb  |
653    |     -------------                 -------------
654    |           |                             |
655    |           |                             | ENTRY_EDGE
656    |           | ENTRY_EDGE                  V
657    |           |             ====>     -------------
658    |           |                       |  cond_bb  |
659    |           |                       | CONDITION |
660    |           |                       -------------
661    |           V                        /         \
662    |     -------------         e_false /           \ e_true
663    |     |  succ_bb  |                V             V
664    |     -------------         -----------       -----------
665    |                           | false_bb |      | true_bb |
666    |                           -----------       -----------
667    |                                   \           /
668    |                                    \         /
669    |                                     V       V
670    |                                   -------------
671    |                                   |  join_bb  |
672    |                                   -------------
673    |                                         | exit_edge (result)
674    |                                         V
675    |                                    -----------
676    |                                    | succ_bb |
677    |                                    -----------
678    |
679  */
680
681 edge
682 create_empty_if_region_on_edge (edge entry_edge, tree condition)
683 {
684
685   basic_block cond_bb, true_bb, false_bb, join_bb;
686   edge e_true, e_false, exit_edge;
687   gimple cond_stmt;
688   tree simple_cond;
689   gimple_stmt_iterator gsi;
690
691   cond_bb = split_edge (entry_edge);
692
693   /* Insert condition in cond_bb.  */
694   gsi = gsi_last_bb (cond_bb);
695   simple_cond =
696     force_gimple_operand_gsi (&gsi, condition, true, NULL,
697                               false, GSI_NEW_STMT);
698   cond_stmt = gimple_build_cond_from_tree (simple_cond, NULL_TREE, NULL_TREE);
699   gsi = gsi_last_bb (cond_bb);
700   gsi_insert_after (&gsi, cond_stmt, GSI_NEW_STMT);
701
702   join_bb = split_edge (single_succ_edge (cond_bb));
703
704   e_true = single_succ_edge (cond_bb);
705   true_bb = split_edge (e_true);
706
707   e_false = make_edge (cond_bb, join_bb, 0);
708   false_bb = split_edge (e_false);
709
710   e_true->flags &= ~EDGE_FALLTHRU;
711   e_true->flags |= EDGE_TRUE_VALUE;
712   e_false->flags &= ~EDGE_FALLTHRU;
713   e_false->flags |= EDGE_FALSE_VALUE;
714
715   set_immediate_dominator (CDI_DOMINATORS, cond_bb, entry_edge->src);
716   set_immediate_dominator (CDI_DOMINATORS, true_bb, cond_bb);
717   set_immediate_dominator (CDI_DOMINATORS, false_bb, cond_bb);
718   set_immediate_dominator (CDI_DOMINATORS, join_bb, cond_bb);
719
720   exit_edge = single_succ_edge (join_bb);
721
722   if (single_pred_p (exit_edge->dest))
723     set_immediate_dominator (CDI_DOMINATORS, exit_edge->dest, join_bb);
724
725   return exit_edge;
726 }
727
728 /* create_empty_loop_on_edge
729    |
730    |    - pred_bb -                   ------ pred_bb ------
731    |   |           |                 | iv0 = initial_value |
732    |    -----|-----                   ---------|-----------
733    |         |                       ______    | entry_edge
734    |         | entry_edge           /      |   |
735    |         |             ====>   |      -V---V- loop_header -------------
736    |         V                     |     | iv_before = phi (iv0, iv_after) |
737    |    - succ_bb -                |      ---|-----------------------------
738    |   |           |               |         |
739    |    -----------                |      ---V--- loop_body ---------------
740    |                               |     | iv_after = iv_before + stride   |
741    |                               |     | if (iv_before < upper_bound)    |
742    |                               |      ---|--------------\--------------
743    |                               |         |               \ exit_e
744    |                               |         V                \
745    |                               |       - loop_latch -      V- succ_bb -
746    |                               |      |              |     |           |
747    |                               |       /-------------       -----------
748    |                                \ ___ /
749
750    Creates an empty loop as shown above, the IV_BEFORE is the SSA_NAME
751    that is used before the increment of IV. IV_BEFORE should be used for
752    adding code to the body that uses the IV.  OUTER is the outer loop in
753    which the new loop should be inserted.
754
755    Both INITIAL_VALUE and UPPER_BOUND expressions are gimplified and
756    inserted on the loop entry edge.  This implies that this function
757    should be used only when the UPPER_BOUND expression is a loop
758    invariant.  */
759
760 struct loop *
761 create_empty_loop_on_edge (edge entry_edge,
762                            tree initial_value,
763                            tree stride, tree upper_bound,
764                            tree iv,
765                            tree *iv_before,
766                            tree *iv_after,
767                            struct loop *outer)
768 {
769   basic_block loop_header, loop_latch, succ_bb, pred_bb;
770   struct loop *loop;
771   gimple_stmt_iterator gsi;
772   gimple_seq stmts;
773   gimple cond_expr;
774   tree exit_test;
775   edge exit_e;
776   int prob;
777
778   gcc_assert (entry_edge && initial_value && stride && upper_bound && iv);
779
780   /* Create header, latch and wire up the loop.  */
781   pred_bb = entry_edge->src;
782   loop_header = split_edge (entry_edge);
783   loop_latch = split_edge (single_succ_edge (loop_header));
784   succ_bb = single_succ (loop_latch);
785   make_edge (loop_header, succ_bb, 0);
786   redirect_edge_succ_nodup (single_succ_edge (loop_latch), loop_header);
787
788   /* Set immediate dominator information.  */
789   set_immediate_dominator (CDI_DOMINATORS, loop_header, pred_bb);
790   set_immediate_dominator (CDI_DOMINATORS, loop_latch, loop_header);
791   set_immediate_dominator (CDI_DOMINATORS, succ_bb, loop_header);
792
793   /* Initialize a loop structure and put it in a loop hierarchy.  */
794   loop = alloc_loop ();
795   loop->header = loop_header;
796   loop->latch = loop_latch;
797   add_loop (loop, outer);
798
799   /* TODO: Fix frequencies and counts.  */
800   prob = REG_BR_PROB_BASE / 2;
801
802   scale_loop_frequencies (loop, REG_BR_PROB_BASE - prob, REG_BR_PROB_BASE);
803
804   /* Update dominators.  */
805   update_dominators_in_loop (loop);
806
807   /* Modify edge flags.  */
808   exit_e = single_exit (loop);
809   exit_e->flags = EDGE_LOOP_EXIT | EDGE_FALSE_VALUE;
810   single_pred_edge (loop_latch)->flags = EDGE_TRUE_VALUE;
811
812   /* Construct IV code in loop.  */
813   initial_value = force_gimple_operand (initial_value, &stmts, true, iv);
814   if (stmts)
815     {
816       gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
817       gsi_commit_edge_inserts ();
818     }
819
820   upper_bound = force_gimple_operand (upper_bound, &stmts, true, NULL);
821   if (stmts)
822     {
823       gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
824       gsi_commit_edge_inserts ();
825     }
826
827   gsi = gsi_last_bb (loop_header);
828   create_iv (initial_value, stride, iv, loop, &gsi, false,
829              iv_before, iv_after);
830
831   /* Insert loop exit condition.  */
832   cond_expr = gimple_build_cond
833     (LT_EXPR, *iv_before, upper_bound, NULL_TREE, NULL_TREE);
834
835   exit_test = gimple_cond_lhs (cond_expr);
836   exit_test = force_gimple_operand_gsi (&gsi, exit_test, true, NULL,
837                                         false, GSI_NEW_STMT);
838   gimple_cond_set_lhs (cond_expr, exit_test);
839   gsi = gsi_last_bb (exit_e->src);
840   gsi_insert_after (&gsi, cond_expr, GSI_NEW_STMT);
841
842   split_block_after_labels (loop_header);
843
844   return loop;
845 }
846
847 /* Make area between HEADER_EDGE and LATCH_EDGE a loop by connecting
848    latch to header and update loop tree and dominators
849    accordingly. Everything between them plus LATCH_EDGE destination must
850    be dominated by HEADER_EDGE destination, and back-reachable from
851    LATCH_EDGE source.  HEADER_EDGE is redirected to basic block SWITCH_BB,
852    FALSE_EDGE of SWITCH_BB to original destination of HEADER_EDGE and
853    TRUE_EDGE of SWITCH_BB to original destination of LATCH_EDGE.
854    Returns the newly created loop.  Frequencies and counts in the new loop
855    are scaled by FALSE_SCALE and in the old one by TRUE_SCALE.  */
856
857 struct loop *
858 loopify (edge latch_edge, edge header_edge,
859          basic_block switch_bb, edge true_edge, edge false_edge,
860          bool redirect_all_edges, unsigned true_scale, unsigned false_scale)
861 {
862   basic_block succ_bb = latch_edge->dest;
863   basic_block pred_bb = header_edge->src;
864   struct loop *loop = alloc_loop ();
865   struct loop *outer = loop_outer (succ_bb->loop_father);
866   int freq;
867   gcov_type cnt;
868   edge e;
869   edge_iterator ei;
870
871   loop->header = header_edge->dest;
872   loop->latch = latch_edge->src;
873
874   freq = EDGE_FREQUENCY (header_edge);
875   cnt = header_edge->count;
876
877   /* Redirect edges.  */
878   loop_redirect_edge (latch_edge, loop->header);
879   loop_redirect_edge (true_edge, succ_bb);
880
881   /* During loop versioning, one of the switch_bb edge is already properly
882      set. Do not redirect it again unless redirect_all_edges is true.  */
883   if (redirect_all_edges)
884     {
885       loop_redirect_edge (header_edge, switch_bb);
886       loop_redirect_edge (false_edge, loop->header);
887
888       /* Update dominators.  */
889       set_immediate_dominator (CDI_DOMINATORS, switch_bb, pred_bb);
890       set_immediate_dominator (CDI_DOMINATORS, loop->header, switch_bb);
891     }
892
893   set_immediate_dominator (CDI_DOMINATORS, succ_bb, switch_bb);
894
895   /* Compute new loop.  */
896   add_loop (loop, outer);
897
898   /* Add switch_bb to appropriate loop.  */
899   if (switch_bb->loop_father)
900     remove_bb_from_loops (switch_bb);
901   add_bb_to_loop (switch_bb, outer);
902
903   /* Fix frequencies.  */
904   if (redirect_all_edges)
905     {
906       switch_bb->frequency = freq;
907       switch_bb->count = cnt;
908       FOR_EACH_EDGE (e, ei, switch_bb->succs)
909         {
910           e->count = apply_probability (switch_bb->count, e->probability);
911         }
912     }
913   scale_loop_frequencies (loop, false_scale, REG_BR_PROB_BASE);
914   scale_loop_frequencies (succ_bb->loop_father, true_scale, REG_BR_PROB_BASE);
915   update_dominators_in_loop (loop);
916
917   return loop;
918 }
919
920 /* Remove the latch edge of a LOOP and update loops to indicate that
921    the LOOP was removed.  After this function, original loop latch will
922    have no successor, which caller is expected to fix somehow.
923
924    If this may cause the information about irreducible regions to become
925    invalid, IRRED_INVALIDATED is set to true.  
926
927    LOOP_CLOSED_SSA_INVALIDATED, if non-NULL, is a bitmap where we store
928    basic blocks that had non-trivial update on their loop_father.*/
929
930 void
931 unloop (struct loop *loop, bool *irred_invalidated,
932         bitmap loop_closed_ssa_invalidated)
933 {
934   basic_block *body;
935   struct loop *ploop;
936   unsigned i, n;
937   basic_block latch = loop->latch;
938   bool dummy = false;
939
940   if (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP)
941     *irred_invalidated = true;
942
943   /* This is relatively straightforward.  The dominators are unchanged, as
944      loop header dominates loop latch, so the only thing we have to care of
945      is the placement of loops and basic blocks inside the loop tree.  We
946      move them all to the loop->outer, and then let fix_bb_placements do
947      its work.  */
948
949   body = get_loop_body (loop);
950   n = loop->num_nodes;
951   for (i = 0; i < n; i++)
952     if (body[i]->loop_father == loop)
953       {
954         remove_bb_from_loops (body[i]);
955         add_bb_to_loop (body[i], loop_outer (loop));
956       }
957   free (body);
958
959   while (loop->inner)
960     {
961       ploop = loop->inner;
962       flow_loop_tree_node_remove (ploop);
963       flow_loop_tree_node_add (loop_outer (loop), ploop);
964     }
965
966   /* Remove the loop and free its data.  */
967   delete_loop (loop);
968
969   remove_edge (single_succ_edge (latch));
970
971   /* We do not pass IRRED_INVALIDATED to fix_bb_placements here, as even if
972      there is an irreducible region inside the cancelled loop, the flags will
973      be still correct.  */
974   fix_bb_placements (latch, &dummy, loop_closed_ssa_invalidated);
975 }
976
977 /* Fix placement of superloops of LOOP inside loop tree, i.e. ensure that
978    condition stated in description of fix_loop_placement holds for them.
979    It is used in case when we removed some edges coming out of LOOP, which
980    may cause the right placement of LOOP inside loop tree to change.
981
982    IRRED_INVALIDATED is set to true if a change in the loop structures might
983    invalidate the information about irreducible regions.  */
984
985 static void
986 fix_loop_placements (struct loop *loop, bool *irred_invalidated)
987 {
988   struct loop *outer;
989
990   while (loop_outer (loop))
991     {
992       outer = loop_outer (loop);
993       if (!fix_loop_placement (loop, irred_invalidated))
994         break;
995
996       /* Changing the placement of a loop in the loop tree may alter the
997          validity of condition 2) of the description of fix_bb_placement
998          for its preheader, because the successor is the header and belongs
999          to the loop.  So call fix_bb_placements to fix up the placement
1000          of the preheader and (possibly) of its predecessors.  */
1001       fix_bb_placements (loop_preheader_edge (loop)->src,
1002                          irred_invalidated, NULL);
1003       loop = outer;
1004     }
1005 }
1006
1007 /* Duplicate loop bounds and other information we store about
1008    the loop into its duplicate.  */
1009
1010 void
1011 copy_loop_info (struct loop *loop, struct loop *target)
1012 {
1013   gcc_checking_assert (!target->any_upper_bound && !target->any_estimate);
1014   target->any_upper_bound = loop->any_upper_bound;
1015   target->nb_iterations_upper_bound = loop->nb_iterations_upper_bound;
1016   target->any_estimate = loop->any_estimate;
1017   target->nb_iterations_estimate = loop->nb_iterations_estimate;
1018   target->estimate_state = loop->estimate_state;
1019 }
1020
1021 /* Copies copy of LOOP as subloop of TARGET loop, placing newly
1022    created loop into loops structure.  */
1023 struct loop *
1024 duplicate_loop (struct loop *loop, struct loop *target)
1025 {
1026   struct loop *cloop;
1027   cloop = alloc_loop ();
1028   place_new_loop (cfun, cloop);
1029  
1030   copy_loop_info (loop, cloop);
1031
1032   /* Mark the new loop as copy of LOOP.  */
1033   set_loop_copy (loop, cloop);
1034
1035   /* Add it to target.  */
1036   flow_loop_tree_node_add (target, cloop);
1037
1038   return cloop;
1039 }
1040
1041 /* Copies structure of subloops of LOOP into TARGET loop, placing
1042    newly created loops into loop tree.  */
1043 void
1044 duplicate_subloops (struct loop *loop, struct loop *target)
1045 {
1046   struct loop *aloop, *cloop;
1047
1048   for (aloop = loop->inner; aloop; aloop = aloop->next)
1049     {
1050       cloop = duplicate_loop (aloop, target);
1051       duplicate_subloops (aloop, cloop);
1052     }
1053 }
1054
1055 /* Copies structure of subloops of N loops, stored in array COPIED_LOOPS,
1056    into TARGET loop, placing newly created loops into loop tree.  */
1057 static void
1058 copy_loops_to (struct loop **copied_loops, int n, struct loop *target)
1059 {
1060   struct loop *aloop;
1061   int i;
1062
1063   for (i = 0; i < n; i++)
1064     {
1065       aloop = duplicate_loop (copied_loops[i], target);
1066       duplicate_subloops (copied_loops[i], aloop);
1067     }
1068 }
1069
1070 /* Redirects edge E to basic block DEST.  */
1071 static void
1072 loop_redirect_edge (edge e, basic_block dest)
1073 {
1074   if (e->dest == dest)
1075     return;
1076
1077   redirect_edge_and_branch_force (e, dest);
1078 }
1079
1080 /* Check whether LOOP's body can be duplicated.  */
1081 bool
1082 can_duplicate_loop_p (const struct loop *loop)
1083 {
1084   int ret;
1085   basic_block *bbs = get_loop_body (loop);
1086
1087   ret = can_copy_bbs_p (bbs, loop->num_nodes);
1088   free (bbs);
1089
1090   return ret;
1091 }
1092
1093 /* Sets probability and count of edge E to zero.  The probability and count
1094    is redistributed evenly to the remaining edges coming from E->src.  */
1095
1096 static void
1097 set_zero_probability (edge e)
1098 {
1099   basic_block bb = e->src;
1100   edge_iterator ei;
1101   edge ae, last = NULL;
1102   unsigned n = EDGE_COUNT (bb->succs);
1103   gcov_type cnt = e->count, cnt1;
1104   unsigned prob = e->probability, prob1;
1105
1106   gcc_assert (n > 1);
1107   cnt1 = cnt / (n - 1);
1108   prob1 = prob / (n - 1);
1109
1110   FOR_EACH_EDGE (ae, ei, bb->succs)
1111     {
1112       if (ae == e)
1113         continue;
1114
1115       ae->probability += prob1;
1116       ae->count += cnt1;
1117       last = ae;
1118     }
1119
1120   /* Move the rest to one of the edges.  */
1121   last->probability += prob % (n - 1);
1122   last->count += cnt % (n - 1);
1123
1124   e->probability = 0;
1125   e->count = 0;
1126 }
1127
1128 /* Duplicates body of LOOP to given edge E NDUPL times.  Takes care of updating
1129    loop structure and dominators.  E's destination must be LOOP header for
1130    this to work, i.e. it must be entry or latch edge of this loop; these are
1131    unique, as the loops must have preheaders for this function to work
1132    correctly (in case E is latch, the function unrolls the loop, if E is entry
1133    edge, it peels the loop).  Store edges created by copying ORIG edge from
1134    copies corresponding to set bits in WONT_EXIT bitmap (bit 0 corresponds to
1135    original LOOP body, the other copies are numbered in order given by control
1136    flow through them) into TO_REMOVE array.  Returns false if duplication is
1137    impossible.  */
1138
1139 bool
1140 duplicate_loop_to_header_edge (struct loop *loop, edge e,
1141                                unsigned int ndupl, sbitmap wont_exit,
1142                                edge orig, vec<edge> *to_remove,
1143                                int flags)
1144 {
1145   struct loop *target, *aloop;
1146   struct loop **orig_loops;
1147   unsigned n_orig_loops;
1148   basic_block header = loop->header, latch = loop->latch;
1149   basic_block *new_bbs, *bbs, *first_active;
1150   basic_block new_bb, bb, first_active_latch = NULL;
1151   edge ae, latch_edge;
1152   edge spec_edges[2], new_spec_edges[2];
1153 #define SE_LATCH 0
1154 #define SE_ORIG 1
1155   unsigned i, j, n;
1156   int is_latch = (latch == e->src);
1157   int scale_act = 0, *scale_step = NULL, scale_main = 0;
1158   int scale_after_exit = 0;
1159   int p, freq_in, freq_le, freq_out_orig;
1160   int prob_pass_thru, prob_pass_wont_exit, prob_pass_main;
1161   int add_irreducible_flag;
1162   basic_block place_after;
1163   bitmap bbs_to_scale = NULL;
1164   bitmap_iterator bi;
1165
1166   gcc_assert (e->dest == loop->header);
1167   gcc_assert (ndupl > 0);
1168
1169   if (orig)
1170     {
1171       /* Orig must be edge out of the loop.  */
1172       gcc_assert (flow_bb_inside_loop_p (loop, orig->src));
1173       gcc_assert (!flow_bb_inside_loop_p (loop, orig->dest));
1174     }
1175
1176   n = loop->num_nodes;
1177   bbs = get_loop_body_in_dom_order (loop);
1178   gcc_assert (bbs[0] == loop->header);
1179   gcc_assert (bbs[n  - 1] == loop->latch);
1180
1181   /* Check whether duplication is possible.  */
1182   if (!can_copy_bbs_p (bbs, loop->num_nodes))
1183     {
1184       free (bbs);
1185       return false;
1186     }
1187   new_bbs = XNEWVEC (basic_block, loop->num_nodes);
1188
1189   /* In case we are doing loop peeling and the loop is in the middle of
1190      irreducible region, the peeled copies will be inside it too.  */
1191   add_irreducible_flag = e->flags & EDGE_IRREDUCIBLE_LOOP;
1192   gcc_assert (!is_latch || !add_irreducible_flag);
1193
1194   /* Find edge from latch.  */
1195   latch_edge = loop_latch_edge (loop);
1196
1197   if (flags & DLTHE_FLAG_UPDATE_FREQ)
1198     {
1199       /* Calculate coefficients by that we have to scale frequencies
1200          of duplicated loop bodies.  */
1201       freq_in = header->frequency;
1202       freq_le = EDGE_FREQUENCY (latch_edge);
1203       if (freq_in == 0)
1204         freq_in = 1;
1205       if (freq_in < freq_le)
1206         freq_in = freq_le;
1207       freq_out_orig = orig ? EDGE_FREQUENCY (orig) : freq_in - freq_le;
1208       if (freq_out_orig > freq_in - freq_le)
1209         freq_out_orig = freq_in - freq_le;
1210       prob_pass_thru = RDIV (REG_BR_PROB_BASE * freq_le, freq_in);
1211       prob_pass_wont_exit =
1212               RDIV (REG_BR_PROB_BASE * (freq_le + freq_out_orig), freq_in);
1213
1214       if (orig
1215           && REG_BR_PROB_BASE - orig->probability != 0)
1216         {
1217           /* The blocks that are dominated by a removed exit edge ORIG have
1218              frequencies scaled by this.  */
1219           scale_after_exit
1220               = GCOV_COMPUTE_SCALE (REG_BR_PROB_BASE,
1221                                     REG_BR_PROB_BASE - orig->probability);
1222           bbs_to_scale = BITMAP_ALLOC (NULL);
1223           for (i = 0; i < n; i++)
1224             {
1225               if (bbs[i] != orig->src
1226                   && dominated_by_p (CDI_DOMINATORS, bbs[i], orig->src))
1227                 bitmap_set_bit (bbs_to_scale, i);
1228             }
1229         }
1230
1231       scale_step = XNEWVEC (int, ndupl);
1232
1233       for (i = 1; i <= ndupl; i++)
1234         scale_step[i - 1] = bitmap_bit_p (wont_exit, i)
1235                                 ? prob_pass_wont_exit
1236                                 : prob_pass_thru;
1237
1238       /* Complete peeling is special as the probability of exit in last
1239          copy becomes 1.  */
1240       if (flags & DLTHE_FLAG_COMPLETTE_PEEL)
1241         {
1242           int wanted_freq = EDGE_FREQUENCY (e);
1243
1244           if (wanted_freq > freq_in)
1245             wanted_freq = freq_in;
1246
1247           gcc_assert (!is_latch);
1248           /* First copy has frequency of incoming edge.  Each subsequent
1249              frequency should be reduced by prob_pass_wont_exit.  Caller
1250              should've managed the flags so all except for original loop
1251              has won't exist set.  */
1252           scale_act = GCOV_COMPUTE_SCALE (wanted_freq, freq_in);
1253           /* Now simulate the duplication adjustments and compute header
1254              frequency of the last copy.  */
1255           for (i = 0; i < ndupl; i++)
1256             wanted_freq = combine_probabilities (wanted_freq, scale_step[i]);
1257           scale_main = GCOV_COMPUTE_SCALE (wanted_freq, freq_in);
1258         }
1259       else if (is_latch)
1260         {
1261           prob_pass_main = bitmap_bit_p (wont_exit, 0)
1262                                 ? prob_pass_wont_exit
1263                                 : prob_pass_thru;
1264           p = prob_pass_main;
1265           scale_main = REG_BR_PROB_BASE;
1266           for (i = 0; i < ndupl; i++)
1267             {
1268               scale_main += p;
1269               p = combine_probabilities (p, scale_step[i]);
1270             }
1271           scale_main = GCOV_COMPUTE_SCALE (REG_BR_PROB_BASE, scale_main);
1272           scale_act = combine_probabilities (scale_main, prob_pass_main);
1273         }
1274       else
1275         {
1276           scale_main = REG_BR_PROB_BASE;
1277           for (i = 0; i < ndupl; i++)
1278             scale_main = combine_probabilities (scale_main, scale_step[i]);
1279           scale_act = REG_BR_PROB_BASE - prob_pass_thru;
1280         }
1281       for (i = 0; i < ndupl; i++)
1282         gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE);
1283       gcc_assert (scale_main >= 0 && scale_main <= REG_BR_PROB_BASE
1284                   && scale_act >= 0  && scale_act <= REG_BR_PROB_BASE);
1285     }
1286
1287   /* Loop the new bbs will belong to.  */
1288   target = e->src->loop_father;
1289
1290   /* Original loops.  */
1291   n_orig_loops = 0;
1292   for (aloop = loop->inner; aloop; aloop = aloop->next)
1293     n_orig_loops++;
1294   orig_loops = XNEWVEC (struct loop *, n_orig_loops);
1295   for (aloop = loop->inner, i = 0; aloop; aloop = aloop->next, i++)
1296     orig_loops[i] = aloop;
1297
1298   set_loop_copy (loop, target);
1299
1300   first_active = XNEWVEC (basic_block, n);
1301   if (is_latch)
1302     {
1303       memcpy (first_active, bbs, n * sizeof (basic_block));
1304       first_active_latch = latch;
1305     }
1306
1307   spec_edges[SE_ORIG] = orig;
1308   spec_edges[SE_LATCH] = latch_edge;
1309
1310   place_after = e->src;
1311   for (j = 0; j < ndupl; j++)
1312     {
1313       /* Copy loops.  */
1314       copy_loops_to (orig_loops, n_orig_loops, target);
1315
1316       /* Copy bbs.  */
1317       copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop,
1318                 place_after, true);
1319       place_after = new_spec_edges[SE_LATCH]->src;
1320
1321       if (flags & DLTHE_RECORD_COPY_NUMBER)
1322         for (i = 0; i < n; i++)
1323           {
1324             gcc_assert (!new_bbs[i]->aux);
1325             new_bbs[i]->aux = (void *)(size_t)(j + 1);
1326           }
1327
1328       /* Note whether the blocks and edges belong to an irreducible loop.  */
1329       if (add_irreducible_flag)
1330         {
1331           for (i = 0; i < n; i++)
1332             new_bbs[i]->flags |= BB_DUPLICATED;
1333           for (i = 0; i < n; i++)
1334             {
1335               edge_iterator ei;
1336               new_bb = new_bbs[i];
1337               if (new_bb->loop_father == target)
1338                 new_bb->flags |= BB_IRREDUCIBLE_LOOP;
1339
1340               FOR_EACH_EDGE (ae, ei, new_bb->succs)
1341                 if ((ae->dest->flags & BB_DUPLICATED)
1342                     && (ae->src->loop_father == target
1343                         || ae->dest->loop_father == target))
1344                   ae->flags |= EDGE_IRREDUCIBLE_LOOP;
1345             }
1346           for (i = 0; i < n; i++)
1347             new_bbs[i]->flags &= ~BB_DUPLICATED;
1348         }
1349
1350       /* Redirect the special edges.  */
1351       if (is_latch)
1352         {
1353           redirect_edge_and_branch_force (latch_edge, new_bbs[0]);
1354           redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
1355                                           loop->header);
1356           set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], latch);
1357           latch = loop->latch = new_bbs[n - 1];
1358           e = latch_edge = new_spec_edges[SE_LATCH];
1359         }
1360       else
1361         {
1362           redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
1363                                           loop->header);
1364           redirect_edge_and_branch_force (e, new_bbs[0]);
1365           set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], e->src);
1366           e = new_spec_edges[SE_LATCH];
1367         }
1368
1369       /* Record exit edge in this copy.  */
1370       if (orig && bitmap_bit_p (wont_exit, j + 1))
1371         {
1372           if (to_remove)
1373             to_remove->safe_push (new_spec_edges[SE_ORIG]);
1374           set_zero_probability (new_spec_edges[SE_ORIG]);
1375
1376           /* Scale the frequencies of the blocks dominated by the exit.  */
1377           if (bbs_to_scale)
1378             {
1379               EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1380                 {
1381                   scale_bbs_frequencies_int (new_bbs + i, 1, scale_after_exit,
1382                                              REG_BR_PROB_BASE);
1383                 }
1384             }
1385         }
1386
1387       /* Record the first copy in the control flow order if it is not
1388          the original loop (i.e. in case of peeling).  */
1389       if (!first_active_latch)
1390         {
1391           memcpy (first_active, new_bbs, n * sizeof (basic_block));
1392           first_active_latch = new_bbs[n - 1];
1393         }
1394
1395       /* Set counts and frequencies.  */
1396       if (flags & DLTHE_FLAG_UPDATE_FREQ)
1397         {
1398           scale_bbs_frequencies_int (new_bbs, n, scale_act, REG_BR_PROB_BASE);
1399           scale_act = combine_probabilities (scale_act, scale_step[j]);
1400         }
1401     }
1402   free (new_bbs);
1403   free (orig_loops);
1404
1405   /* Record the exit edge in the original loop body, and update the frequencies.  */
1406   if (orig && bitmap_bit_p (wont_exit, 0))
1407     {
1408       if (to_remove)
1409         to_remove->safe_push (orig);
1410       set_zero_probability (orig);
1411
1412       /* Scale the frequencies of the blocks dominated by the exit.  */
1413       if (bbs_to_scale)
1414         {
1415           EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1416             {
1417               scale_bbs_frequencies_int (bbs + i, 1, scale_after_exit,
1418                                          REG_BR_PROB_BASE);
1419             }
1420         }
1421     }
1422
1423   /* Update the original loop.  */
1424   if (!is_latch)
1425     set_immediate_dominator (CDI_DOMINATORS, e->dest, e->src);
1426   if (flags & DLTHE_FLAG_UPDATE_FREQ)
1427     {
1428       scale_bbs_frequencies_int (bbs, n, scale_main, REG_BR_PROB_BASE);
1429       free (scale_step);
1430     }
1431
1432   /* Update dominators of outer blocks if affected.  */
1433   for (i = 0; i < n; i++)
1434     {
1435       basic_block dominated, dom_bb;
1436       vec<basic_block> dom_bbs;
1437       unsigned j;
1438
1439       bb = bbs[i];
1440       bb->aux = 0;
1441
1442       dom_bbs = get_dominated_by (CDI_DOMINATORS, bb);
1443       FOR_EACH_VEC_ELT (dom_bbs, j, dominated)
1444         {
1445           if (flow_bb_inside_loop_p (loop, dominated))
1446             continue;
1447           dom_bb = nearest_common_dominator (
1448                         CDI_DOMINATORS, first_active[i], first_active_latch);
1449           set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb);
1450         }
1451       dom_bbs.release ();
1452     }
1453   free (first_active);
1454
1455   free (bbs);
1456   BITMAP_FREE (bbs_to_scale);
1457
1458   return true;
1459 }
1460
1461 /* A callback for make_forwarder block, to redirect all edges except for
1462    MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide
1463    whether to redirect it.  */
1464
1465 edge mfb_kj_edge;
1466 bool
1467 mfb_keep_just (edge e)
1468 {
1469   return e != mfb_kj_edge;
1470 }
1471
1472 /* True when a candidate preheader BLOCK has predecessors from LOOP.  */
1473
1474 static bool
1475 has_preds_from_loop (basic_block block, struct loop *loop)
1476 {
1477   edge e;
1478   edge_iterator ei;
1479
1480   FOR_EACH_EDGE (e, ei, block->preds)
1481     if (e->src->loop_father == loop)
1482       return true;
1483   return false;
1484 }
1485
1486 /* Creates a pre-header for a LOOP.  Returns newly created block.  Unless
1487    CP_SIMPLE_PREHEADERS is set in FLAGS, we only force LOOP to have single
1488    entry; otherwise we also force preheader block to have only one successor.
1489    When CP_FALLTHRU_PREHEADERS is set in FLAGS, we force the preheader block
1490    to be a fallthru predecessor to the loop header and to have only
1491    predecessors from outside of the loop.
1492    The function also updates dominators.  */
1493
1494 basic_block
1495 create_preheader (struct loop *loop, int flags)
1496 {
1497   edge e, fallthru;
1498   basic_block dummy;
1499   int nentry = 0;
1500   bool irred = false;
1501   bool latch_edge_was_fallthru;
1502   edge one_succ_pred = NULL, single_entry = NULL;
1503   edge_iterator ei;
1504
1505   FOR_EACH_EDGE (e, ei, loop->header->preds)
1506     {
1507       if (e->src == loop->latch)
1508         continue;
1509       irred |= (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
1510       nentry++;
1511       single_entry = e;
1512       if (single_succ_p (e->src))
1513         one_succ_pred = e;
1514     }
1515   gcc_assert (nentry);
1516   if (nentry == 1)
1517     {
1518       bool need_forwarder_block = false;
1519
1520       /* We do not allow entry block to be the loop preheader, since we
1521              cannot emit code there.  */
1522       if (single_entry->src == ENTRY_BLOCK_PTR)
1523         need_forwarder_block = true;
1524       else
1525         {
1526           /* If we want simple preheaders, also force the preheader to have
1527              just a single successor.  */
1528           if ((flags & CP_SIMPLE_PREHEADERS)
1529               && !single_succ_p (single_entry->src))
1530             need_forwarder_block = true;
1531           /* If we want fallthru preheaders, also create forwarder block when
1532              preheader ends with a jump or has predecessors from loop.  */
1533           else if ((flags & CP_FALLTHRU_PREHEADERS)
1534                    && (JUMP_P (BB_END (single_entry->src))
1535                        || has_preds_from_loop (single_entry->src, loop)))
1536             need_forwarder_block = true;
1537         }
1538       if (! need_forwarder_block)
1539         return NULL;
1540     }
1541
1542   mfb_kj_edge = loop_latch_edge (loop);
1543   latch_edge_was_fallthru = (mfb_kj_edge->flags & EDGE_FALLTHRU) != 0;
1544   fallthru = make_forwarder_block (loop->header, mfb_keep_just, NULL);
1545   dummy = fallthru->src;
1546   loop->header = fallthru->dest;
1547
1548   /* Try to be clever in placing the newly created preheader.  The idea is to
1549      avoid breaking any "fallthruness" relationship between blocks.
1550
1551      The preheader was created just before the header and all incoming edges
1552      to the header were redirected to the preheader, except the latch edge.
1553      So the only problematic case is when this latch edge was a fallthru
1554      edge: it is not anymore after the preheader creation so we have broken
1555      the fallthruness.  We're therefore going to look for a better place.  */
1556   if (latch_edge_was_fallthru)
1557     {
1558       if (one_succ_pred)
1559         e = one_succ_pred;
1560       else
1561         e = EDGE_PRED (dummy, 0);
1562
1563       move_block_after (dummy, e->src);
1564     }
1565
1566   if (irred)
1567     {
1568       dummy->flags |= BB_IRREDUCIBLE_LOOP;
1569       single_succ_edge (dummy)->flags |= EDGE_IRREDUCIBLE_LOOP;
1570     }
1571
1572   if (dump_file)
1573     fprintf (dump_file, "Created preheader block for loop %i\n",
1574              loop->num);
1575
1576   if (flags & CP_FALLTHRU_PREHEADERS)
1577     gcc_assert ((single_succ_edge (dummy)->flags & EDGE_FALLTHRU)
1578                 && !JUMP_P (BB_END (dummy)));
1579
1580   return dummy;
1581 }
1582
1583 /* Create preheaders for each loop; for meaning of FLAGS see create_preheader.  */
1584
1585 void
1586 create_preheaders (int flags)
1587 {
1588   loop_iterator li;
1589   struct loop *loop;
1590
1591   if (!current_loops)
1592     return;
1593
1594   FOR_EACH_LOOP (li, loop, 0)
1595     create_preheader (loop, flags);
1596   loops_state_set (LOOPS_HAVE_PREHEADERS);
1597 }
1598
1599 /* Forces all loop latches to have only single successor.  */
1600
1601 void
1602 force_single_succ_latches (void)
1603 {
1604   loop_iterator li;
1605   struct loop *loop;
1606   edge e;
1607
1608   FOR_EACH_LOOP (li, loop, 0)
1609     {
1610       if (loop->latch != loop->header && single_succ_p (loop->latch))
1611         continue;
1612
1613       e = find_edge (loop->latch, loop->header);
1614       gcc_checking_assert (e != NULL);
1615
1616       split_edge (e);
1617     }
1618   loops_state_set (LOOPS_HAVE_SIMPLE_LATCHES);
1619 }
1620
1621 /* This function is called from loop_version.  It splits the entry edge
1622    of the loop we want to version, adds the versioning condition, and
1623    adjust the edges to the two versions of the loop appropriately.
1624    e is an incoming edge. Returns the basic block containing the
1625    condition.
1626
1627    --- edge e ---- > [second_head]
1628
1629    Split it and insert new conditional expression and adjust edges.
1630
1631     --- edge e ---> [cond expr] ---> [first_head]
1632                         |
1633                         +---------> [second_head]
1634
1635   THEN_PROB is the probability of then branch of the condition.  */
1636
1637 static basic_block
1638 lv_adjust_loop_entry_edge (basic_block first_head, basic_block second_head,
1639                            edge e, void *cond_expr, unsigned then_prob)
1640 {
1641   basic_block new_head = NULL;
1642   edge e1;
1643
1644   gcc_assert (e->dest == second_head);
1645
1646   /* Split edge 'e'. This will create a new basic block, where we can
1647      insert conditional expr.  */
1648   new_head = split_edge (e);
1649
1650   lv_add_condition_to_bb (first_head, second_head, new_head,
1651                           cond_expr);
1652
1653   /* Don't set EDGE_TRUE_VALUE in RTL mode, as it's invalid there.  */
1654   e = single_succ_edge (new_head);
1655   e1 = make_edge (new_head, first_head,
1656                   current_ir_type () == IR_GIMPLE ? EDGE_TRUE_VALUE : 0);
1657   e1->probability = then_prob;
1658   e->probability = REG_BR_PROB_BASE - then_prob;
1659   e1->count = apply_probability (e->count, e1->probability);
1660   e->count = apply_probability (e->count, e->probability);
1661
1662   set_immediate_dominator (CDI_DOMINATORS, first_head, new_head);
1663   set_immediate_dominator (CDI_DOMINATORS, second_head, new_head);
1664
1665   /* Adjust loop header phi nodes.  */
1666   lv_adjust_loop_header_phi (first_head, second_head, new_head, e1);
1667
1668   return new_head;
1669 }
1670
1671 /* Main entry point for Loop Versioning transformation.
1672
1673    This transformation given a condition and a loop, creates
1674    -if (condition) { loop_copy1 } else { loop_copy2 },
1675    where loop_copy1 is the loop transformed in one way, and loop_copy2
1676    is the loop transformed in another way (or unchanged). 'condition'
1677    may be a run time test for things that were not resolved by static
1678    analysis (overlapping ranges (anti-aliasing), alignment, etc.).
1679
1680    THEN_PROB is the probability of the then edge of the if.  THEN_SCALE
1681    is the ratio by that the frequencies in the original loop should
1682    be scaled.  ELSE_SCALE is the ratio by that the frequencies in the
1683    new loop should be scaled.
1684
1685    If PLACE_AFTER is true, we place the new loop after LOOP in the
1686    instruction stream, otherwise it is placed before LOOP.  */
1687
1688 struct loop *
1689 loop_version (struct loop *loop,
1690               void *cond_expr, basic_block *condition_bb,
1691               unsigned then_prob, unsigned then_scale, unsigned else_scale,
1692               bool place_after)
1693 {
1694   basic_block first_head, second_head;
1695   edge entry, latch_edge, true_edge, false_edge;
1696   int irred_flag;
1697   struct loop *nloop;
1698   basic_block cond_bb;
1699
1700   /* Record entry and latch edges for the loop */
1701   entry = loop_preheader_edge (loop);
1702   irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;
1703   entry->flags &= ~EDGE_IRREDUCIBLE_LOOP;
1704
1705   /* Note down head of loop as first_head.  */
1706   first_head = entry->dest;
1707
1708   /* Duplicate loop.  */
1709   if (!cfg_hook_duplicate_loop_to_header_edge (loop, entry, 1,
1710                                                NULL, NULL, NULL, 0))
1711     {
1712       entry->flags |= irred_flag;
1713       return NULL;
1714     }
1715
1716   /* After duplication entry edge now points to new loop head block.
1717      Note down new head as second_head.  */
1718   second_head = entry->dest;
1719
1720   /* Split loop entry edge and insert new block with cond expr.  */
1721   cond_bb =  lv_adjust_loop_entry_edge (first_head, second_head,
1722                                         entry, cond_expr, then_prob);
1723   if (condition_bb)
1724     *condition_bb = cond_bb;
1725
1726   if (!cond_bb)
1727     {
1728       entry->flags |= irred_flag;
1729       return NULL;
1730     }
1731
1732   latch_edge = single_succ_edge (get_bb_copy (loop->latch));
1733
1734   extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1735   nloop = loopify (latch_edge,
1736                    single_pred_edge (get_bb_copy (loop->header)),
1737                    cond_bb, true_edge, false_edge,
1738                    false /* Do not redirect all edges.  */,
1739                    then_scale, else_scale);
1740
1741   copy_loop_info (loop, nloop);
1742
1743   /* loopify redirected latch_edge. Update its PENDING_STMTS.  */
1744   lv_flush_pending_stmts (latch_edge);
1745
1746   /* loopify redirected condition_bb's succ edge. Update its PENDING_STMTS.  */
1747   extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1748   lv_flush_pending_stmts (false_edge);
1749   /* Adjust irreducible flag.  */
1750   if (irred_flag)
1751     {
1752       cond_bb->flags |= BB_IRREDUCIBLE_LOOP;
1753       loop_preheader_edge (loop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1754       loop_preheader_edge (nloop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1755       single_pred_edge (cond_bb)->flags |= EDGE_IRREDUCIBLE_LOOP;
1756     }
1757
1758   if (place_after)
1759     {
1760       basic_block *bbs = get_loop_body_in_dom_order (nloop), after;
1761       unsigned i;
1762
1763       after = loop->latch;
1764
1765       for (i = 0; i < nloop->num_nodes; i++)
1766         {
1767           move_block_after (bbs[i], after);
1768           after = bbs[i];
1769         }
1770       free (bbs);
1771     }
1772
1773   /* At this point condition_bb is loop preheader with two successors,
1774      first_head and second_head.   Make sure that loop preheader has only
1775      one successor.  */
1776   split_edge (loop_preheader_edge (loop));
1777   split_edge (loop_preheader_edge (nloop));
1778
1779   return nloop;
1780 }