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