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