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