OSDN Git Service

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