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