OSDN Git Service

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