1/* High-level loop manipulation functions.
2   Copyright (C) 2004-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
7under the terms of the GNU General Public License as published by the
8Free Software Foundation; either version 3, or (at your option) any
9later version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT
12ANY WARRANTY; 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 "hash-set.h"
25#include "machmode.h"
26#include "vec.h"
27#include "double-int.h"
28#include "input.h"
29#include "alias.h"
30#include "symtab.h"
31#include "wide-int.h"
32#include "inchash.h"
33#include "tree.h"
34#include "fold-const.h"
35#include "tm_p.h"
36#include "predict.h"
37#include "hard-reg-set.h"
38#include "input.h"
39#include "function.h"
40#include "dominance.h"
41#include "cfg.h"
42#include "cfganal.h"
43#include "basic-block.h"
44#include "tree-ssa-alias.h"
45#include "internal-fn.h"
46#include "gimple-expr.h"
47#include "is-a.h"
48#include "gimple.h"
49#include "gimplify.h"
50#include "gimple-iterator.h"
51#include "gimplify-me.h"
52#include "gimple-ssa.h"
53#include "tree-cfg.h"
54#include "tree-phinodes.h"
55#include "ssa-iterators.h"
56#include "stringpool.h"
57#include "tree-ssanames.h"
58#include "tree-ssa-loop-ivopts.h"
59#include "tree-ssa-loop-manip.h"
60#include "tree-ssa-loop-niter.h"
61#include "tree-ssa-loop.h"
62#include "tree-into-ssa.h"
63#include "tree-ssa.h"
64#include "dumpfile.h"
65#include "gimple-pretty-print.h"
66#include "cfgloop.h"
67#include "tree-pass.h"	/* ??? for TODO_update_ssa but this isn't a pass.  */
68#include "tree-scalar-evolution.h"
69#include "params.h"
70#include "tree-inline.h"
71#include "langhooks.h"
72
73/* All bitmaps for rewriting into loop-closed SSA go on this obstack,
74   so that we can free them all at once.  */
75static bitmap_obstack loop_renamer_obstack;
76
77/* Creates an induction variable with value BASE + STEP * iteration in LOOP.
78   It is expected that neither BASE nor STEP are shared with other expressions
79   (unless the sharing rules allow this).  Use VAR as a base var_decl for it
80   (if NULL, a new temporary will be created).  The increment will occur at
81   INCR_POS (after it if AFTER is true, before it otherwise).  INCR_POS and
82   AFTER can be computed using standard_iv_increment_position.  The ssa versions
83   of the variable before and after increment will be stored in VAR_BEFORE and
84   VAR_AFTER (unless they are NULL).  */
85
86void
87create_iv (tree base, tree step, tree var, struct loop *loop,
88	   gimple_stmt_iterator *incr_pos, bool after,
89	   tree *var_before, tree *var_after)
90{
91  gassign *stmt;
92  gphi *phi;
93  tree initial, step1;
94  gimple_seq stmts;
95  tree vb, va;
96  enum tree_code incr_op = PLUS_EXPR;
97  edge pe = loop_preheader_edge (loop);
98
99  if (var != NULL_TREE)
100    {
101      vb = make_ssa_name (var);
102      va = make_ssa_name (var);
103    }
104  else
105    {
106      vb = make_temp_ssa_name (TREE_TYPE (base), NULL, "ivtmp");
107      va = make_temp_ssa_name (TREE_TYPE (base), NULL, "ivtmp");
108    }
109  if (var_before)
110    *var_before = vb;
111  if (var_after)
112    *var_after = va;
113
114  /* For easier readability of the created code, produce MINUS_EXPRs
115     when suitable.  */
116  if (TREE_CODE (step) == INTEGER_CST)
117    {
118      if (TYPE_UNSIGNED (TREE_TYPE (step)))
119	{
120	  step1 = fold_build1 (NEGATE_EXPR, TREE_TYPE (step), step);
121	  if (tree_int_cst_lt (step1, step))
122	    {
123	      incr_op = MINUS_EXPR;
124	      step = step1;
125	    }
126	}
127      else
128	{
129	  bool ovf;
130
131	  if (!tree_expr_nonnegative_warnv_p (step, &ovf)
132	      && may_negate_without_overflow_p (step))
133	    {
134	      incr_op = MINUS_EXPR;
135	      step = fold_build1 (NEGATE_EXPR, TREE_TYPE (step), step);
136	    }
137	}
138    }
139  if (POINTER_TYPE_P (TREE_TYPE (base)))
140    {
141      if (TREE_CODE (base) == ADDR_EXPR)
142	mark_addressable (TREE_OPERAND (base, 0));
143      step = convert_to_ptrofftype (step);
144      if (incr_op == MINUS_EXPR)
145	step = fold_build1 (NEGATE_EXPR, TREE_TYPE (step), step);
146      incr_op = POINTER_PLUS_EXPR;
147    }
148  /* Gimplify the step if necessary.  We put the computations in front of the
149     loop (i.e. the step should be loop invariant).  */
150  step = force_gimple_operand (step, &stmts, true, NULL_TREE);
151  if (stmts)
152    gsi_insert_seq_on_edge_immediate (pe, stmts);
153
154  stmt = gimple_build_assign (va, incr_op, vb, step);
155  if (after)
156    gsi_insert_after (incr_pos, stmt, GSI_NEW_STMT);
157  else
158    gsi_insert_before (incr_pos, stmt, GSI_NEW_STMT);
159
160  initial = force_gimple_operand (base, &stmts, true, var);
161  if (stmts)
162    gsi_insert_seq_on_edge_immediate (pe, stmts);
163
164  phi = create_phi_node (vb, loop->header);
165  add_phi_arg (phi, initial, loop_preheader_edge (loop), UNKNOWN_LOCATION);
166  add_phi_arg (phi, va, loop_latch_edge (loop), UNKNOWN_LOCATION);
167}
168
169/* Return the innermost superloop LOOP of USE_LOOP that is a superloop of
170   both DEF_LOOP and USE_LOOP.  */
171
172static inline struct loop *
173find_sibling_superloop (struct loop *use_loop, struct loop *def_loop)
174{
175  unsigned ud = loop_depth (use_loop);
176  unsigned dd = loop_depth (def_loop);
177  gcc_assert (ud > 0 && dd > 0);
178  if (ud > dd)
179    use_loop = superloop_at_depth (use_loop, dd);
180  if (ud < dd)
181    def_loop = superloop_at_depth (def_loop, ud);
182  while (loop_outer (use_loop) != loop_outer (def_loop))
183    {
184      use_loop = loop_outer (use_loop);
185      def_loop = loop_outer (def_loop);
186      gcc_assert (use_loop && def_loop);
187    }
188  return use_loop;
189}
190
191/* DEF_BB is a basic block containing a DEF that needs rewriting into
192   loop-closed SSA form.  USE_BLOCKS is the set of basic blocks containing
193   uses of DEF that "escape" from the loop containing DEF_BB (i.e. blocks in
194   USE_BLOCKS are dominated by DEF_BB but not in the loop father of DEF_B).
195   ALL_EXITS[I] is the set of all basic blocks that exit loop I.
196
197   Compute the subset of LOOP_EXITS that exit the loop containing DEF_BB
198   or one of its loop fathers, in which DEF is live.  This set is returned
199   in the bitmap LIVE_EXITS.
200
201   Instead of computing the complete livein set of the def, we use the loop
202   nesting tree as a form of poor man's structure analysis.  This greatly
203   speeds up the analysis, which is important because this function may be
204   called on all SSA names that need rewriting, one at a time.  */
205
206static void
207compute_live_loop_exits (bitmap live_exits, bitmap use_blocks,
208			 bitmap *loop_exits, basic_block def_bb)
209{
210  unsigned i;
211  bitmap_iterator bi;
212  struct loop *def_loop = def_bb->loop_father;
213  unsigned def_loop_depth = loop_depth (def_loop);
214  bitmap def_loop_exits;
215
216  /* Normally the work list size is bounded by the number of basic
217     blocks in the largest loop.  We don't know this number, but we
218     can be fairly sure that it will be relatively small.  */
219  auto_vec<basic_block> worklist (MAX (8, n_basic_blocks_for_fn (cfun) / 128));
220
221  EXECUTE_IF_SET_IN_BITMAP (use_blocks, 0, i, bi)
222    {
223      basic_block use_bb = BASIC_BLOCK_FOR_FN (cfun, i);
224      struct loop *use_loop = use_bb->loop_father;
225      gcc_checking_assert (def_loop != use_loop
226			   && ! flow_loop_nested_p (def_loop, use_loop));
227      if (! flow_loop_nested_p (use_loop, def_loop))
228	use_bb = find_sibling_superloop (use_loop, def_loop)->header;
229      if (bitmap_set_bit (live_exits, use_bb->index))
230	worklist.safe_push (use_bb);
231    }
232
233  /* Iterate until the worklist is empty.  */
234  while (! worklist.is_empty ())
235    {
236      edge e;
237      edge_iterator ei;
238
239      /* Pull a block off the worklist.  */
240      basic_block bb = worklist.pop ();
241
242      /* Make sure we have at least enough room in the work list
243	 for all predecessors of this block.  */
244      worklist.reserve (EDGE_COUNT (bb->preds));
245
246      /* For each predecessor block.  */
247      FOR_EACH_EDGE (e, ei, bb->preds)
248	{
249	  basic_block pred = e->src;
250	  struct loop *pred_loop = pred->loop_father;
251	  unsigned pred_loop_depth = loop_depth (pred_loop);
252	  bool pred_visited;
253
254	  /* We should have met DEF_BB along the way.  */
255	  gcc_assert (pred != ENTRY_BLOCK_PTR_FOR_FN (cfun));
256
257	  if (pred_loop_depth >= def_loop_depth)
258	    {
259	      if (pred_loop_depth > def_loop_depth)
260		pred_loop = superloop_at_depth (pred_loop, def_loop_depth);
261	      /* If we've reached DEF_LOOP, our train ends here.  */
262	      if (pred_loop == def_loop)
263		continue;
264	    }
265	  else if (! flow_loop_nested_p (pred_loop, def_loop))
266	    pred = find_sibling_superloop (pred_loop, def_loop)->header;
267
268	  /* Add PRED to the LIVEIN set.  PRED_VISITED is true if
269	     we had already added PRED to LIVEIN before.  */
270	  pred_visited = !bitmap_set_bit (live_exits, pred->index);
271
272	  /* If we have visited PRED before, don't add it to the worklist.
273	     If BB dominates PRED, then we're probably looking at a loop.
274	     We're only interested in looking up in the dominance tree
275	     because DEF_BB dominates all the uses.  */
276	  if (pred_visited || dominated_by_p (CDI_DOMINATORS, pred, bb))
277	    continue;
278
279	  worklist.quick_push (pred);
280	}
281    }
282
283  def_loop_exits = BITMAP_ALLOC (&loop_renamer_obstack);
284  for (struct loop *loop = def_loop;
285       loop != current_loops->tree_root;
286       loop = loop_outer (loop))
287    bitmap_ior_into (def_loop_exits, loop_exits[loop->num]);
288  bitmap_and_into (live_exits, def_loop_exits);
289  BITMAP_FREE (def_loop_exits);
290}
291
292/* Add a loop-closing PHI for VAR in basic block EXIT.  */
293
294static void
295add_exit_phi (basic_block exit, tree var)
296{
297  gphi *phi;
298  edge e;
299  edge_iterator ei;
300
301#ifdef ENABLE_CHECKING
302  /* Check that at least one of the edges entering the EXIT block exits
303     the loop, or a superloop of that loop, that VAR is defined in.  */
304  gimple def_stmt = SSA_NAME_DEF_STMT (var);
305  basic_block def_bb = gimple_bb (def_stmt);
306  FOR_EACH_EDGE (e, ei, exit->preds)
307    {
308      struct loop *aloop = find_common_loop (def_bb->loop_father,
309					     e->src->loop_father);
310      if (!flow_bb_inside_loop_p (aloop, e->dest))
311	break;
312    }
313
314  gcc_checking_assert (e);
315#endif
316
317  phi = create_phi_node (NULL_TREE, exit);
318  create_new_def_for (var, phi, gimple_phi_result_ptr (phi));
319  FOR_EACH_EDGE (e, ei, exit->preds)
320    add_phi_arg (phi, var, e, UNKNOWN_LOCATION);
321
322  if (dump_file && (dump_flags & TDF_DETAILS))
323    {
324      fprintf (dump_file, ";; Created LCSSA PHI: ");
325      print_gimple_stmt (dump_file, phi, 0, dump_flags);
326    }
327}
328
329/* Add exit phis for VAR that is used in LIVEIN.
330   Exits of the loops are stored in LOOP_EXITS.  */
331
332static void
333add_exit_phis_var (tree var, bitmap use_blocks, bitmap *loop_exits)
334{
335  unsigned index;
336  bitmap_iterator bi;
337  basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (var));
338  bitmap live_exits = BITMAP_ALLOC (&loop_renamer_obstack);
339
340  gcc_checking_assert (! bitmap_bit_p (use_blocks, def_bb->index));
341
342  compute_live_loop_exits (live_exits, use_blocks, loop_exits, def_bb);
343
344  EXECUTE_IF_SET_IN_BITMAP (live_exits, 0, index, bi)
345    {
346      add_exit_phi (BASIC_BLOCK_FOR_FN (cfun, index), var);
347    }
348
349  BITMAP_FREE (live_exits);
350}
351
352/* Add exit phis for the names marked in NAMES_TO_RENAME.
353   Exits of the loops are stored in EXITS.  Sets of blocks where the ssa
354   names are used are stored in USE_BLOCKS.  */
355
356static void
357add_exit_phis (bitmap names_to_rename, bitmap *use_blocks, bitmap *loop_exits)
358{
359  unsigned i;
360  bitmap_iterator bi;
361
362  EXECUTE_IF_SET_IN_BITMAP (names_to_rename, 0, i, bi)
363    {
364      add_exit_phis_var (ssa_name (i), use_blocks[i], loop_exits);
365    }
366}
367
368/* Fill the array of bitmaps LOOP_EXITS with all loop exit edge targets.  */
369
370static void
371get_loops_exits (bitmap *loop_exits)
372{
373  struct loop *loop;
374  unsigned j;
375  edge e;
376
377  FOR_EACH_LOOP (loop, 0)
378    {
379      vec<edge> exit_edges = get_loop_exit_edges (loop);
380      loop_exits[loop->num] = BITMAP_ALLOC (&loop_renamer_obstack);
381      FOR_EACH_VEC_ELT (exit_edges, j, e)
382        bitmap_set_bit (loop_exits[loop->num], e->dest->index);
383      exit_edges.release ();
384    }
385}
386
387/* For USE in BB, if it is used outside of the loop it is defined in,
388   mark it for rewrite.  Record basic block BB where it is used
389   to USE_BLOCKS.  Record the ssa name index to NEED_PHIS bitmap.  */
390
391static void
392find_uses_to_rename_use (basic_block bb, tree use, bitmap *use_blocks,
393			 bitmap need_phis)
394{
395  unsigned ver;
396  basic_block def_bb;
397  struct loop *def_loop;
398
399  if (TREE_CODE (use) != SSA_NAME)
400    return;
401
402  ver = SSA_NAME_VERSION (use);
403  def_bb = gimple_bb (SSA_NAME_DEF_STMT (use));
404  if (!def_bb)
405    return;
406  def_loop = def_bb->loop_father;
407
408  /* If the definition is not inside a loop, it is not interesting.  */
409  if (!loop_outer (def_loop))
410    return;
411
412  /* If the use is not outside of the loop it is defined in, it is not
413     interesting.  */
414  if (flow_bb_inside_loop_p (def_loop, bb))
415    return;
416
417  /* If we're seeing VER for the first time, we still have to allocate
418     a bitmap for its uses.  */
419  if (bitmap_set_bit (need_phis, ver))
420    use_blocks[ver] = BITMAP_ALLOC (&loop_renamer_obstack);
421  bitmap_set_bit (use_blocks[ver], bb->index);
422}
423
424/* For uses in STMT, mark names that are used outside of the loop they are
425   defined to rewrite.  Record the set of blocks in that the ssa
426   names are defined to USE_BLOCKS and the ssa names themselves to
427   NEED_PHIS.  */
428
429static void
430find_uses_to_rename_stmt (gimple stmt, bitmap *use_blocks, bitmap need_phis)
431{
432  ssa_op_iter iter;
433  tree var;
434  basic_block bb = gimple_bb (stmt);
435
436  if (is_gimple_debug (stmt))
437    return;
438
439  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE)
440    find_uses_to_rename_use (bb, var, use_blocks, need_phis);
441}
442
443/* Marks names that are used in BB and outside of the loop they are
444   defined in for rewrite.  Records the set of blocks in that the ssa
445   names are defined to USE_BLOCKS.  Record the SSA names that will
446   need exit PHIs in NEED_PHIS.  */
447
448static void
449find_uses_to_rename_bb (basic_block bb, bitmap *use_blocks, bitmap need_phis)
450{
451  edge e;
452  edge_iterator ei;
453
454  FOR_EACH_EDGE (e, ei, bb->succs)
455    for (gphi_iterator bsi = gsi_start_phis (e->dest); !gsi_end_p (bsi);
456	 gsi_next (&bsi))
457      {
458        gphi *phi = bsi.phi ();
459	if (! virtual_operand_p (gimple_phi_result (phi)))
460	  find_uses_to_rename_use (bb, PHI_ARG_DEF_FROM_EDGE (phi, e),
461				   use_blocks, need_phis);
462      }
463
464  for (gimple_stmt_iterator bsi = gsi_start_bb (bb); !gsi_end_p (bsi);
465       gsi_next (&bsi))
466    find_uses_to_rename_stmt (gsi_stmt (bsi), use_blocks, need_phis);
467}
468
469/* Marks names that are used outside of the loop they are defined in
470   for rewrite.  Records the set of blocks in that the ssa
471   names are defined to USE_BLOCKS.  If CHANGED_BBS is not NULL,
472   scan only blocks in this set.  */
473
474static void
475find_uses_to_rename (bitmap changed_bbs, bitmap *use_blocks, bitmap need_phis)
476{
477  basic_block bb;
478  unsigned index;
479  bitmap_iterator bi;
480
481  if (changed_bbs)
482    EXECUTE_IF_SET_IN_BITMAP (changed_bbs, 0, index, bi)
483      find_uses_to_rename_bb (BASIC_BLOCK_FOR_FN (cfun, index), use_blocks, need_phis);
484  else
485    FOR_EACH_BB_FN (bb, cfun)
486      find_uses_to_rename_bb (bb, use_blocks, need_phis);
487}
488
489/* Rewrites the program into a loop closed ssa form -- i.e. inserts extra
490   phi nodes to ensure that no variable is used outside the loop it is
491   defined in.
492
493   This strengthening of the basic ssa form has several advantages:
494
495   1) Updating it during unrolling/peeling/versioning is trivial, since
496      we do not need to care about the uses outside of the loop.
497      The same applies to virtual operands which are also rewritten into
498      loop closed SSA form.  Note that virtual operands are always live
499      until function exit.
500   2) The behavior of all uses of an induction variable is the same.
501      Without this, you need to distinguish the case when the variable
502      is used outside of the loop it is defined in, for example
503
504      for (i = 0; i < 100; i++)
505	{
506	  for (j = 0; j < 100; j++)
507	    {
508	      k = i + j;
509	      use1 (k);
510	    }
511	  use2 (k);
512	}
513
514      Looking from the outer loop with the normal SSA form, the first use of k
515      is not well-behaved, while the second one is an induction variable with
516      base 99 and step 1.
517
518      If CHANGED_BBS is not NULL, we look for uses outside loops only in
519      the basic blocks in this set.
520
521      UPDATE_FLAG is used in the call to update_ssa.  See
522      TODO_update_ssa* for documentation.  */
523
524void
525rewrite_into_loop_closed_ssa (bitmap changed_bbs, unsigned update_flag)
526{
527  bitmap *use_blocks;
528  bitmap names_to_rename;
529
530  loops_state_set (LOOP_CLOSED_SSA);
531  if (number_of_loops (cfun) <= 1)
532    return;
533
534  /* If the pass has caused the SSA form to be out-of-date, update it
535     now.  */
536  update_ssa (update_flag);
537
538  bitmap_obstack_initialize (&loop_renamer_obstack);
539
540  names_to_rename = BITMAP_ALLOC (&loop_renamer_obstack);
541
542  /* Uses of names to rename.  We don't have to initialize this array,
543     because we know that we will only have entries for the SSA names
544     in NAMES_TO_RENAME.  */
545  use_blocks = XNEWVEC (bitmap, num_ssa_names);
546
547  /* Find the uses outside loops.  */
548  find_uses_to_rename (changed_bbs, use_blocks, names_to_rename);
549
550  if (!bitmap_empty_p (names_to_rename))
551    {
552      /* An array of bitmaps where LOOP_EXITS[I] is the set of basic blocks
553	 that are the destination of an edge exiting loop number I.  */
554      bitmap *loop_exits = XNEWVEC (bitmap, number_of_loops (cfun));
555      get_loops_exits (loop_exits);
556
557      /* Add the PHI nodes on exits of the loops for the names we need to
558	 rewrite.  */
559      add_exit_phis (names_to_rename, use_blocks, loop_exits);
560
561      free (loop_exits);
562
563      /* Fix up all the names found to be used outside their original
564	 loops.  */
565      update_ssa (TODO_update_ssa);
566    }
567
568  bitmap_obstack_release (&loop_renamer_obstack);
569  free (use_blocks);
570}
571
572/* Check invariants of the loop closed ssa form for the USE in BB.  */
573
574static void
575check_loop_closed_ssa_use (basic_block bb, tree use)
576{
577  gimple def;
578  basic_block def_bb;
579
580  if (TREE_CODE (use) != SSA_NAME || virtual_operand_p (use))
581    return;
582
583  def = SSA_NAME_DEF_STMT (use);
584  def_bb = gimple_bb (def);
585  gcc_assert (!def_bb
586	      || flow_bb_inside_loop_p (def_bb->loop_father, bb));
587}
588
589/* Checks invariants of loop closed ssa form in statement STMT in BB.  */
590
591static void
592check_loop_closed_ssa_stmt (basic_block bb, gimple stmt)
593{
594  ssa_op_iter iter;
595  tree var;
596
597  if (is_gimple_debug (stmt))
598    return;
599
600  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE)
601    check_loop_closed_ssa_use (bb, var);
602}
603
604/* Checks that invariants of the loop closed ssa form are preserved.
605   Call verify_ssa when VERIFY_SSA_P is true.  */
606
607DEBUG_FUNCTION void
608verify_loop_closed_ssa (bool verify_ssa_p)
609{
610  basic_block bb;
611  edge e;
612  edge_iterator ei;
613
614  if (number_of_loops (cfun) <= 1)
615    return;
616
617  if (verify_ssa_p)
618    verify_ssa (false, true);
619
620  timevar_push (TV_VERIFY_LOOP_CLOSED);
621
622  FOR_EACH_BB_FN (bb, cfun)
623    {
624      for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi);
625	   gsi_next (&bsi))
626	{
627	  gphi *phi = bsi.phi ();
628	  FOR_EACH_EDGE (e, ei, bb->preds)
629	    check_loop_closed_ssa_use (e->src,
630				       PHI_ARG_DEF_FROM_EDGE (phi, e));
631	}
632
633      for (gimple_stmt_iterator bsi = gsi_start_bb (bb); !gsi_end_p (bsi);
634	   gsi_next (&bsi))
635	check_loop_closed_ssa_stmt (bb, gsi_stmt (bsi));
636    }
637
638  timevar_pop (TV_VERIFY_LOOP_CLOSED);
639}
640
641/* Split loop exit edge EXIT.  The things are a bit complicated by a need to
642   preserve the loop closed ssa form.  The newly created block is returned.  */
643
644basic_block
645split_loop_exit_edge (edge exit)
646{
647  basic_block dest = exit->dest;
648  basic_block bb = split_edge (exit);
649  gphi *phi, *new_phi;
650  tree new_name, name;
651  use_operand_p op_p;
652  gphi_iterator psi;
653  source_location locus;
654
655  for (psi = gsi_start_phis (dest); !gsi_end_p (psi); gsi_next (&psi))
656    {
657      phi = psi.phi ();
658      op_p = PHI_ARG_DEF_PTR_FROM_EDGE (phi, single_succ_edge (bb));
659      locus = gimple_phi_arg_location_from_edge (phi, single_succ_edge (bb));
660
661      name = USE_FROM_PTR (op_p);
662
663      /* If the argument of the PHI node is a constant, we do not need
664	 to keep it inside loop.  */
665      if (TREE_CODE (name) != SSA_NAME)
666	continue;
667
668      /* Otherwise create an auxiliary phi node that will copy the value
669	 of the SSA name out of the loop.  */
670      new_name = duplicate_ssa_name (name, NULL);
671      new_phi = create_phi_node (new_name, bb);
672      add_phi_arg (new_phi, name, exit, locus);
673      SET_USE (op_p, new_name);
674    }
675
676  return bb;
677}
678
679/* Returns the basic block in that statements should be emitted for induction
680   variables incremented at the end of the LOOP.  */
681
682basic_block
683ip_end_pos (struct loop *loop)
684{
685  return loop->latch;
686}
687
688/* Returns the basic block in that statements should be emitted for induction
689   variables incremented just before exit condition of a LOOP.  */
690
691basic_block
692ip_normal_pos (struct loop *loop)
693{
694  gimple last;
695  basic_block bb;
696  edge exit;
697
698  if (!single_pred_p (loop->latch))
699    return NULL;
700
701  bb = single_pred (loop->latch);
702  last = last_stmt (bb);
703  if (!last
704      || gimple_code (last) != GIMPLE_COND)
705    return NULL;
706
707  exit = EDGE_SUCC (bb, 0);
708  if (exit->dest == loop->latch)
709    exit = EDGE_SUCC (bb, 1);
710
711  if (flow_bb_inside_loop_p (loop, exit->dest))
712    return NULL;
713
714  return bb;
715}
716
717/* Stores the standard position for induction variable increment in LOOP
718   (just before the exit condition if it is available and latch block is empty,
719   end of the latch block otherwise) to BSI.  INSERT_AFTER is set to true if
720   the increment should be inserted after *BSI.  */
721
722void
723standard_iv_increment_position (struct loop *loop, gimple_stmt_iterator *bsi,
724				bool *insert_after)
725{
726  basic_block bb = ip_normal_pos (loop), latch = ip_end_pos (loop);
727  gimple last = last_stmt (latch);
728
729  if (!bb
730      || (last && gimple_code (last) != GIMPLE_LABEL))
731    {
732      *bsi = gsi_last_bb (latch);
733      *insert_after = true;
734    }
735  else
736    {
737      *bsi = gsi_last_bb (bb);
738      *insert_after = false;
739    }
740}
741
742/* Copies phi node arguments for duplicated blocks.  The index of the first
743   duplicated block is FIRST_NEW_BLOCK.  */
744
745static void
746copy_phi_node_args (unsigned first_new_block)
747{
748  unsigned i;
749
750  for (i = first_new_block; i < (unsigned) last_basic_block_for_fn (cfun); i++)
751    BASIC_BLOCK_FOR_FN (cfun, i)->flags |= BB_DUPLICATED;
752
753  for (i = first_new_block; i < (unsigned) last_basic_block_for_fn (cfun); i++)
754    add_phi_args_after_copy_bb (BASIC_BLOCK_FOR_FN (cfun, i));
755
756  for (i = first_new_block; i < (unsigned) last_basic_block_for_fn (cfun); i++)
757    BASIC_BLOCK_FOR_FN (cfun, i)->flags &= ~BB_DUPLICATED;
758}
759
760
761/* The same as cfgloopmanip.c:duplicate_loop_to_header_edge, but also
762   updates the PHI nodes at start of the copied region.  In order to
763   achieve this, only loops whose exits all lead to the same location
764   are handled.
765
766   Notice that we do not completely update the SSA web after
767   duplication.  The caller is responsible for calling update_ssa
768   after the loop has been duplicated.  */
769
770bool
771gimple_duplicate_loop_to_header_edge (struct loop *loop, edge e,
772				    unsigned int ndupl, sbitmap wont_exit,
773				    edge orig, vec<edge> *to_remove,
774				    int flags)
775{
776  unsigned first_new_block;
777
778  if (!loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
779    return false;
780  if (!loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS))
781    return false;
782
783  first_new_block = last_basic_block_for_fn (cfun);
784  if (!duplicate_loop_to_header_edge (loop, e, ndupl, wont_exit,
785				      orig, to_remove, flags))
786    return false;
787
788  /* Readd the removed phi args for e.  */
789  flush_pending_stmts (e);
790
791  /* Copy the phi node arguments.  */
792  copy_phi_node_args (first_new_block);
793
794  scev_reset ();
795
796  return true;
797}
798
799/* Returns true if we can unroll LOOP FACTOR times.  Number
800   of iterations of the loop is returned in NITER.  */
801
802bool
803can_unroll_loop_p (struct loop *loop, unsigned factor,
804		   struct tree_niter_desc *niter)
805{
806  edge exit;
807
808  /* Check whether unrolling is possible.  We only want to unroll loops
809     for that we are able to determine number of iterations.  We also
810     want to split the extra iterations of the loop from its end,
811     therefore we require that the loop has precisely one
812     exit.  */
813
814  exit = single_dom_exit (loop);
815  if (!exit)
816    return false;
817
818  if (!number_of_iterations_exit (loop, exit, niter, false)
819      || niter->cmp == ERROR_MARK
820      /* Scalar evolutions analysis might have copy propagated
821	 the abnormal ssa names into these expressions, hence
822	 emitting the computations based on them during loop
823	 unrolling might create overlapping life ranges for
824	 them, and failures in out-of-ssa.  */
825      || contains_abnormal_ssa_name_p (niter->may_be_zero)
826      || contains_abnormal_ssa_name_p (niter->control.base)
827      || contains_abnormal_ssa_name_p (niter->control.step)
828      || contains_abnormal_ssa_name_p (niter->bound))
829    return false;
830
831  /* And of course, we must be able to duplicate the loop.  */
832  if (!can_duplicate_loop_p (loop))
833    return false;
834
835  /* The final loop should be small enough.  */
836  if (tree_num_loop_insns (loop, &eni_size_weights) * factor
837      > (unsigned) PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS))
838    return false;
839
840  return true;
841}
842
843/* Determines the conditions that control execution of LOOP unrolled FACTOR
844   times.  DESC is number of iterations of LOOP.  ENTER_COND is set to
845   condition that must be true if the main loop can be entered.
846   EXIT_BASE, EXIT_STEP, EXIT_CMP and EXIT_BOUND are set to values describing
847   how the exit from the unrolled loop should be controlled.  */
848
849static void
850determine_exit_conditions (struct loop *loop, struct tree_niter_desc *desc,
851			   unsigned factor, tree *enter_cond,
852			   tree *exit_base, tree *exit_step,
853			   enum tree_code *exit_cmp, tree *exit_bound)
854{
855  gimple_seq stmts;
856  tree base = desc->control.base;
857  tree step = desc->control.step;
858  tree bound = desc->bound;
859  tree type = TREE_TYPE (step);
860  tree bigstep, delta;
861  tree min = lower_bound_in_type (type, type);
862  tree max = upper_bound_in_type (type, type);
863  enum tree_code cmp = desc->cmp;
864  tree cond = boolean_true_node, assum;
865
866  /* For pointers, do the arithmetics in the type of step.  */
867  base = fold_convert (type, base);
868  bound = fold_convert (type, bound);
869
870  *enter_cond = boolean_false_node;
871  *exit_base = NULL_TREE;
872  *exit_step = NULL_TREE;
873  *exit_cmp = ERROR_MARK;
874  *exit_bound = NULL_TREE;
875  gcc_assert (cmp != ERROR_MARK);
876
877  /* We only need to be correct when we answer question
878     "Do at least FACTOR more iterations remain?" in the unrolled loop.
879     Thus, transforming BASE + STEP * i <> BOUND to
880     BASE + STEP * i < BOUND is ok.  */
881  if (cmp == NE_EXPR)
882    {
883      if (tree_int_cst_sign_bit (step))
884	cmp = GT_EXPR;
885      else
886	cmp = LT_EXPR;
887    }
888  else if (cmp == LT_EXPR)
889    {
890      gcc_assert (!tree_int_cst_sign_bit (step));
891    }
892  else if (cmp == GT_EXPR)
893    {
894      gcc_assert (tree_int_cst_sign_bit (step));
895    }
896  else
897    gcc_unreachable ();
898
899  /* The main body of the loop may be entered iff:
900
901     1) desc->may_be_zero is false.
902     2) it is possible to check that there are at least FACTOR iterations
903	of the loop, i.e., BOUND - step * FACTOR does not overflow.
904     3) # of iterations is at least FACTOR  */
905
906  if (!integer_zerop (desc->may_be_zero))
907    cond = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
908			invert_truthvalue (desc->may_be_zero),
909			cond);
910
911  bigstep = fold_build2 (MULT_EXPR, type, step,
912			 build_int_cst_type (type, factor));
913  delta = fold_build2 (MINUS_EXPR, type, bigstep, step);
914  if (cmp == LT_EXPR)
915    assum = fold_build2 (GE_EXPR, boolean_type_node,
916			 bound,
917			 fold_build2 (PLUS_EXPR, type, min, delta));
918  else
919    assum = fold_build2 (LE_EXPR, boolean_type_node,
920			 bound,
921			 fold_build2 (PLUS_EXPR, type, max, delta));
922  cond = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, assum, cond);
923
924  bound = fold_build2 (MINUS_EXPR, type, bound, delta);
925  assum = fold_build2 (cmp, boolean_type_node, base, bound);
926  cond = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, assum, cond);
927
928  cond = force_gimple_operand (unshare_expr (cond), &stmts, false, NULL_TREE);
929  if (stmts)
930    gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
931  /* cond now may be a gimple comparison, which would be OK, but also any
932     other gimple rhs (say a && b).  In this case we need to force it to
933     operand.  */
934  if (!is_gimple_condexpr (cond))
935    {
936      cond = force_gimple_operand (cond, &stmts, true, NULL_TREE);
937      if (stmts)
938	gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
939    }
940  *enter_cond = cond;
941
942  base = force_gimple_operand (unshare_expr (base), &stmts, true, NULL_TREE);
943  if (stmts)
944    gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
945  bound = force_gimple_operand (unshare_expr (bound), &stmts, true, NULL_TREE);
946  if (stmts)
947    gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
948
949  *exit_base = base;
950  *exit_step = bigstep;
951  *exit_cmp = cmp;
952  *exit_bound = bound;
953}
954
955/* Scales the frequencies of all basic blocks in LOOP that are strictly
956   dominated by BB by NUM/DEN.  */
957
958static void
959scale_dominated_blocks_in_loop (struct loop *loop, basic_block bb,
960				int num, int den)
961{
962  basic_block son;
963
964  if (den == 0)
965    return;
966
967  for (son = first_dom_son (CDI_DOMINATORS, bb);
968       son;
969       son = next_dom_son (CDI_DOMINATORS, son))
970    {
971      if (!flow_bb_inside_loop_p (loop, son))
972	continue;
973      scale_bbs_frequencies_int (&son, 1, num, den);
974      scale_dominated_blocks_in_loop (loop, son, num, den);
975    }
976}
977
978/* Unroll LOOP FACTOR times.  DESC describes number of iterations of LOOP.
979   EXIT is the exit of the loop to that DESC corresponds.
980
981   If N is number of iterations of the loop and MAY_BE_ZERO is the condition
982   under that loop exits in the first iteration even if N != 0,
983
984   while (1)
985     {
986       x = phi (init, next);
987
988       pre;
989       if (st)
990         break;
991       post;
992     }
993
994   becomes (with possibly the exit conditions formulated a bit differently,
995   avoiding the need to create a new iv):
996
997   if (MAY_BE_ZERO || N < FACTOR)
998     goto rest;
999
1000   do
1001     {
1002       x = phi (init, next);
1003
1004       pre;
1005       post;
1006       pre;
1007       post;
1008       ...
1009       pre;
1010       post;
1011       N -= FACTOR;
1012
1013     } while (N >= FACTOR);
1014
1015   rest:
1016     init' = phi (init, x);
1017
1018   while (1)
1019     {
1020       x = phi (init', next);
1021
1022       pre;
1023       if (st)
1024         break;
1025       post;
1026     }
1027
1028   Before the loop is unrolled, TRANSFORM is called for it (only for the
1029   unrolled loop, but not for its versioned copy).  DATA is passed to
1030   TRANSFORM.  */
1031
1032/* Probability in % that the unrolled loop is entered.  Just a guess.  */
1033#define PROB_UNROLLED_LOOP_ENTERED 90
1034
1035void
1036tree_transform_and_unroll_loop (struct loop *loop, unsigned factor,
1037				edge exit, struct tree_niter_desc *desc,
1038				transform_callback transform,
1039				void *data)
1040{
1041  gcond *exit_if;
1042  tree ctr_before, ctr_after;
1043  tree enter_main_cond, exit_base, exit_step, exit_bound;
1044  enum tree_code exit_cmp;
1045  gphi *phi_old_loop, *phi_new_loop, *phi_rest;
1046  gphi_iterator psi_old_loop, psi_new_loop;
1047  tree init, next, new_init;
1048  struct loop *new_loop;
1049  basic_block rest, exit_bb;
1050  edge old_entry, new_entry, old_latch, precond_edge, new_exit;
1051  edge new_nonexit, e;
1052  gimple_stmt_iterator bsi;
1053  use_operand_p op;
1054  bool ok;
1055  unsigned est_niter, prob_entry, scale_unrolled, scale_rest, freq_e, freq_h;
1056  unsigned new_est_niter, i, prob;
1057  unsigned irr = loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP;
1058  sbitmap wont_exit;
1059  auto_vec<edge> to_remove;
1060
1061  est_niter = expected_loop_iterations (loop);
1062  determine_exit_conditions (loop, desc, factor,
1063			     &enter_main_cond, &exit_base, &exit_step,
1064			     &exit_cmp, &exit_bound);
1065
1066  /* Let us assume that the unrolled loop is quite likely to be entered.  */
1067  if (integer_nonzerop (enter_main_cond))
1068    prob_entry = REG_BR_PROB_BASE;
1069  else
1070    prob_entry = PROB_UNROLLED_LOOP_ENTERED * REG_BR_PROB_BASE / 100;
1071
1072  /* The values for scales should keep profile consistent, and somewhat close
1073     to correct.
1074
1075     TODO: The current value of SCALE_REST makes it appear that the loop that
1076     is created by splitting the remaining iterations of the unrolled loop is
1077     executed the same number of times as the original loop, and with the same
1078     frequencies, which is obviously wrong.  This does not appear to cause
1079     problems, so we do not bother with fixing it for now.  To make the profile
1080     correct, we would need to change the probability of the exit edge of the
1081     loop, and recompute the distribution of frequencies in its body because
1082     of this change (scale the frequencies of blocks before and after the exit
1083     by appropriate factors).  */
1084  scale_unrolled = prob_entry;
1085  scale_rest = REG_BR_PROB_BASE;
1086
1087  new_loop = loop_version (loop, enter_main_cond, NULL,
1088			   prob_entry, scale_unrolled, scale_rest, true);
1089  gcc_assert (new_loop != NULL);
1090  update_ssa (TODO_update_ssa);
1091
1092  /* Determine the probability of the exit edge of the unrolled loop.  */
1093  new_est_niter = est_niter / factor;
1094
1095  /* Without profile feedback, loops for that we do not know a better estimate
1096     are assumed to roll 10 times.  When we unroll such loop, it appears to
1097     roll too little, and it may even seem to be cold.  To avoid this, we
1098     ensure that the created loop appears to roll at least 5 times (but at
1099     most as many times as before unrolling).  */
1100  if (new_est_niter < 5)
1101    {
1102      if (est_niter < 5)
1103	new_est_niter = est_niter;
1104      else
1105	new_est_niter = 5;
1106    }
1107
1108  /* Prepare the cfg and update the phi nodes.  Move the loop exit to the
1109     loop latch (and make its condition dummy, for the moment).  */
1110  rest = loop_preheader_edge (new_loop)->src;
1111  precond_edge = single_pred_edge (rest);
1112  split_edge (loop_latch_edge (loop));
1113  exit_bb = single_pred (loop->latch);
1114
1115  /* Since the exit edge will be removed, the frequency of all the blocks
1116     in the loop that are dominated by it must be scaled by
1117     1 / (1 - exit->probability).  */
1118  scale_dominated_blocks_in_loop (loop, exit->src,
1119				  REG_BR_PROB_BASE,
1120				  REG_BR_PROB_BASE - exit->probability);
1121
1122  bsi = gsi_last_bb (exit_bb);
1123  exit_if = gimple_build_cond (EQ_EXPR, integer_zero_node,
1124			       integer_zero_node,
1125			       NULL_TREE, NULL_TREE);
1126
1127  gsi_insert_after (&bsi, exit_if, GSI_NEW_STMT);
1128  new_exit = make_edge (exit_bb, rest, EDGE_FALSE_VALUE | irr);
1129  rescan_loop_exit (new_exit, true, false);
1130
1131  /* Set the probability of new exit to the same of the old one.  Fix
1132     the frequency of the latch block, by scaling it back by
1133     1 - exit->probability.  */
1134  new_exit->count = exit->count;
1135  new_exit->probability = exit->probability;
1136  new_nonexit = single_pred_edge (loop->latch);
1137  new_nonexit->probability = REG_BR_PROB_BASE - exit->probability;
1138  new_nonexit->flags = EDGE_TRUE_VALUE;
1139  new_nonexit->count -= exit->count;
1140  if (new_nonexit->count < 0)
1141    new_nonexit->count = 0;
1142  scale_bbs_frequencies_int (&loop->latch, 1, new_nonexit->probability,
1143			     REG_BR_PROB_BASE);
1144
1145  old_entry = loop_preheader_edge (loop);
1146  new_entry = loop_preheader_edge (new_loop);
1147  old_latch = loop_latch_edge (loop);
1148  for (psi_old_loop = gsi_start_phis (loop->header),
1149       psi_new_loop = gsi_start_phis (new_loop->header);
1150       !gsi_end_p (psi_old_loop);
1151       gsi_next (&psi_old_loop), gsi_next (&psi_new_loop))
1152    {
1153      phi_old_loop = psi_old_loop.phi ();
1154      phi_new_loop = psi_new_loop.phi ();
1155
1156      init = PHI_ARG_DEF_FROM_EDGE (phi_old_loop, old_entry);
1157      op = PHI_ARG_DEF_PTR_FROM_EDGE (phi_new_loop, new_entry);
1158      gcc_assert (operand_equal_for_phi_arg_p (init, USE_FROM_PTR (op)));
1159      next = PHI_ARG_DEF_FROM_EDGE (phi_old_loop, old_latch);
1160
1161      /* Prefer using original variable as a base for the new ssa name.
1162	 This is necessary for virtual ops, and useful in order to avoid
1163	 losing debug info for real ops.  */
1164      if (TREE_CODE (next) == SSA_NAME
1165	  && useless_type_conversion_p (TREE_TYPE (next),
1166					TREE_TYPE (init)))
1167	new_init = copy_ssa_name (next);
1168      else if (TREE_CODE (init) == SSA_NAME
1169	       && useless_type_conversion_p (TREE_TYPE (init),
1170					     TREE_TYPE (next)))
1171	new_init = copy_ssa_name (init);
1172      else if (useless_type_conversion_p (TREE_TYPE (next), TREE_TYPE (init)))
1173	new_init = make_temp_ssa_name (TREE_TYPE (next), NULL, "unrinittmp");
1174      else
1175	new_init = make_temp_ssa_name (TREE_TYPE (init), NULL, "unrinittmp");
1176
1177      phi_rest = create_phi_node (new_init, rest);
1178
1179      add_phi_arg (phi_rest, init, precond_edge, UNKNOWN_LOCATION);
1180      add_phi_arg (phi_rest, next, new_exit, UNKNOWN_LOCATION);
1181      SET_USE (op, new_init);
1182    }
1183
1184  remove_path (exit);
1185
1186  /* Transform the loop.  */
1187  if (transform)
1188    (*transform) (loop, data);
1189
1190  /* Unroll the loop and remove the exits in all iterations except for the
1191     last one.  */
1192  wont_exit = sbitmap_alloc (factor);
1193  bitmap_ones (wont_exit);
1194  bitmap_clear_bit (wont_exit, factor - 1);
1195
1196  ok = gimple_duplicate_loop_to_header_edge
1197	  (loop, loop_latch_edge (loop), factor - 1,
1198	   wont_exit, new_exit, &to_remove, DLTHE_FLAG_UPDATE_FREQ);
1199  free (wont_exit);
1200  gcc_assert (ok);
1201
1202  FOR_EACH_VEC_ELT (to_remove, i, e)
1203    {
1204      ok = remove_path (e);
1205      gcc_assert (ok);
1206    }
1207  update_ssa (TODO_update_ssa);
1208
1209  /* Ensure that the frequencies in the loop match the new estimated
1210     number of iterations, and change the probability of the new
1211     exit edge.  */
1212  freq_h = loop->header->frequency;
1213  freq_e = EDGE_FREQUENCY (loop_preheader_edge (loop));
1214  if (freq_h != 0)
1215    scale_loop_frequencies (loop, freq_e * (new_est_niter + 1), freq_h);
1216
1217  exit_bb = single_pred (loop->latch);
1218  new_exit = find_edge (exit_bb, rest);
1219  new_exit->count = loop_preheader_edge (loop)->count;
1220  new_exit->probability = REG_BR_PROB_BASE / (new_est_niter + 1);
1221
1222  rest->count += new_exit->count;
1223  rest->frequency += EDGE_FREQUENCY (new_exit);
1224
1225  new_nonexit = single_pred_edge (loop->latch);
1226  prob = new_nonexit->probability;
1227  new_nonexit->probability = REG_BR_PROB_BASE - new_exit->probability;
1228  new_nonexit->count = exit_bb->count - new_exit->count;
1229  if (new_nonexit->count < 0)
1230    new_nonexit->count = 0;
1231  if (prob > 0)
1232    scale_bbs_frequencies_int (&loop->latch, 1, new_nonexit->probability,
1233			       prob);
1234
1235  /* Finally create the new counter for number of iterations and add the new
1236     exit instruction.  */
1237  bsi = gsi_last_nondebug_bb (exit_bb);
1238  exit_if = as_a <gcond *> (gsi_stmt (bsi));
1239  create_iv (exit_base, exit_step, NULL_TREE, loop,
1240	     &bsi, false, &ctr_before, &ctr_after);
1241  gimple_cond_set_code (exit_if, exit_cmp);
1242  gimple_cond_set_lhs (exit_if, ctr_after);
1243  gimple_cond_set_rhs (exit_if, exit_bound);
1244  update_stmt (exit_if);
1245
1246#ifdef ENABLE_CHECKING
1247  verify_flow_info ();
1248  verify_loop_structure ();
1249  verify_loop_closed_ssa (true);
1250#endif
1251}
1252
1253/* Wrapper over tree_transform_and_unroll_loop for case we do not
1254   want to transform the loop before unrolling.  The meaning
1255   of the arguments is the same as for tree_transform_and_unroll_loop.  */
1256
1257void
1258tree_unroll_loop (struct loop *loop, unsigned factor,
1259		  edge exit, struct tree_niter_desc *desc)
1260{
1261  tree_transform_and_unroll_loop (loop, factor, exit, desc,
1262				  NULL, NULL);
1263}
1264
1265/* Rewrite the phi node at position PSI in function of the main
1266   induction variable MAIN_IV and insert the generated code at GSI.  */
1267
1268static void
1269rewrite_phi_with_iv (loop_p loop,
1270		     gphi_iterator *psi,
1271		     gimple_stmt_iterator *gsi,
1272		     tree main_iv)
1273{
1274  affine_iv iv;
1275  gassign *stmt;
1276  gphi *phi = psi->phi ();
1277  tree atype, mtype, val, res = PHI_RESULT (phi);
1278
1279  if (virtual_operand_p (res) || res == main_iv)
1280    {
1281      gsi_next (psi);
1282      return;
1283    }
1284
1285  if (!simple_iv (loop, loop, res, &iv, true))
1286    {
1287      gsi_next (psi);
1288      return;
1289    }
1290
1291  remove_phi_node (psi, false);
1292
1293  atype = TREE_TYPE (res);
1294  mtype = POINTER_TYPE_P (atype) ? sizetype : atype;
1295  val = fold_build2 (MULT_EXPR, mtype, unshare_expr (iv.step),
1296		     fold_convert (mtype, main_iv));
1297  val = fold_build2 (POINTER_TYPE_P (atype)
1298		     ? POINTER_PLUS_EXPR : PLUS_EXPR,
1299		     atype, unshare_expr (iv.base), val);
1300  val = force_gimple_operand_gsi (gsi, val, false, NULL_TREE, true,
1301				  GSI_SAME_STMT);
1302  stmt = gimple_build_assign (res, val);
1303  gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
1304}
1305
1306/* Rewrite all the phi nodes of LOOP in function of the main induction
1307   variable MAIN_IV.  */
1308
1309static void
1310rewrite_all_phi_nodes_with_iv (loop_p loop, tree main_iv)
1311{
1312  unsigned i;
1313  basic_block *bbs = get_loop_body_in_dom_order (loop);
1314  gphi_iterator psi;
1315
1316  for (i = 0; i < loop->num_nodes; i++)
1317    {
1318      basic_block bb = bbs[i];
1319      gimple_stmt_iterator gsi = gsi_after_labels (bb);
1320
1321      if (bb->loop_father != loop)
1322	continue;
1323
1324      for (psi = gsi_start_phis (bb); !gsi_end_p (psi); )
1325	rewrite_phi_with_iv (loop, &psi, &gsi, main_iv);
1326    }
1327
1328  free (bbs);
1329}
1330
1331/* Bases all the induction variables in LOOP on a single induction
1332   variable (unsigned with base 0 and step 1), whose final value is
1333   compared with *NIT.  When the IV type precision has to be larger
1334   than *NIT type precision, *NIT is converted to the larger type, the
1335   conversion code is inserted before the loop, and *NIT is updated to
1336   the new definition.  When BUMP_IN_LATCH is true, the induction
1337   variable is incremented in the loop latch, otherwise it is
1338   incremented in the loop header.  Return the induction variable that
1339   was created.  */
1340
1341tree
1342canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch)
1343{
1344  unsigned precision = TYPE_PRECISION (TREE_TYPE (*nit));
1345  unsigned original_precision = precision;
1346  tree type, var_before;
1347  gimple_stmt_iterator gsi;
1348  gphi_iterator psi;
1349  gcond *stmt;
1350  edge exit = single_dom_exit (loop);
1351  gimple_seq stmts;
1352  machine_mode mode;
1353  bool unsigned_p = false;
1354
1355  for (psi = gsi_start_phis (loop->header);
1356       !gsi_end_p (psi); gsi_next (&psi))
1357    {
1358      gphi *phi = psi.phi ();
1359      tree res = PHI_RESULT (phi);
1360      bool uns;
1361
1362      type = TREE_TYPE (res);
1363      if (virtual_operand_p (res)
1364	  || (!INTEGRAL_TYPE_P (type)
1365	      && !POINTER_TYPE_P (type))
1366	  || TYPE_PRECISION (type) < precision)
1367	continue;
1368
1369      uns = POINTER_TYPE_P (type) | TYPE_UNSIGNED (type);
1370
1371      if (TYPE_PRECISION (type) > precision)
1372	unsigned_p = uns;
1373      else
1374	unsigned_p |= uns;
1375
1376      precision = TYPE_PRECISION (type);
1377    }
1378
1379  mode = smallest_mode_for_size (precision, MODE_INT);
1380  precision = GET_MODE_PRECISION (mode);
1381  type = build_nonstandard_integer_type (precision, unsigned_p);
1382
1383  if (original_precision != precision)
1384    {
1385      *nit = fold_convert (type, *nit);
1386      *nit = force_gimple_operand (*nit, &stmts, true, NULL_TREE);
1387      if (stmts)
1388	gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
1389    }
1390
1391  if (bump_in_latch)
1392    gsi = gsi_last_bb (loop->latch);
1393  else
1394    gsi = gsi_last_nondebug_bb (loop->header);
1395  create_iv (build_int_cst_type (type, 0), build_int_cst (type, 1), NULL_TREE,
1396	     loop, &gsi, bump_in_latch, &var_before, NULL);
1397
1398  rewrite_all_phi_nodes_with_iv (loop, var_before);
1399
1400  stmt = as_a <gcond *> (last_stmt (exit->src));
1401  /* Make the loop exit if the control condition is not satisfied.  */
1402  if (exit->flags & EDGE_TRUE_VALUE)
1403    {
1404      edge te, fe;
1405
1406      extract_true_false_edges_from_block (exit->src, &te, &fe);
1407      te->flags = EDGE_FALSE_VALUE;
1408      fe->flags = EDGE_TRUE_VALUE;
1409    }
1410  gimple_cond_set_code (stmt, LT_EXPR);
1411  gimple_cond_set_lhs (stmt, var_before);
1412  gimple_cond_set_rhs (stmt, *nit);
1413  update_stmt (stmt);
1414
1415  return var_before;
1416}
1417