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