OSDN Git Service

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