OSDN Git Service

2009-11-28 Kai Tietz <kai.tietz@onevision.com>
[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 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   cond_bb = split_edge (entry_edge);
551
552   /* Insert condition in cond_bb.  */
553   gsi = gsi_last_bb (cond_bb);
554   simple_cond =
555     force_gimple_operand_gsi (&gsi, condition, true, NULL,
556                               false, GSI_NEW_STMT);
557   cond_stmt = gimple_build_cond_from_tree (simple_cond, NULL_TREE, NULL_TREE);
558   gsi = gsi_last_bb (cond_bb);
559   gsi_insert_after (&gsi, cond_stmt, GSI_NEW_STMT);
560
561   join_bb = split_edge (single_succ_edge (cond_bb));
562
563   e_true = single_succ_edge (cond_bb);
564   true_bb = split_edge (e_true);
565
566   e_false = make_edge (cond_bb, join_bb, 0);
567   false_bb = split_edge (e_false);
568
569   e_true->flags &= ~EDGE_FALLTHRU;
570   e_true->flags |= EDGE_TRUE_VALUE;
571   e_false->flags &= ~EDGE_FALLTHRU;
572   e_false->flags |= EDGE_FALSE_VALUE;
573
574   set_immediate_dominator (CDI_DOMINATORS, cond_bb, entry_edge->src);
575   set_immediate_dominator (CDI_DOMINATORS, true_bb, cond_bb);
576   set_immediate_dominator (CDI_DOMINATORS, false_bb, cond_bb);
577   set_immediate_dominator (CDI_DOMINATORS, join_bb, cond_bb);
578
579   exit_edge = single_succ_edge (join_bb);
580
581   if (single_pred_p (exit_edge->dest))
582     set_immediate_dominator (CDI_DOMINATORS, exit_edge->dest, join_bb);
583
584   return exit_edge;
585 }
586
587 /* create_empty_loop_on_edge
588    |
589    |    - pred_bb -                   ------ pred_bb ------
590    |   |           |                 | iv0 = initial_value |
591    |    -----|-----                   ---------|-----------
592    |         |                       ______    | entry_edge
593    |         | entry_edge           /      |   |
594    |         |             ====>   |      -V---V- loop_header -------------
595    |         V                     |     | iv_before = phi (iv0, iv_after) |
596    |    - succ_bb -                |      ---|-----------------------------
597    |   |           |               |         |
598    |    -----------                |      ---V--- loop_body ---------------
599    |                               |     | iv_after = iv_before + stride   |
600    |                               |     | if (iv_before < upper_bound)    |
601    |                               |      ---|--------------\--------------
602    |                               |         |               \ exit_e
603    |                               |         V                \
604    |                               |       - loop_latch -      V- succ_bb -
605    |                               |      |              |     |           |
606    |                               |       /-------------       -----------
607    |                                \ ___ /
608
609    Creates an empty loop as shown above, the IV_BEFORE is the SSA_NAME
610    that is used before the increment of IV. IV_BEFORE should be used for
611    adding code to the body that uses the IV.  OUTER is the outer loop in
612    which the new loop should be inserted.
613
614    Both INITIAL_VALUE and UPPER_BOUND expressions are gimplified and
615    inserted on the loop entry edge.  This implies that this function
616    should be used only when the UPPER_BOUND expression is a loop
617    invariant.  */
618
619 struct loop *
620 create_empty_loop_on_edge (edge entry_edge,
621                            tree initial_value,
622                            tree stride, tree upper_bound,
623                            tree iv,
624                            tree *iv_before,
625                            tree *iv_after,
626                            struct loop *outer)
627 {
628   basic_block loop_header, loop_latch, succ_bb, pred_bb;
629   struct loop *loop;
630   gimple_stmt_iterator gsi;
631   gimple_seq stmts;
632   gimple cond_expr;
633   tree exit_test;
634   edge exit_e;
635   int prob;
636
637   gcc_assert (entry_edge && initial_value && stride && upper_bound && iv);
638
639   /* Create header, latch and wire up the loop.  */
640   pred_bb = entry_edge->src;
641   loop_header = split_edge (entry_edge);
642   loop_latch = split_edge (single_succ_edge (loop_header));
643   succ_bb = single_succ (loop_latch);
644   make_edge (loop_header, succ_bb, 0);
645   redirect_edge_succ_nodup (single_succ_edge (loop_latch), loop_header);
646
647   /* Set immediate dominator information.  */
648   set_immediate_dominator (CDI_DOMINATORS, loop_header, pred_bb);
649   set_immediate_dominator (CDI_DOMINATORS, loop_latch, loop_header);
650   set_immediate_dominator (CDI_DOMINATORS, succ_bb, loop_header);
651
652   /* Initialize a loop structure and put it in a loop hierarchy.  */
653   loop = alloc_loop ();
654   loop->header = loop_header;
655   loop->latch = loop_latch;
656   add_loop (loop, outer);
657
658   /* TODO: Fix frequencies and counts.  */
659   prob = REG_BR_PROB_BASE / 2;
660
661   scale_loop_frequencies (loop, REG_BR_PROB_BASE - prob, REG_BR_PROB_BASE);
662
663   /* Update dominators.  */
664   update_dominators_in_loop (loop);
665
666   /* Modify edge flags.  */
667   exit_e = single_exit (loop);
668   exit_e->flags = EDGE_LOOP_EXIT | EDGE_FALSE_VALUE;
669   single_pred_edge (loop_latch)->flags = EDGE_TRUE_VALUE;
670
671   /* Construct IV code in loop.  */
672   initial_value = force_gimple_operand (initial_value, &stmts, true, iv);
673   if (stmts)
674     {
675       gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
676       gsi_commit_edge_inserts ();
677     }
678
679   upper_bound = force_gimple_operand (upper_bound, &stmts, true, NULL);
680   if (stmts)
681     {
682       gsi_insert_seq_on_edge (loop_preheader_edge (loop), stmts);
683       gsi_commit_edge_inserts ();
684     }
685
686   gsi = gsi_last_bb (loop_header);
687   create_iv (initial_value, stride, iv, loop, &gsi, false,
688              iv_before, iv_after);
689
690   /* Insert loop exit condition.  */
691   cond_expr = gimple_build_cond
692     (LT_EXPR, *iv_before, upper_bound, NULL_TREE, NULL_TREE);
693
694   exit_test = gimple_cond_lhs (cond_expr);
695   exit_test = force_gimple_operand_gsi (&gsi, exit_test, true, NULL,
696                                         false, GSI_NEW_STMT);
697   gimple_cond_set_lhs (cond_expr, exit_test);
698   gsi = gsi_last_bb (exit_e->src);
699   gsi_insert_after (&gsi, cond_expr, GSI_NEW_STMT);
700
701   split_block_after_labels (loop_header);
702
703   return loop;
704 }
705
706 /* Make area between HEADER_EDGE and LATCH_EDGE a loop by connecting
707    latch to header and update loop tree and dominators
708    accordingly. Everything between them plus LATCH_EDGE destination must
709    be dominated by HEADER_EDGE destination, and back-reachable from
710    LATCH_EDGE source.  HEADER_EDGE is redirected to basic block SWITCH_BB,
711    FALSE_EDGE of SWITCH_BB to original destination of HEADER_EDGE and
712    TRUE_EDGE of SWITCH_BB to original destination of LATCH_EDGE.
713    Returns the newly created loop.  Frequencies and counts in the new loop
714    are scaled by FALSE_SCALE and in the old one by TRUE_SCALE.  */
715
716 struct loop *
717 loopify (edge latch_edge, edge header_edge,
718          basic_block switch_bb, edge true_edge, edge false_edge,
719          bool redirect_all_edges, unsigned true_scale, unsigned false_scale)
720 {
721   basic_block succ_bb = latch_edge->dest;
722   basic_block pred_bb = header_edge->src;
723   struct loop *loop = alloc_loop ();
724   struct loop *outer = loop_outer (succ_bb->loop_father);
725   int freq;
726   gcov_type cnt;
727   edge e;
728   edge_iterator ei;
729
730   loop->header = header_edge->dest;
731   loop->latch = latch_edge->src;
732
733   freq = EDGE_FREQUENCY (header_edge);
734   cnt = header_edge->count;
735
736   /* Redirect edges.  */
737   loop_redirect_edge (latch_edge, loop->header);
738   loop_redirect_edge (true_edge, succ_bb);
739
740   /* During loop versioning, one of the switch_bb edge is already properly
741      set. Do not redirect it again unless redirect_all_edges is true.  */
742   if (redirect_all_edges)
743     {
744       loop_redirect_edge (header_edge, switch_bb);
745       loop_redirect_edge (false_edge, loop->header);
746
747       /* Update dominators.  */
748       set_immediate_dominator (CDI_DOMINATORS, switch_bb, pred_bb);
749       set_immediate_dominator (CDI_DOMINATORS, loop->header, switch_bb);
750     }
751
752   set_immediate_dominator (CDI_DOMINATORS, succ_bb, switch_bb);
753
754   /* Compute new loop.  */
755   add_loop (loop, outer);
756
757   /* Add switch_bb to appropriate loop.  */
758   if (switch_bb->loop_father)
759     remove_bb_from_loops (switch_bb);
760   add_bb_to_loop (switch_bb, outer);
761
762   /* Fix frequencies.  */
763   if (redirect_all_edges)
764     {
765       switch_bb->frequency = freq;
766       switch_bb->count = cnt;
767       FOR_EACH_EDGE (e, ei, switch_bb->succs)
768         {
769           e->count = (switch_bb->count * e->probability) / REG_BR_PROB_BASE;
770         }
771     }
772   scale_loop_frequencies (loop, false_scale, REG_BR_PROB_BASE);
773   scale_loop_frequencies (succ_bb->loop_father, true_scale, REG_BR_PROB_BASE);
774   update_dominators_in_loop (loop);
775
776   return loop;
777 }
778
779 /* Remove the latch edge of a LOOP and update loops to indicate that
780    the LOOP was removed.  After this function, original loop latch will
781    have no successor, which caller is expected to fix somehow.
782
783    If this may cause the information about irreducible regions to become
784    invalid, IRRED_INVALIDATED is set to true.  */
785
786 static void
787 unloop (struct loop *loop, bool *irred_invalidated)
788 {
789   basic_block *body;
790   struct loop *ploop;
791   unsigned i, n;
792   basic_block latch = loop->latch;
793   bool dummy = false;
794
795   if (loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP)
796     *irred_invalidated = true;
797
798   /* This is relatively straightforward.  The dominators are unchanged, as
799      loop header dominates loop latch, so the only thing we have to care of
800      is the placement of loops and basic blocks inside the loop tree.  We
801      move them all to the loop->outer, and then let fix_bb_placements do
802      its work.  */
803
804   body = get_loop_body (loop);
805   n = loop->num_nodes;
806   for (i = 0; i < n; i++)
807     if (body[i]->loop_father == loop)
808       {
809         remove_bb_from_loops (body[i]);
810         add_bb_to_loop (body[i], loop_outer (loop));
811       }
812   free(body);
813
814   while (loop->inner)
815     {
816       ploop = loop->inner;
817       flow_loop_tree_node_remove (ploop);
818       flow_loop_tree_node_add (loop_outer (loop), ploop);
819     }
820
821   /* Remove the loop and free its data.  */
822   delete_loop (loop);
823
824   remove_edge (single_succ_edge (latch));
825
826   /* We do not pass IRRED_INVALIDATED to fix_bb_placements here, as even if
827      there is an irreducible region inside the cancelled loop, the flags will
828      be still correct.  */
829   fix_bb_placements (latch, &dummy);
830 }
831
832 /* Fix placement of superloops of LOOP inside loop tree, i.e. ensure that
833    condition stated in description of fix_loop_placement holds for them.
834    It is used in case when we removed some edges coming out of LOOP, which
835    may cause the right placement of LOOP inside loop tree to change.
836
837    IRRED_INVALIDATED is set to true if a change in the loop structures might
838    invalidate the information about irreducible regions.  */
839
840 static void
841 fix_loop_placements (struct loop *loop, bool *irred_invalidated)
842 {
843   struct loop *outer;
844
845   while (loop_outer (loop))
846     {
847       outer = loop_outer (loop);
848       if (!fix_loop_placement (loop))
849         break;
850
851       /* Changing the placement of a loop in the loop tree may alter the
852          validity of condition 2) of the description of fix_bb_placement
853          for its preheader, because the successor is the header and belongs
854          to the loop.  So call fix_bb_placements to fix up the placement
855          of the preheader and (possibly) of its predecessors.  */
856       fix_bb_placements (loop_preheader_edge (loop)->src,
857                          irred_invalidated);
858       loop = outer;
859     }
860 }
861
862 /* Copies copy of LOOP as subloop of TARGET loop, placing newly
863    created loop into loops structure.  */
864 struct loop *
865 duplicate_loop (struct loop *loop, struct loop *target)
866 {
867   struct loop *cloop;
868   cloop = alloc_loop ();
869   place_new_loop (cloop);
870
871   /* Mark the new loop as copy of LOOP.  */
872   set_loop_copy (loop, cloop);
873
874   /* Add it to target.  */
875   flow_loop_tree_node_add (target, cloop);
876
877   return cloop;
878 }
879
880 /* Copies structure of subloops of LOOP into TARGET loop, placing
881    newly created loops into loop tree.  */
882 void
883 duplicate_subloops (struct loop *loop, struct loop *target)
884 {
885   struct loop *aloop, *cloop;
886
887   for (aloop = loop->inner; aloop; aloop = aloop->next)
888     {
889       cloop = duplicate_loop (aloop, target);
890       duplicate_subloops (aloop, cloop);
891     }
892 }
893
894 /* Copies structure of subloops of N loops, stored in array COPIED_LOOPS,
895    into TARGET loop, placing newly created loops into loop tree.  */
896 static void
897 copy_loops_to (struct loop **copied_loops, int n, struct loop *target)
898 {
899   struct loop *aloop;
900   int i;
901
902   for (i = 0; i < n; i++)
903     {
904       aloop = duplicate_loop (copied_loops[i], target);
905       duplicate_subloops (copied_loops[i], aloop);
906     }
907 }
908
909 /* Redirects edge E to basic block DEST.  */
910 static void
911 loop_redirect_edge (edge e, basic_block dest)
912 {
913   if (e->dest == dest)
914     return;
915
916   redirect_edge_and_branch_force (e, dest);
917 }
918
919 /* Check whether LOOP's body can be duplicated.  */
920 bool
921 can_duplicate_loop_p (const struct loop *loop)
922 {
923   int ret;
924   basic_block *bbs = get_loop_body (loop);
925
926   ret = can_copy_bbs_p (bbs, loop->num_nodes);
927   free (bbs);
928
929   return ret;
930 }
931
932 /* Sets probability and count of edge E to zero.  The probability and count
933    is redistributed evenly to the remaining edges coming from E->src.  */
934
935 static void
936 set_zero_probability (edge e)
937 {
938   basic_block bb = e->src;
939   edge_iterator ei;
940   edge ae, last = NULL;
941   unsigned n = EDGE_COUNT (bb->succs);
942   gcov_type cnt = e->count, cnt1;
943   unsigned prob = e->probability, prob1;
944
945   gcc_assert (n > 1);
946   cnt1 = cnt / (n - 1);
947   prob1 = prob / (n - 1);
948
949   FOR_EACH_EDGE (ae, ei, bb->succs)
950     {
951       if (ae == e)
952         continue;
953
954       ae->probability += prob1;
955       ae->count += cnt1;
956       last = ae;
957     }
958
959   /* Move the rest to one of the edges.  */
960   last->probability += prob % (n - 1);
961   last->count += cnt % (n - 1);
962
963   e->probability = 0;
964   e->count = 0;
965 }
966
967 /* Duplicates body of LOOP to given edge E NDUPL times.  Takes care of updating
968    loop structure and dominators.  E's destination must be LOOP header for
969    this to work, i.e. it must be entry or latch edge of this loop; these are
970    unique, as the loops must have preheaders for this function to work
971    correctly (in case E is latch, the function unrolls the loop, if E is entry
972    edge, it peels the loop).  Store edges created by copying ORIG edge from
973    copies corresponding to set bits in WONT_EXIT bitmap (bit 0 corresponds to
974    original LOOP body, the other copies are numbered in order given by control
975    flow through them) into TO_REMOVE array.  Returns false if duplication is
976    impossible.  */
977
978 bool
979 duplicate_loop_to_header_edge (struct loop *loop, edge e,
980                                unsigned int ndupl, sbitmap wont_exit,
981                                edge orig, VEC (edge, heap) **to_remove,
982                                int flags)
983 {
984   struct loop *target, *aloop;
985   struct loop **orig_loops;
986   unsigned n_orig_loops;
987   basic_block header = loop->header, latch = loop->latch;
988   basic_block *new_bbs, *bbs, *first_active;
989   basic_block new_bb, bb, first_active_latch = NULL;
990   edge ae, latch_edge;
991   edge spec_edges[2], new_spec_edges[2];
992 #define SE_LATCH 0
993 #define SE_ORIG 1
994   unsigned i, j, n;
995   int is_latch = (latch == e->src);
996   int scale_act = 0, *scale_step = NULL, scale_main = 0;
997   int scale_after_exit = 0;
998   int p, freq_in, freq_le, freq_out_orig;
999   int prob_pass_thru, prob_pass_wont_exit, prob_pass_main;
1000   int add_irreducible_flag;
1001   basic_block place_after;
1002   bitmap bbs_to_scale = NULL;
1003   bitmap_iterator bi;
1004
1005   gcc_assert (e->dest == loop->header);
1006   gcc_assert (ndupl > 0);
1007
1008   if (orig)
1009     {
1010       /* Orig must be edge out of the loop.  */
1011       gcc_assert (flow_bb_inside_loop_p (loop, orig->src));
1012       gcc_assert (!flow_bb_inside_loop_p (loop, orig->dest));
1013     }
1014
1015   n = loop->num_nodes;
1016   bbs = get_loop_body_in_dom_order (loop);
1017   gcc_assert (bbs[0] == loop->header);
1018   gcc_assert (bbs[n  - 1] == loop->latch);
1019
1020   /* Check whether duplication is possible.  */
1021   if (!can_copy_bbs_p (bbs, loop->num_nodes))
1022     {
1023       free (bbs);
1024       return false;
1025     }
1026   new_bbs = XNEWVEC (basic_block, loop->num_nodes);
1027
1028   /* In case we are doing loop peeling and the loop is in the middle of
1029      irreducible region, the peeled copies will be inside it too.  */
1030   add_irreducible_flag = e->flags & EDGE_IRREDUCIBLE_LOOP;
1031   gcc_assert (!is_latch || !add_irreducible_flag);
1032
1033   /* Find edge from latch.  */
1034   latch_edge = loop_latch_edge (loop);
1035
1036   if (flags & DLTHE_FLAG_UPDATE_FREQ)
1037     {
1038       /* Calculate coefficients by that we have to scale frequencies
1039          of duplicated loop bodies.  */
1040       freq_in = header->frequency;
1041       freq_le = EDGE_FREQUENCY (latch_edge);
1042       if (freq_in == 0)
1043         freq_in = 1;
1044       if (freq_in < freq_le)
1045         freq_in = freq_le;
1046       freq_out_orig = orig ? EDGE_FREQUENCY (orig) : freq_in - freq_le;
1047       if (freq_out_orig > freq_in - freq_le)
1048         freq_out_orig = freq_in - freq_le;
1049       prob_pass_thru = RDIV (REG_BR_PROB_BASE * freq_le, freq_in);
1050       prob_pass_wont_exit =
1051               RDIV (REG_BR_PROB_BASE * (freq_le + freq_out_orig), freq_in);
1052
1053       if (orig
1054           && REG_BR_PROB_BASE - orig->probability != 0)
1055         {
1056           /* The blocks that are dominated by a removed exit edge ORIG have
1057              frequencies scaled by this.  */
1058           scale_after_exit = RDIV (REG_BR_PROB_BASE * REG_BR_PROB_BASE,
1059                                    REG_BR_PROB_BASE - orig->probability);
1060           bbs_to_scale = BITMAP_ALLOC (NULL);
1061           for (i = 0; i < n; i++)
1062             {
1063               if (bbs[i] != orig->src
1064                   && dominated_by_p (CDI_DOMINATORS, bbs[i], orig->src))
1065                 bitmap_set_bit (bbs_to_scale, i);
1066             }
1067         }
1068
1069       scale_step = XNEWVEC (int, ndupl);
1070
1071       for (i = 1; i <= ndupl; i++)
1072         scale_step[i - 1] = TEST_BIT (wont_exit, i)
1073                                 ? prob_pass_wont_exit
1074                                 : prob_pass_thru;
1075
1076       /* Complete peeling is special as the probability of exit in last
1077          copy becomes 1.  */
1078       if (flags & DLTHE_FLAG_COMPLETTE_PEEL)
1079         {
1080           int wanted_freq = EDGE_FREQUENCY (e);
1081
1082           if (wanted_freq > freq_in)
1083             wanted_freq = freq_in;
1084
1085           gcc_assert (!is_latch);
1086           /* First copy has frequency of incoming edge.  Each subsequent
1087              frequency should be reduced by prob_pass_wont_exit.  Caller
1088              should've managed the flags so all except for original loop
1089              has won't exist set.  */
1090           scale_act = RDIV (wanted_freq * REG_BR_PROB_BASE, freq_in);
1091           /* Now simulate the duplication adjustments and compute header
1092              frequency of the last copy.  */
1093           for (i = 0; i < ndupl; i++)
1094             wanted_freq = RDIV (wanted_freq * scale_step[i], REG_BR_PROB_BASE);
1095           scale_main = RDIV (wanted_freq * REG_BR_PROB_BASE, freq_in);
1096         }
1097       else if (is_latch)
1098         {
1099           prob_pass_main = TEST_BIT (wont_exit, 0)
1100                                 ? prob_pass_wont_exit
1101                                 : prob_pass_thru;
1102           p = prob_pass_main;
1103           scale_main = REG_BR_PROB_BASE;
1104           for (i = 0; i < ndupl; i++)
1105             {
1106               scale_main += p;
1107               p = RDIV (p * scale_step[i], REG_BR_PROB_BASE);
1108             }
1109           scale_main = RDIV (REG_BR_PROB_BASE * REG_BR_PROB_BASE, scale_main);
1110           scale_act = RDIV (scale_main * prob_pass_main, REG_BR_PROB_BASE);
1111         }
1112       else
1113         {
1114           scale_main = REG_BR_PROB_BASE;
1115           for (i = 0; i < ndupl; i++)
1116             scale_main = RDIV (scale_main * scale_step[i], REG_BR_PROB_BASE);
1117           scale_act = REG_BR_PROB_BASE - prob_pass_thru;
1118         }
1119       for (i = 0; i < ndupl; i++)
1120         gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE);
1121       gcc_assert (scale_main >= 0 && scale_main <= REG_BR_PROB_BASE
1122                   && scale_act >= 0  && scale_act <= REG_BR_PROB_BASE);
1123     }
1124
1125   /* Loop the new bbs will belong to.  */
1126   target = e->src->loop_father;
1127
1128   /* Original loops.  */
1129   n_orig_loops = 0;
1130   for (aloop = loop->inner; aloop; aloop = aloop->next)
1131     n_orig_loops++;
1132   orig_loops = XCNEWVEC (struct loop *, n_orig_loops);
1133   for (aloop = loop->inner, i = 0; aloop; aloop = aloop->next, i++)
1134     orig_loops[i] = aloop;
1135
1136   set_loop_copy (loop, target);
1137
1138   first_active = XNEWVEC (basic_block, n);
1139   if (is_latch)
1140     {
1141       memcpy (first_active, bbs, n * sizeof (basic_block));
1142       first_active_latch = latch;
1143     }
1144
1145   spec_edges[SE_ORIG] = orig;
1146   spec_edges[SE_LATCH] = latch_edge;
1147
1148   place_after = e->src;
1149   for (j = 0; j < ndupl; j++)
1150     {
1151       /* Copy loops.  */
1152       copy_loops_to (orig_loops, n_orig_loops, target);
1153
1154       /* Copy bbs.  */
1155       copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop,
1156                 place_after);
1157       place_after = new_spec_edges[SE_LATCH]->src;
1158
1159       if (flags & DLTHE_RECORD_COPY_NUMBER)
1160         for (i = 0; i < n; i++)
1161           {
1162             gcc_assert (!new_bbs[i]->aux);
1163             new_bbs[i]->aux = (void *)(size_t)(j + 1);
1164           }
1165
1166       /* Note whether the blocks and edges belong to an irreducible loop.  */
1167       if (add_irreducible_flag)
1168         {
1169           for (i = 0; i < n; i++)
1170             new_bbs[i]->flags |= BB_DUPLICATED;
1171           for (i = 0; i < n; i++)
1172             {
1173               edge_iterator ei;
1174               new_bb = new_bbs[i];
1175               if (new_bb->loop_father == target)
1176                 new_bb->flags |= BB_IRREDUCIBLE_LOOP;
1177
1178               FOR_EACH_EDGE (ae, ei, new_bb->succs)
1179                 if ((ae->dest->flags & BB_DUPLICATED)
1180                     && (ae->src->loop_father == target
1181                         || ae->dest->loop_father == target))
1182                   ae->flags |= EDGE_IRREDUCIBLE_LOOP;
1183             }
1184           for (i = 0; i < n; i++)
1185             new_bbs[i]->flags &= ~BB_DUPLICATED;
1186         }
1187
1188       /* Redirect the special edges.  */
1189       if (is_latch)
1190         {
1191           redirect_edge_and_branch_force (latch_edge, new_bbs[0]);
1192           redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
1193                                           loop->header);
1194           set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], latch);
1195           latch = loop->latch = new_bbs[n - 1];
1196           e = latch_edge = new_spec_edges[SE_LATCH];
1197         }
1198       else
1199         {
1200           redirect_edge_and_branch_force (new_spec_edges[SE_LATCH],
1201                                           loop->header);
1202           redirect_edge_and_branch_force (e, new_bbs[0]);
1203           set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], e->src);
1204           e = new_spec_edges[SE_LATCH];
1205         }
1206
1207       /* Record exit edge in this copy.  */
1208       if (orig && TEST_BIT (wont_exit, j + 1))
1209         {
1210           if (to_remove)
1211             VEC_safe_push (edge, heap, *to_remove, new_spec_edges[SE_ORIG]);
1212           set_zero_probability (new_spec_edges[SE_ORIG]);
1213
1214           /* Scale the frequencies of the blocks dominated by the exit.  */
1215           if (bbs_to_scale)
1216             {
1217               EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1218                 {
1219                   scale_bbs_frequencies_int (new_bbs + i, 1, scale_after_exit,
1220                                              REG_BR_PROB_BASE);
1221                 }
1222             }
1223         }
1224
1225       /* Record the first copy in the control flow order if it is not
1226          the original loop (i.e. in case of peeling).  */
1227       if (!first_active_latch)
1228         {
1229           memcpy (first_active, new_bbs, n * sizeof (basic_block));
1230           first_active_latch = new_bbs[n - 1];
1231         }
1232
1233       /* Set counts and frequencies.  */
1234       if (flags & DLTHE_FLAG_UPDATE_FREQ)
1235         {
1236           scale_bbs_frequencies_int (new_bbs, n, scale_act, REG_BR_PROB_BASE);
1237           scale_act = RDIV (scale_act * scale_step[j], REG_BR_PROB_BASE);
1238         }
1239     }
1240   free (new_bbs);
1241   free (orig_loops);
1242
1243   /* Record the exit edge in the original loop body, and update the frequencies.  */
1244   if (orig && TEST_BIT (wont_exit, 0))
1245     {
1246       if (to_remove)
1247         VEC_safe_push (edge, heap, *to_remove, orig);
1248       set_zero_probability (orig);
1249
1250       /* Scale the frequencies of the blocks dominated by the exit.  */
1251       if (bbs_to_scale)
1252         {
1253           EXECUTE_IF_SET_IN_BITMAP (bbs_to_scale, 0, i, bi)
1254             {
1255               scale_bbs_frequencies_int (bbs + i, 1, scale_after_exit,
1256                                          REG_BR_PROB_BASE);
1257             }
1258         }
1259     }
1260
1261   /* Update the original loop.  */
1262   if (!is_latch)
1263     set_immediate_dominator (CDI_DOMINATORS, e->dest, e->src);
1264   if (flags & DLTHE_FLAG_UPDATE_FREQ)
1265     {
1266       scale_bbs_frequencies_int (bbs, n, scale_main, REG_BR_PROB_BASE);
1267       free (scale_step);
1268     }
1269
1270   /* Update dominators of outer blocks if affected.  */
1271   for (i = 0; i < n; i++)
1272     {
1273       basic_block dominated, dom_bb;
1274       VEC (basic_block, heap) *dom_bbs;
1275       unsigned j;
1276
1277       bb = bbs[i];
1278       bb->aux = 0;
1279
1280       dom_bbs = get_dominated_by (CDI_DOMINATORS, bb);
1281       for (j = 0; VEC_iterate (basic_block, dom_bbs, j, dominated); j++)
1282         {
1283           if (flow_bb_inside_loop_p (loop, dominated))
1284             continue;
1285           dom_bb = nearest_common_dominator (
1286                         CDI_DOMINATORS, first_active[i], first_active_latch);
1287           set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb);
1288         }
1289       VEC_free (basic_block, heap, dom_bbs);
1290     }
1291   free (first_active);
1292
1293   free (bbs);
1294   BITMAP_FREE (bbs_to_scale);
1295
1296   return true;
1297 }
1298
1299 /* A callback for make_forwarder block, to redirect all edges except for
1300    MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide
1301    whether to redirect it.  */
1302
1303 edge mfb_kj_edge;
1304 bool
1305 mfb_keep_just (edge e)
1306 {
1307   return e != mfb_kj_edge;
1308 }
1309
1310 /* True when a candidate preheader BLOCK has predecessors from LOOP.  */
1311
1312 static bool
1313 has_preds_from_loop (basic_block block, struct loop *loop)
1314 {
1315   edge e;
1316   edge_iterator ei;
1317
1318   FOR_EACH_EDGE (e, ei, block->preds)
1319     if (e->src->loop_father == loop)
1320       return true;
1321   return false;
1322 }
1323
1324 /* Creates a pre-header for a LOOP.  Returns newly created block.  Unless
1325    CP_SIMPLE_PREHEADERS is set in FLAGS, we only force LOOP to have single
1326    entry; otherwise we also force preheader block to have only one successor.
1327    When CP_FALLTHRU_PREHEADERS is set in FLAGS, we force the preheader block
1328    to be a fallthru predecessor to the loop header and to have only
1329    predecessors from outside of the loop.
1330    The function also updates dominators.  */
1331
1332 basic_block
1333 create_preheader (struct loop *loop, int flags)
1334 {
1335   edge e, fallthru;
1336   basic_block dummy;
1337   int nentry = 0;
1338   bool irred = false;
1339   bool latch_edge_was_fallthru;
1340   edge one_succ_pred = NULL, single_entry = NULL;
1341   edge_iterator ei;
1342
1343   FOR_EACH_EDGE (e, ei, loop->header->preds)
1344     {
1345       if (e->src == loop->latch)
1346         continue;
1347       irred |= (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
1348       nentry++;
1349       single_entry = e;
1350       if (single_succ_p (e->src))
1351         one_succ_pred = e;
1352     }
1353   gcc_assert (nentry);
1354   if (nentry == 1)
1355     {
1356       bool need_forwarder_block = false;
1357
1358       /* We do not allow entry block to be the loop preheader, since we
1359              cannot emit code there.  */
1360       if (single_entry->src == ENTRY_BLOCK_PTR)
1361         need_forwarder_block = true;
1362       else
1363         {
1364           /* If we want simple preheaders, also force the preheader to have
1365              just a single successor.  */
1366           if ((flags & CP_SIMPLE_PREHEADERS)
1367               && !single_succ_p (single_entry->src))
1368             need_forwarder_block = true;
1369           /* If we want fallthru preheaders, also create forwarder block when
1370              preheader ends with a jump or has predecessors from loop.  */
1371           else if ((flags & CP_FALLTHRU_PREHEADERS)
1372                    && (JUMP_P (BB_END (single_entry->src))
1373                        || has_preds_from_loop (single_entry->src, loop)))
1374             need_forwarder_block = true;
1375         }
1376       if (! need_forwarder_block)
1377         return NULL;
1378     }
1379
1380   mfb_kj_edge = loop_latch_edge (loop);
1381   latch_edge_was_fallthru = (mfb_kj_edge->flags & EDGE_FALLTHRU) != 0;
1382   fallthru = make_forwarder_block (loop->header, mfb_keep_just, NULL);
1383   dummy = fallthru->src;
1384   loop->header = fallthru->dest;
1385
1386   /* Try to be clever in placing the newly created preheader.  The idea is to
1387      avoid breaking any "fallthruness" relationship between blocks.
1388
1389      The preheader was created just before the header and all incoming edges
1390      to the header were redirected to the preheader, except the latch edge.
1391      So the only problematic case is when this latch edge was a fallthru
1392      edge: it is not anymore after the preheader creation so we have broken
1393      the fallthruness.  We're therefore going to look for a better place.  */
1394   if (latch_edge_was_fallthru)
1395     {
1396       if (one_succ_pred)
1397         e = one_succ_pred;
1398       else
1399         e = EDGE_PRED (dummy, 0);
1400
1401       move_block_after (dummy, e->src);
1402     }
1403
1404   if (irred)
1405     {
1406       dummy->flags |= BB_IRREDUCIBLE_LOOP;
1407       single_succ_edge (dummy)->flags |= EDGE_IRREDUCIBLE_LOOP;
1408     }
1409
1410   if (dump_file)
1411     fprintf (dump_file, "Created preheader block for loop %i\n",
1412              loop->num);
1413
1414   if (flags & CP_FALLTHRU_PREHEADERS)
1415     gcc_assert ((single_succ_edge (dummy)->flags & EDGE_FALLTHRU)
1416                 && !JUMP_P (BB_END (dummy)));
1417
1418   return dummy;
1419 }
1420
1421 /* Create preheaders for each loop; for meaning of FLAGS see create_preheader.  */
1422
1423 void
1424 create_preheaders (int flags)
1425 {
1426   loop_iterator li;
1427   struct loop *loop;
1428
1429   if (!current_loops)
1430     return;
1431
1432   FOR_EACH_LOOP (li, loop, 0)
1433     create_preheader (loop, flags);
1434   loops_state_set (LOOPS_HAVE_PREHEADERS);
1435 }
1436
1437 /* Forces all loop latches to have only single successor.  */
1438
1439 void
1440 force_single_succ_latches (void)
1441 {
1442   loop_iterator li;
1443   struct loop *loop;
1444   edge e;
1445
1446   FOR_EACH_LOOP (li, loop, 0)
1447     {
1448       if (loop->latch != loop->header && single_succ_p (loop->latch))
1449         continue;
1450
1451       e = find_edge (loop->latch, loop->header);
1452
1453       split_edge (e);
1454     }
1455   loops_state_set (LOOPS_HAVE_SIMPLE_LATCHES);
1456 }
1457
1458 /* This function is called from loop_version.  It splits the entry edge
1459    of the loop we want to version, adds the versioning condition, and
1460    adjust the edges to the two versions of the loop appropriately.
1461    e is an incoming edge. Returns the basic block containing the
1462    condition.
1463
1464    --- edge e ---- > [second_head]
1465
1466    Split it and insert new conditional expression and adjust edges.
1467
1468     --- edge e ---> [cond expr] ---> [first_head]
1469                         |
1470                         +---------> [second_head]
1471
1472   THEN_PROB is the probability of then branch of the condition.  */
1473
1474 static basic_block
1475 lv_adjust_loop_entry_edge (basic_block first_head, basic_block second_head,
1476                            edge e, void *cond_expr, unsigned then_prob)
1477 {
1478   basic_block new_head = NULL;
1479   edge e1;
1480
1481   gcc_assert (e->dest == second_head);
1482
1483   /* Split edge 'e'. This will create a new basic block, where we can
1484      insert conditional expr.  */
1485   new_head = split_edge (e);
1486
1487   lv_add_condition_to_bb (first_head, second_head, new_head,
1488                           cond_expr);
1489
1490   /* Don't set EDGE_TRUE_VALUE in RTL mode, as it's invalid there.  */
1491   e = single_succ_edge (new_head);
1492   e1 = make_edge (new_head, first_head,
1493                   current_ir_type () == IR_GIMPLE ? EDGE_TRUE_VALUE : 0);
1494   e1->probability = then_prob;
1495   e->probability = REG_BR_PROB_BASE - then_prob;
1496   e1->count = RDIV (e->count * e1->probability, REG_BR_PROB_BASE);
1497   e->count = RDIV (e->count * e->probability, REG_BR_PROB_BASE);
1498
1499   set_immediate_dominator (CDI_DOMINATORS, first_head, new_head);
1500   set_immediate_dominator (CDI_DOMINATORS, second_head, new_head);
1501
1502   /* Adjust loop header phi nodes.  */
1503   lv_adjust_loop_header_phi (first_head, second_head, new_head, e1);
1504
1505   return new_head;
1506 }
1507
1508 /* Main entry point for Loop Versioning transformation.
1509
1510    This transformation given a condition and a loop, creates
1511    -if (condition) { loop_copy1 } else { loop_copy2 },
1512    where loop_copy1 is the loop transformed in one way, and loop_copy2
1513    is the loop transformed in another way (or unchanged). 'condition'
1514    may be a run time test for things that were not resolved by static
1515    analysis (overlapping ranges (anti-aliasing), alignment, etc.).
1516
1517    THEN_PROB is the probability of the then edge of the if.  THEN_SCALE
1518    is the ratio by that the frequencies in the original loop should
1519    be scaled.  ELSE_SCALE is the ratio by that the frequencies in the
1520    new loop should be scaled.
1521
1522    If PLACE_AFTER is true, we place the new loop after LOOP in the
1523    instruction stream, otherwise it is placed before LOOP.  */
1524
1525 struct loop *
1526 loop_version (struct loop *loop,
1527               void *cond_expr, basic_block *condition_bb,
1528               unsigned then_prob, unsigned then_scale, unsigned else_scale,
1529               bool place_after)
1530 {
1531   basic_block first_head, second_head;
1532   edge entry, latch_edge, true_edge, false_edge;
1533   int irred_flag;
1534   struct loop *nloop;
1535   basic_block cond_bb;
1536
1537   /* Record entry and latch edges for the loop */
1538   entry = loop_preheader_edge (loop);
1539   irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;
1540   entry->flags &= ~EDGE_IRREDUCIBLE_LOOP;
1541
1542   /* Note down head of loop as first_head.  */
1543   first_head = entry->dest;
1544
1545   /* Duplicate loop.  */
1546   if (!cfg_hook_duplicate_loop_to_header_edge (loop, entry, 1,
1547                                                NULL, NULL, NULL, 0))
1548     return NULL;
1549
1550   /* After duplication entry edge now points to new loop head block.
1551      Note down new head as second_head.  */
1552   second_head = entry->dest;
1553
1554   /* Split loop entry edge and insert new block with cond expr.  */
1555   cond_bb =  lv_adjust_loop_entry_edge (first_head, second_head,
1556                                         entry, cond_expr, then_prob);
1557   if (condition_bb)
1558     *condition_bb = cond_bb;
1559
1560   if (!cond_bb)
1561     {
1562       entry->flags |= irred_flag;
1563       return NULL;
1564     }
1565
1566   latch_edge = single_succ_edge (get_bb_copy (loop->latch));
1567
1568   extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1569   nloop = loopify (latch_edge,
1570                    single_pred_edge (get_bb_copy (loop->header)),
1571                    cond_bb, true_edge, false_edge,
1572                    false /* Do not redirect all edges.  */,
1573                    then_scale, else_scale);
1574
1575   /* loopify redirected latch_edge. Update its PENDING_STMTS.  */
1576   lv_flush_pending_stmts (latch_edge);
1577
1578   /* loopify redirected condition_bb's succ edge. Update its PENDING_STMTS.  */
1579   extract_cond_bb_edges (cond_bb, &true_edge, &false_edge);
1580   lv_flush_pending_stmts (false_edge);
1581   /* Adjust irreducible flag.  */
1582   if (irred_flag)
1583     {
1584       cond_bb->flags |= BB_IRREDUCIBLE_LOOP;
1585       loop_preheader_edge (loop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1586       loop_preheader_edge (nloop)->flags |= EDGE_IRREDUCIBLE_LOOP;
1587       single_pred_edge (cond_bb)->flags |= EDGE_IRREDUCIBLE_LOOP;
1588     }
1589
1590   if (place_after)
1591     {
1592       basic_block *bbs = get_loop_body_in_dom_order (nloop), after;
1593       unsigned i;
1594
1595       after = loop->latch;
1596
1597       for (i = 0; i < nloop->num_nodes; i++)
1598         {
1599           move_block_after (bbs[i], after);
1600           after = bbs[i];
1601         }
1602       free (bbs);
1603     }
1604
1605   /* At this point condition_bb is loop preheader with two successors,
1606      first_head and second_head.   Make sure that loop preheader has only
1607      one successor.  */
1608   split_edge (loop_preheader_edge (loop));
1609   split_edge (loop_preheader_edge (nloop));
1610
1611   return nloop;
1612 }
1613
1614 /* The structure of loops might have changed.  Some loops might get removed
1615    (and their headers and latches were set to NULL), loop exists might get
1616    removed (thus the loop nesting may be wrong), and some blocks and edges
1617    were changed (so the information about bb --> loop mapping does not have
1618    to be correct).  But still for the remaining loops the header dominates
1619    the latch, and loops did not get new subloops (new loops might possibly
1620    get created, but we are not interested in them).  Fix up the mess.
1621
1622    If CHANGED_BBS is not NULL, basic blocks whose loop has changed are
1623    marked in it.  */
1624
1625 void
1626 fix_loop_structure (bitmap changed_bbs)
1627 {
1628   basic_block bb;
1629   struct loop *loop, *ploop;
1630   loop_iterator li;
1631   bool record_exits = false;
1632   struct loop **superloop = XNEWVEC (struct loop *, number_of_loops ());
1633
1634   /* Remove the old bb -> loop mapping.  Remember the depth of the blocks in
1635      the loop hierarchy, so that we can recognize blocks whose loop nesting
1636      relationship has changed.  */
1637   FOR_EACH_BB (bb)
1638     {
1639       if (changed_bbs)
1640         bb->aux = (void *) (size_t) loop_depth (bb->loop_father);
1641       bb->loop_father = current_loops->tree_root;
1642     }
1643
1644   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1645     {
1646       release_recorded_exits ();
1647       record_exits = true;
1648     }
1649
1650   /* Remove the dead loops from structures.  We start from the innermost
1651      loops, so that when we remove the loops, we know that the loops inside
1652      are preserved, and do not waste time relinking loops that will be
1653      removed later.  */
1654   FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
1655     {
1656       if (loop->header)
1657         continue;
1658
1659       while (loop->inner)
1660         {
1661           ploop = loop->inner;
1662           flow_loop_tree_node_remove (ploop);
1663           flow_loop_tree_node_add (loop_outer (loop), ploop);
1664         }
1665
1666       /* Remove the loop and free its data.  */
1667       delete_loop (loop);
1668     }
1669
1670   /* Rescan the bodies of loops, starting from the outermost ones.  We assume
1671      that no optimization interchanges the order of the loops, i.e., it cannot
1672      happen that L1 was superloop of L2 before and it is subloop of L2 now
1673      (without explicitly updating loop information).  At the same time, we also
1674      determine the new loop structure.  */
1675   current_loops->tree_root->num_nodes = n_basic_blocks;
1676   FOR_EACH_LOOP (li, loop, 0)
1677     {
1678       superloop[loop->num] = loop->header->loop_father;
1679       loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
1680     }
1681
1682   /* Now fix the loop nesting.  */
1683   FOR_EACH_LOOP (li, loop, 0)
1684     {
1685       ploop = superloop[loop->num];
1686       if (ploop != loop_outer (loop))
1687         {
1688           flow_loop_tree_node_remove (loop);
1689           flow_loop_tree_node_add (ploop, loop);
1690         }
1691     }
1692   free (superloop);
1693
1694   /* Mark the blocks whose loop has changed.  */
1695   if (changed_bbs)
1696     {
1697       FOR_EACH_BB (bb)
1698         {
1699           if ((void *) (size_t) loop_depth (bb->loop_father) != bb->aux)
1700             bitmap_set_bit (changed_bbs, bb->index);
1701
1702           bb->aux = NULL;
1703         }
1704     }
1705
1706   if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS))
1707     create_preheaders (CP_SIMPLE_PREHEADERS);
1708
1709   if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
1710     force_single_succ_latches ();
1711
1712   if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
1713     mark_irreducible_loops ();
1714
1715   if (record_exits)
1716     record_loop_exits ();
1717
1718 #ifdef ENABLE_CHECKING
1719   verify_loop_structure ();
1720 #endif
1721 }