1 /* High-level loop manipulation functions.
2 Copyright (C) 2004-2020 Free Software Foundation, Inc.
4 This file is part of GCC.
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
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
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/>. */
22 #include "coretypes.h"
27 #include "tree-pass.h" /* ??? for TODO_update_ssa but this isn't a pass. */
29 #include "gimple-pretty-print.h"
30 #include "fold-const.h"
33 #include "gimple-iterator.h"
34 #include "gimplify-me.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"
43 #include "tree-scalar-evolution.h"
44 #include "tree-inline.h"
46 /* All bitmaps for rewriting into loop-closed SSA go on this obstack,
47 so that we can free them all at once. */
48 static bitmap_obstack loop_renamer_obstack
;
50 /* Creates an induction variable with value BASE + STEP * iteration in LOOP.
51 It is expected that neither BASE nor STEP are shared with other expressions
52 (unless the sharing rules allow this). Use VAR as a base var_decl for it
53 (if NULL, a new temporary will be created). The increment will occur at
54 INCR_POS (after it if AFTER is true, before it otherwise). INCR_POS and
55 AFTER can be computed using standard_iv_increment_position. The ssa versions
56 of the variable before and after increment will be stored in VAR_BEFORE and
57 VAR_AFTER (unless they are NULL). */
60 create_iv (tree base
, tree step
, tree var
, class loop
*loop
,
61 gimple_stmt_iterator
*incr_pos
, bool after
,
62 tree
*var_before
, tree
*var_after
)
69 enum tree_code incr_op
= PLUS_EXPR
;
70 edge pe
= loop_preheader_edge (loop
);
74 vb
= make_ssa_name (var
);
75 va
= make_ssa_name (var
);
79 vb
= make_temp_ssa_name (TREE_TYPE (base
), NULL
, "ivtmp");
80 va
= make_temp_ssa_name (TREE_TYPE (base
), NULL
, "ivtmp");
87 /* For easier readability of the created code, produce MINUS_EXPRs
89 if (TREE_CODE (step
) == INTEGER_CST
)
91 if (TYPE_UNSIGNED (TREE_TYPE (step
)))
93 step1
= fold_build1 (NEGATE_EXPR
, TREE_TYPE (step
), step
);
94 if (tree_int_cst_lt (step1
, step
))
104 if (!tree_expr_nonnegative_warnv_p (step
, &ovf
)
105 && may_negate_without_overflow_p (step
))
107 incr_op
= MINUS_EXPR
;
108 step
= fold_build1 (NEGATE_EXPR
, TREE_TYPE (step
), step
);
112 if (POINTER_TYPE_P (TREE_TYPE (base
)))
114 if (TREE_CODE (base
) == ADDR_EXPR
)
115 mark_addressable (TREE_OPERAND (base
, 0));
116 step
= convert_to_ptrofftype (step
);
117 if (incr_op
== MINUS_EXPR
)
118 step
= fold_build1 (NEGATE_EXPR
, TREE_TYPE (step
), step
);
119 incr_op
= POINTER_PLUS_EXPR
;
121 /* Gimplify the step if necessary. We put the computations in front of the
122 loop (i.e. the step should be loop invariant). */
123 step
= force_gimple_operand (step
, &stmts
, true, NULL_TREE
);
125 gsi_insert_seq_on_edge_immediate (pe
, stmts
);
127 stmt
= gimple_build_assign (va
, incr_op
, vb
, step
);
128 /* Prevent the increment from inheriting a bogus location if it is not put
129 immediately after a statement whose location is known. */
132 if (gsi_end_p (*incr_pos
))
134 edge e
= single_succ_edge (gsi_bb (*incr_pos
));
135 gimple_set_location (stmt
, e
->goto_locus
);
137 gsi_insert_after (incr_pos
, stmt
, GSI_NEW_STMT
);
141 if (!gsi_end_p (*incr_pos
))
142 gimple_set_location (stmt
, gimple_location (gsi_stmt (*incr_pos
)));
143 gsi_insert_before (incr_pos
, stmt
, GSI_NEW_STMT
);
146 initial
= force_gimple_operand (base
, &stmts
, true, var
);
148 gsi_insert_seq_on_edge_immediate (pe
, stmts
);
150 phi
= create_phi_node (vb
, loop
->header
);
151 add_phi_arg (phi
, initial
, loop_preheader_edge (loop
), UNKNOWN_LOCATION
);
152 add_phi_arg (phi
, va
, loop_latch_edge (loop
), UNKNOWN_LOCATION
);
155 /* Return the innermost superloop LOOP of USE_LOOP that is a superloop of
156 both DEF_LOOP and USE_LOOP. */
158 static inline class loop
*
159 find_sibling_superloop (class loop
*use_loop
, class loop
*def_loop
)
161 unsigned ud
= loop_depth (use_loop
);
162 unsigned dd
= loop_depth (def_loop
);
163 gcc_assert (ud
> 0 && dd
> 0);
165 use_loop
= superloop_at_depth (use_loop
, dd
);
167 def_loop
= superloop_at_depth (def_loop
, ud
);
168 while (loop_outer (use_loop
) != loop_outer (def_loop
))
170 use_loop
= loop_outer (use_loop
);
171 def_loop
= loop_outer (def_loop
);
172 gcc_assert (use_loop
&& def_loop
);
177 /* DEF_BB is a basic block containing a DEF that needs rewriting into
178 loop-closed SSA form. USE_BLOCKS is the set of basic blocks containing
179 uses of DEF that "escape" from the loop containing DEF_BB (i.e. blocks in
180 USE_BLOCKS are dominated by DEF_BB but not in the loop father of DEF_B).
181 ALL_EXITS[I] is the set of all basic blocks that exit loop I.
183 Compute the subset of LOOP_EXITS that exit the loop containing DEF_BB
184 or one of its loop fathers, in which DEF is live. This set is returned
185 in the bitmap LIVE_EXITS.
187 Instead of computing the complete livein set of the def, we use the loop
188 nesting tree as a form of poor man's structure analysis. This greatly
189 speeds up the analysis, which is important because this function may be
190 called on all SSA names that need rewriting, one at a time. */
193 compute_live_loop_exits (bitmap live_exits
, bitmap use_blocks
,
194 bitmap
*loop_exits
, basic_block def_bb
)
198 class loop
*def_loop
= def_bb
->loop_father
;
199 unsigned def_loop_depth
= loop_depth (def_loop
);
200 bitmap def_loop_exits
;
202 /* Normally the work list size is bounded by the number of basic
203 blocks in the largest loop. We don't know this number, but we
204 can be fairly sure that it will be relatively small. */
205 auto_vec
<basic_block
> worklist (MAX (8, n_basic_blocks_for_fn (cfun
) / 128));
207 EXECUTE_IF_SET_IN_BITMAP (use_blocks
, 0, i
, bi
)
209 basic_block use_bb
= BASIC_BLOCK_FOR_FN (cfun
, i
);
210 class loop
*use_loop
= use_bb
->loop_father
;
211 gcc_checking_assert (def_loop
!= use_loop
212 && ! flow_loop_nested_p (def_loop
, use_loop
));
213 if (! flow_loop_nested_p (use_loop
, def_loop
))
214 use_bb
= find_sibling_superloop (use_loop
, def_loop
)->header
;
215 if (bitmap_set_bit (live_exits
, use_bb
->index
))
216 worklist
.safe_push (use_bb
);
219 /* Iterate until the worklist is empty. */
220 while (! worklist
.is_empty ())
225 /* Pull a block off the worklist. */
226 basic_block bb
= worklist
.pop ();
228 /* Make sure we have at least enough room in the work list
229 for all predecessors of this block. */
230 worklist
.reserve (EDGE_COUNT (bb
->preds
));
232 /* For each predecessor block. */
233 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
235 basic_block pred
= e
->src
;
236 class loop
*pred_loop
= pred
->loop_father
;
237 unsigned pred_loop_depth
= loop_depth (pred_loop
);
240 /* We should have met DEF_BB along the way. */
241 gcc_assert (pred
!= ENTRY_BLOCK_PTR_FOR_FN (cfun
));
243 if (pred_loop_depth
>= def_loop_depth
)
245 if (pred_loop_depth
> def_loop_depth
)
246 pred_loop
= superloop_at_depth (pred_loop
, def_loop_depth
);
247 /* If we've reached DEF_LOOP, our train ends here. */
248 if (pred_loop
== def_loop
)
251 else if (! flow_loop_nested_p (pred_loop
, def_loop
))
252 pred
= find_sibling_superloop (pred_loop
, def_loop
)->header
;
254 /* Add PRED to the LIVEIN set. PRED_VISITED is true if
255 we had already added PRED to LIVEIN before. */
256 pred_visited
= !bitmap_set_bit (live_exits
, pred
->index
);
258 /* If we have visited PRED before, don't add it to the worklist.
259 If BB dominates PRED, then we're probably looking at a loop.
260 We're only interested in looking up in the dominance tree
261 because DEF_BB dominates all the uses. */
262 if (pred_visited
|| dominated_by_p (CDI_DOMINATORS
, pred
, bb
))
265 worklist
.quick_push (pred
);
269 def_loop_exits
= BITMAP_ALLOC (&loop_renamer_obstack
);
270 for (class loop
*loop
= def_loop
;
271 loop
!= current_loops
->tree_root
;
272 loop
= loop_outer (loop
))
273 bitmap_ior_into (def_loop_exits
, loop_exits
[loop
->num
]);
274 bitmap_and_into (live_exits
, def_loop_exits
);
275 BITMAP_FREE (def_loop_exits
);
278 /* Add a loop-closing PHI for VAR in basic block EXIT. */
281 add_exit_phi (basic_block exit
, tree var
)
287 /* Check that at least one of the edges entering the EXIT block exits
288 the loop, or a superloop of that loop, that VAR is defined in. */
291 gimple
*def_stmt
= SSA_NAME_DEF_STMT (var
);
292 basic_block def_bb
= gimple_bb (def_stmt
);
293 FOR_EACH_EDGE (e
, ei
, exit
->preds
)
295 class loop
*aloop
= find_common_loop (def_bb
->loop_father
,
296 e
->src
->loop_father
);
297 if (!flow_bb_inside_loop_p (aloop
, e
->dest
))
303 phi
= create_phi_node (NULL_TREE
, exit
);
304 create_new_def_for (var
, phi
, gimple_phi_result_ptr (phi
));
305 FOR_EACH_EDGE (e
, ei
, exit
->preds
)
306 add_phi_arg (phi
, var
, e
, UNKNOWN_LOCATION
);
308 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
310 fprintf (dump_file
, ";; Created LCSSA PHI: ");
311 print_gimple_stmt (dump_file
, phi
, 0, dump_flags
);
315 /* Add exit phis for VAR that is used in LIVEIN.
316 Exits of the loops are stored in LOOP_EXITS. */
319 add_exit_phis_var (tree var
, bitmap use_blocks
, bitmap
*loop_exits
)
323 basic_block def_bb
= gimple_bb (SSA_NAME_DEF_STMT (var
));
324 bitmap live_exits
= BITMAP_ALLOC (&loop_renamer_obstack
);
326 gcc_checking_assert (! bitmap_bit_p (use_blocks
, def_bb
->index
));
328 compute_live_loop_exits (live_exits
, use_blocks
, loop_exits
, def_bb
);
330 EXECUTE_IF_SET_IN_BITMAP (live_exits
, 0, index
, bi
)
332 add_exit_phi (BASIC_BLOCK_FOR_FN (cfun
, index
), var
);
335 BITMAP_FREE (live_exits
);
338 /* Add exit phis for the names marked in NAMES_TO_RENAME.
339 Exits of the loops are stored in EXITS. Sets of blocks where the ssa
340 names are used are stored in USE_BLOCKS. */
343 add_exit_phis (bitmap names_to_rename
, bitmap
*use_blocks
, bitmap
*loop_exits
)
348 EXECUTE_IF_SET_IN_BITMAP (names_to_rename
, 0, i
, bi
)
350 add_exit_phis_var (ssa_name (i
), use_blocks
[i
], loop_exits
);
354 /* Fill the array of bitmaps LOOP_EXITS with all loop exit edge targets. */
357 get_loops_exits (bitmap
*loop_exits
)
363 FOR_EACH_LOOP (loop
, 0)
365 vec
<edge
> exit_edges
= get_loop_exit_edges (loop
);
366 loop_exits
[loop
->num
] = BITMAP_ALLOC (&loop_renamer_obstack
);
367 FOR_EACH_VEC_ELT (exit_edges
, j
, e
)
368 bitmap_set_bit (loop_exits
[loop
->num
], e
->dest
->index
);
369 exit_edges
.release ();
373 /* For USE in BB, if it is used outside of the loop it is defined in,
374 mark it for rewrite. Record basic block BB where it is used
375 to USE_BLOCKS. Record the ssa name index to NEED_PHIS bitmap.
376 Note that for USEs in phis, BB should be the src of the edge corresponding to
377 the use, rather than the bb containing the phi. */
380 find_uses_to_rename_use (basic_block bb
, tree use
, bitmap
*use_blocks
,
385 class loop
*def_loop
;
387 if (TREE_CODE (use
) != SSA_NAME
)
390 ver
= SSA_NAME_VERSION (use
);
391 def_bb
= gimple_bb (SSA_NAME_DEF_STMT (use
));
394 def_loop
= def_bb
->loop_father
;
396 /* If the definition is not inside a loop, it is not interesting. */
397 if (!loop_outer (def_loop
))
400 /* If the use is not outside of the loop it is defined in, it is not
402 if (flow_bb_inside_loop_p (def_loop
, bb
))
405 /* If we're seeing VER for the first time, we still have to allocate
406 a bitmap for its uses. */
407 if (bitmap_set_bit (need_phis
, ver
))
408 use_blocks
[ver
] = BITMAP_ALLOC (&loop_renamer_obstack
);
409 bitmap_set_bit (use_blocks
[ver
], bb
->index
);
412 /* For uses matching USE_FLAGS in STMT, mark names that are used outside of the
413 loop they are defined to rewrite. Record the set of blocks in which the ssa
414 names are used to USE_BLOCKS, and the ssa names themselves to NEED_PHIS. */
417 find_uses_to_rename_stmt (gimple
*stmt
, bitmap
*use_blocks
, bitmap need_phis
,
422 basic_block bb
= gimple_bb (stmt
);
424 if (is_gimple_debug (stmt
))
427 /* FOR_EACH_SSA_TREE_OPERAND iterator does not allows SSA_OP_VIRTUAL_USES
429 if (use_flags
== SSA_OP_VIRTUAL_USES
)
431 tree vuse
= gimple_vuse (stmt
);
432 if (vuse
!= NULL_TREE
)
433 find_uses_to_rename_use (bb
, gimple_vuse (stmt
), use_blocks
, need_phis
);
436 FOR_EACH_SSA_TREE_OPERAND (var
, stmt
, iter
, use_flags
)
437 find_uses_to_rename_use (bb
, var
, use_blocks
, need_phis
);
440 /* Marks names matching USE_FLAGS that are used in BB and outside of the loop
441 they are defined in for rewrite. Records the set of blocks in which the ssa
442 names are used to USE_BLOCKS. Record the SSA names that will
443 need exit PHIs in NEED_PHIS. */
446 find_uses_to_rename_bb (basic_block bb
, bitmap
*use_blocks
, bitmap need_phis
,
451 bool do_virtuals
= (use_flags
& SSA_OP_VIRTUAL_USES
) != 0;
452 bool do_nonvirtuals
= (use_flags
& SSA_OP_USE
) != 0;
454 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
455 for (gphi_iterator bsi
= gsi_start_phis (e
->dest
); !gsi_end_p (bsi
);
458 gphi
*phi
= bsi
.phi ();
459 bool virtual_p
= virtual_operand_p (gimple_phi_result (phi
));
460 if ((virtual_p
&& do_virtuals
)
461 || (!virtual_p
&& do_nonvirtuals
))
462 find_uses_to_rename_use (bb
, PHI_ARG_DEF_FROM_EDGE (phi
, e
),
463 use_blocks
, need_phis
);
466 for (gimple_stmt_iterator bsi
= gsi_start_bb (bb
); !gsi_end_p (bsi
);
468 find_uses_to_rename_stmt (gsi_stmt (bsi
), use_blocks
, need_phis
,
472 /* Marks names matching USE_FLAGS that are used outside of the loop they are
473 defined in for rewrite. Records the set of blocks in which the ssa names are
474 used to USE_BLOCKS. Record the SSA names that will need exit PHIs in
475 NEED_PHIS. If CHANGED_BBS is not NULL, scan only blocks in this set. */
478 find_uses_to_rename (bitmap changed_bbs
, bitmap
*use_blocks
, bitmap need_phis
,
486 EXECUTE_IF_SET_IN_BITMAP (changed_bbs
, 0, index
, bi
)
488 bb
= BASIC_BLOCK_FOR_FN (cfun
, index
);
490 find_uses_to_rename_bb (bb
, use_blocks
, need_phis
, use_flags
);
493 FOR_EACH_BB_FN (bb
, cfun
)
494 find_uses_to_rename_bb (bb
, use_blocks
, need_phis
, use_flags
);
497 /* Mark uses of DEF that are used outside of the loop they are defined in for
498 rewrite. Record the set of blocks in which the ssa names are used to
499 USE_BLOCKS. Record the SSA names that will need exit PHIs in NEED_PHIS. */
502 find_uses_to_rename_def (tree def
, bitmap
*use_blocks
, bitmap need_phis
)
505 imm_use_iterator imm_iter
;
507 FOR_EACH_IMM_USE_STMT (use_stmt
, imm_iter
, def
)
509 if (is_gimple_debug (use_stmt
))
512 basic_block use_bb
= gimple_bb (use_stmt
);
515 FOR_EACH_IMM_USE_ON_STMT (use_p
, imm_iter
)
517 if (gimple_code (use_stmt
) == GIMPLE_PHI
)
519 edge e
= gimple_phi_arg_edge (as_a
<gphi
*> (use_stmt
),
520 PHI_ARG_INDEX_FROM_USE (use_p
));
523 find_uses_to_rename_use (use_bb
, USE_FROM_PTR (use_p
), use_blocks
,
529 /* Marks names matching USE_FLAGS that are defined in LOOP and used outside of
530 it for rewrite. Records the set of blocks in which the ssa names are used to
531 USE_BLOCKS. Record the SSA names that will need exit PHIs in NEED_PHIS. */
534 find_uses_to_rename_in_loop (class loop
*loop
, bitmap
*use_blocks
,
535 bitmap need_phis
, int use_flags
)
537 bool do_virtuals
= (use_flags
& SSA_OP_VIRTUAL_USES
) != 0;
538 bool do_nonvirtuals
= (use_flags
& SSA_OP_USE
) != 0;
539 int def_flags
= ((do_virtuals
? SSA_OP_VIRTUAL_DEFS
: 0)
540 | (do_nonvirtuals
? SSA_OP_DEF
: 0));
543 basic_block
*bbs
= get_loop_body (loop
);
545 for (unsigned int i
= 0; i
< loop
->num_nodes
; i
++)
547 basic_block bb
= bbs
[i
];
549 for (gphi_iterator bsi
= gsi_start_phis (bb
); !gsi_end_p (bsi
);
552 gphi
*phi
= bsi
.phi ();
553 tree res
= gimple_phi_result (phi
);
554 bool virtual_p
= virtual_operand_p (res
);
555 if ((virtual_p
&& do_virtuals
)
556 || (!virtual_p
&& do_nonvirtuals
))
557 find_uses_to_rename_def (res
, use_blocks
, need_phis
);
560 for (gimple_stmt_iterator bsi
= gsi_start_bb (bb
); !gsi_end_p (bsi
);
563 gimple
*stmt
= gsi_stmt (bsi
);
564 /* FOR_EACH_SSA_TREE_OPERAND iterator does not allows
565 SSA_OP_VIRTUAL_DEFS only. */
566 if (def_flags
== SSA_OP_VIRTUAL_DEFS
)
568 tree vdef
= gimple_vdef (stmt
);
570 find_uses_to_rename_def (vdef
, use_blocks
, need_phis
);
576 FOR_EACH_SSA_TREE_OPERAND (var
, stmt
, iter
, def_flags
)
577 find_uses_to_rename_def (var
, use_blocks
, need_phis
);
585 /* Rewrites the program into a loop closed ssa form -- i.e. inserts extra
586 phi nodes to ensure that no variable is used outside the loop it is
589 This strengthening of the basic ssa form has several advantages:
591 1) Updating it during unrolling/peeling/versioning is trivial, since
592 we do not need to care about the uses outside of the loop.
593 The same applies to virtual operands which are also rewritten into
594 loop closed SSA form. Note that virtual operands are always live
596 2) The behavior of all uses of an induction variable is the same.
597 Without this, you need to distinguish the case when the variable
598 is used outside of the loop it is defined in, for example
600 for (i = 0; i < 100; i++)
602 for (j = 0; j < 100; j++)
610 Looking from the outer loop with the normal SSA form, the first use of k
611 is not well-behaved, while the second one is an induction variable with
614 If LOOP is non-null, only rewrite uses that have defs in LOOP. Otherwise,
615 if CHANGED_BBS is not NULL, we look for uses outside loops only in the
616 basic blocks in this set.
618 USE_FLAGS allows us to specify whether we want virtual, non-virtual or
619 both variables rewritten.
621 UPDATE_FLAG is used in the call to update_ssa. See
622 TODO_update_ssa* for documentation. */
625 rewrite_into_loop_closed_ssa_1 (bitmap changed_bbs
, unsigned update_flag
,
626 int use_flags
, class loop
*loop
)
629 bitmap names_to_rename
;
631 loops_state_set (LOOP_CLOSED_SSA
);
632 if (number_of_loops (cfun
) <= 1)
635 /* If the pass has caused the SSA form to be out-of-date, update it
637 if (update_flag
!= 0)
638 update_ssa (update_flag
);
639 else if (flag_checking
)
640 verify_ssa (true, true);
642 bitmap_obstack_initialize (&loop_renamer_obstack
);
644 names_to_rename
= BITMAP_ALLOC (&loop_renamer_obstack
);
646 /* Uses of names to rename. We don't have to initialize this array,
647 because we know that we will only have entries for the SSA names
648 in NAMES_TO_RENAME. */
649 use_blocks
= XNEWVEC (bitmap
, num_ssa_names
);
653 gcc_assert (changed_bbs
== NULL
);
654 find_uses_to_rename_in_loop (loop
, use_blocks
, names_to_rename
,
659 gcc_assert (loop
== NULL
);
660 find_uses_to_rename (changed_bbs
, use_blocks
, names_to_rename
, use_flags
);
663 if (!bitmap_empty_p (names_to_rename
))
665 /* An array of bitmaps where LOOP_EXITS[I] is the set of basic blocks
666 that are the destination of an edge exiting loop number I. */
667 bitmap
*loop_exits
= XNEWVEC (bitmap
, number_of_loops (cfun
));
668 get_loops_exits (loop_exits
);
670 /* Add the PHI nodes on exits of the loops for the names we need to
672 add_exit_phis (names_to_rename
, use_blocks
, loop_exits
);
676 /* Fix up all the names found to be used outside their original
678 update_ssa (TODO_update_ssa
);
681 bitmap_obstack_release (&loop_renamer_obstack
);
685 /* Rewrites the non-virtual defs and uses into a loop closed ssa form. If
686 CHANGED_BBS is not NULL, we look for uses outside loops only in the basic
687 blocks in this set. UPDATE_FLAG is used in the call to update_ssa. See
688 TODO_update_ssa* for documentation. */
691 rewrite_into_loop_closed_ssa (bitmap changed_bbs
, unsigned update_flag
)
693 rewrite_into_loop_closed_ssa_1 (changed_bbs
, update_flag
, SSA_OP_USE
, NULL
);
696 /* Rewrites virtual defs and uses with def in LOOP into loop closed ssa
700 rewrite_virtuals_into_loop_closed_ssa (class loop
*loop
)
702 rewrite_into_loop_closed_ssa_1 (NULL
, 0, SSA_OP_VIRTUAL_USES
, loop
);
705 /* Check invariants of the loop closed ssa form for the def in DEF_BB. */
708 check_loop_closed_ssa_def (basic_block def_bb
, tree def
)
711 imm_use_iterator iterator
;
712 FOR_EACH_IMM_USE_FAST (use_p
, iterator
, def
)
714 if (is_gimple_debug (USE_STMT (use_p
)))
717 basic_block use_bb
= gimple_bb (USE_STMT (use_p
));
718 if (is_a
<gphi
*> (USE_STMT (use_p
)))
719 use_bb
= EDGE_PRED (use_bb
, PHI_ARG_INDEX_FROM_USE (use_p
))->src
;
721 gcc_assert (flow_bb_inside_loop_p (def_bb
->loop_father
, use_bb
));
725 /* Checks invariants of loop closed ssa form in BB. */
728 check_loop_closed_ssa_bb (basic_block bb
)
730 for (gphi_iterator bsi
= gsi_start_phis (bb
); !gsi_end_p (bsi
);
733 gphi
*phi
= bsi
.phi ();
735 if (!virtual_operand_p (PHI_RESULT (phi
)))
736 check_loop_closed_ssa_def (bb
, PHI_RESULT (phi
));
739 for (gimple_stmt_iterator bsi
= gsi_start_nondebug_bb (bb
); !gsi_end_p (bsi
);
740 gsi_next_nondebug (&bsi
))
744 gimple
*stmt
= gsi_stmt (bsi
);
746 FOR_EACH_SSA_TREE_OPERAND (var
, stmt
, iter
, SSA_OP_DEF
)
747 check_loop_closed_ssa_def (bb
, var
);
751 /* Checks that invariants of the loop closed ssa form are preserved.
752 Call verify_ssa when VERIFY_SSA_P is true. Note all loops are checked
753 if LOOP is NULL, otherwise, only LOOP is checked. */
756 verify_loop_closed_ssa (bool verify_ssa_p
, class loop
*loop
)
758 if (number_of_loops (cfun
) <= 1)
762 verify_ssa (false, true);
764 timevar_push (TV_VERIFY_LOOP_CLOSED
);
770 FOR_EACH_BB_FN (bb
, cfun
)
771 if (bb
->loop_father
&& bb
->loop_father
->num
> 0)
772 check_loop_closed_ssa_bb (bb
);
776 basic_block
*bbs
= get_loop_body (loop
);
778 for (unsigned i
= 0; i
< loop
->num_nodes
; ++i
)
779 check_loop_closed_ssa_bb (bbs
[i
]);
784 timevar_pop (TV_VERIFY_LOOP_CLOSED
);
787 /* Split loop exit edge EXIT. The things are a bit complicated by a need to
788 preserve the loop closed ssa form. If COPY_CONSTANTS_P is true then
789 forwarder PHIs are also created for constant arguments.
790 The newly created block is returned. */
793 split_loop_exit_edge (edge exit
, bool copy_constants_p
)
795 basic_block dest
= exit
->dest
;
796 basic_block bb
= split_edge (exit
);
803 for (psi
= gsi_start_phis (dest
); !gsi_end_p (psi
); gsi_next (&psi
))
806 op_p
= PHI_ARG_DEF_PTR_FROM_EDGE (phi
, single_succ_edge (bb
));
807 locus
= gimple_phi_arg_location_from_edge (phi
, single_succ_edge (bb
));
809 name
= USE_FROM_PTR (op_p
);
811 /* If the argument of the PHI node is a constant, we do not need
812 to keep it inside loop. */
813 if (TREE_CODE (name
) != SSA_NAME
814 && !copy_constants_p
)
817 /* Otherwise create an auxiliary phi node that will copy the value
818 of the SSA name out of the loop. */
819 new_name
= duplicate_ssa_name (PHI_RESULT (phi
), NULL
);
820 new_phi
= create_phi_node (new_name
, bb
);
821 add_phi_arg (new_phi
, name
, exit
, locus
);
822 SET_USE (op_p
, new_name
);
828 /* Returns the basic block in that statements should be emitted for induction
829 variables incremented at the end of the LOOP. */
832 ip_end_pos (class loop
*loop
)
837 /* Returns the basic block in that statements should be emitted for induction
838 variables incremented just before exit condition of a LOOP. */
841 ip_normal_pos (class loop
*loop
)
847 if (!single_pred_p (loop
->latch
))
850 bb
= single_pred (loop
->latch
);
851 last
= last_stmt (bb
);
853 || gimple_code (last
) != GIMPLE_COND
)
856 exit
= EDGE_SUCC (bb
, 0);
857 if (exit
->dest
== loop
->latch
)
858 exit
= EDGE_SUCC (bb
, 1);
860 if (flow_bb_inside_loop_p (loop
, exit
->dest
))
866 /* Stores the standard position for induction variable increment in LOOP
867 (just before the exit condition if it is available and latch block is empty,
868 end of the latch block otherwise) to BSI. INSERT_AFTER is set to true if
869 the increment should be inserted after *BSI. */
872 standard_iv_increment_position (class loop
*loop
, gimple_stmt_iterator
*bsi
,
875 basic_block bb
= ip_normal_pos (loop
), latch
= ip_end_pos (loop
);
876 gimple
*last
= last_stmt (latch
);
879 || (last
&& gimple_code (last
) != GIMPLE_LABEL
))
881 *bsi
= gsi_last_bb (latch
);
882 *insert_after
= true;
886 *bsi
= gsi_last_bb (bb
);
887 *insert_after
= false;
891 /* Copies phi node arguments for duplicated blocks. The index of the first
892 duplicated block is FIRST_NEW_BLOCK. */
895 copy_phi_node_args (unsigned first_new_block
)
899 for (i
= first_new_block
; i
< (unsigned) last_basic_block_for_fn (cfun
); i
++)
900 BASIC_BLOCK_FOR_FN (cfun
, i
)->flags
|= BB_DUPLICATED
;
902 for (i
= first_new_block
; i
< (unsigned) last_basic_block_for_fn (cfun
); i
++)
903 add_phi_args_after_copy_bb (BASIC_BLOCK_FOR_FN (cfun
, i
));
905 for (i
= first_new_block
; i
< (unsigned) last_basic_block_for_fn (cfun
); i
++)
906 BASIC_BLOCK_FOR_FN (cfun
, i
)->flags
&= ~BB_DUPLICATED
;
910 /* The same as cfgloopmanip.c:duplicate_loop_to_header_edge, but also
911 updates the PHI nodes at start of the copied region. In order to
912 achieve this, only loops whose exits all lead to the same location
915 Notice that we do not completely update the SSA web after
916 duplication. The caller is responsible for calling update_ssa
917 after the loop has been duplicated. */
920 gimple_duplicate_loop_to_header_edge (class loop
*loop
, edge e
,
921 unsigned int ndupl
, sbitmap wont_exit
,
922 edge orig
, vec
<edge
> *to_remove
,
925 unsigned first_new_block
;
927 if (!loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES
))
929 if (!loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS
))
932 first_new_block
= last_basic_block_for_fn (cfun
);
933 if (!duplicate_loop_to_header_edge (loop
, e
, ndupl
, wont_exit
,
934 orig
, to_remove
, flags
))
937 /* Readd the removed phi args for e. */
938 flush_pending_stmts (e
);
940 /* Copy the phi node arguments. */
941 copy_phi_node_args (first_new_block
);
948 /* Returns true if we can unroll LOOP FACTOR times. Number
949 of iterations of the loop is returned in NITER. */
952 can_unroll_loop_p (class loop
*loop
, unsigned factor
,
953 class tree_niter_desc
*niter
)
957 /* Check whether unrolling is possible. We only want to unroll loops
958 for that we are able to determine number of iterations. We also
959 want to split the extra iterations of the loop from its end,
960 therefore we require that the loop has precisely one
963 exit
= single_dom_exit (loop
);
967 if (!number_of_iterations_exit (loop
, exit
, niter
, false)
968 || niter
->cmp
== ERROR_MARK
969 /* Scalar evolutions analysis might have copy propagated
970 the abnormal ssa names into these expressions, hence
971 emitting the computations based on them during loop
972 unrolling might create overlapping life ranges for
973 them, and failures in out-of-ssa. */
974 || contains_abnormal_ssa_name_p (niter
->may_be_zero
)
975 || contains_abnormal_ssa_name_p (niter
->control
.base
)
976 || contains_abnormal_ssa_name_p (niter
->control
.step
)
977 || contains_abnormal_ssa_name_p (niter
->bound
))
980 /* And of course, we must be able to duplicate the loop. */
981 if (!can_duplicate_loop_p (loop
))
984 /* The final loop should be small enough. */
985 if (tree_num_loop_insns (loop
, &eni_size_weights
) * factor
986 > (unsigned) param_max_unrolled_insns
)
992 /* Determines the conditions that control execution of LOOP unrolled FACTOR
993 times. DESC is number of iterations of LOOP. ENTER_COND is set to
994 condition that must be true if the main loop can be entered.
995 EXIT_BASE, EXIT_STEP, EXIT_CMP and EXIT_BOUND are set to values describing
996 how the exit from the unrolled loop should be controlled. */
999 determine_exit_conditions (class loop
*loop
, class tree_niter_desc
*desc
,
1000 unsigned factor
, tree
*enter_cond
,
1001 tree
*exit_base
, tree
*exit_step
,
1002 enum tree_code
*exit_cmp
, tree
*exit_bound
)
1005 tree base
= desc
->control
.base
;
1006 tree step
= desc
->control
.step
;
1007 tree bound
= desc
->bound
;
1008 tree type
= TREE_TYPE (step
);
1009 tree bigstep
, delta
;
1010 tree min
= lower_bound_in_type (type
, type
);
1011 tree max
= upper_bound_in_type (type
, type
);
1012 enum tree_code cmp
= desc
->cmp
;
1013 tree cond
= boolean_true_node
, assum
;
1015 /* For pointers, do the arithmetics in the type of step. */
1016 base
= fold_convert (type
, base
);
1017 bound
= fold_convert (type
, bound
);
1019 *enter_cond
= boolean_false_node
;
1020 *exit_base
= NULL_TREE
;
1021 *exit_step
= NULL_TREE
;
1022 *exit_cmp
= ERROR_MARK
;
1023 *exit_bound
= NULL_TREE
;
1024 gcc_assert (cmp
!= ERROR_MARK
);
1026 /* We only need to be correct when we answer question
1027 "Do at least FACTOR more iterations remain?" in the unrolled loop.
1028 Thus, transforming BASE + STEP * i <> BOUND to
1029 BASE + STEP * i < BOUND is ok. */
1032 if (tree_int_cst_sign_bit (step
))
1037 else if (cmp
== LT_EXPR
)
1039 gcc_assert (!tree_int_cst_sign_bit (step
));
1041 else if (cmp
== GT_EXPR
)
1043 gcc_assert (tree_int_cst_sign_bit (step
));
1048 /* The main body of the loop may be entered iff:
1050 1) desc->may_be_zero is false.
1051 2) it is possible to check that there are at least FACTOR iterations
1052 of the loop, i.e., BOUND - step * FACTOR does not overflow.
1053 3) # of iterations is at least FACTOR */
1055 if (!integer_zerop (desc
->may_be_zero
))
1056 cond
= fold_build2 (TRUTH_AND_EXPR
, boolean_type_node
,
1057 invert_truthvalue (desc
->may_be_zero
),
1060 bigstep
= fold_build2 (MULT_EXPR
, type
, step
,
1061 build_int_cst_type (type
, factor
));
1062 delta
= fold_build2 (MINUS_EXPR
, type
, bigstep
, step
);
1064 assum
= fold_build2 (GE_EXPR
, boolean_type_node
,
1066 fold_build2 (PLUS_EXPR
, type
, min
, delta
));
1068 assum
= fold_build2 (LE_EXPR
, boolean_type_node
,
1070 fold_build2 (PLUS_EXPR
, type
, max
, delta
));
1071 cond
= fold_build2 (TRUTH_AND_EXPR
, boolean_type_node
, assum
, cond
);
1073 bound
= fold_build2 (MINUS_EXPR
, type
, bound
, delta
);
1074 assum
= fold_build2 (cmp
, boolean_type_node
, base
, bound
);
1075 cond
= fold_build2 (TRUTH_AND_EXPR
, boolean_type_node
, assum
, cond
);
1077 cond
= force_gimple_operand (unshare_expr (cond
), &stmts
, false, NULL_TREE
);
1079 gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop
), stmts
);
1080 /* cond now may be a gimple comparison, which would be OK, but also any
1081 other gimple rhs (say a && b). In this case we need to force it to
1083 if (!is_gimple_condexpr (cond
))
1085 cond
= force_gimple_operand (cond
, &stmts
, true, NULL_TREE
);
1087 gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop
), stmts
);
1091 base
= force_gimple_operand (unshare_expr (base
), &stmts
, true, NULL_TREE
);
1093 gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop
), stmts
);
1094 bound
= force_gimple_operand (unshare_expr (bound
), &stmts
, true, NULL_TREE
);
1096 gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop
), stmts
);
1099 *exit_step
= bigstep
;
1101 *exit_bound
= bound
;
1104 /* Scales the frequencies of all basic blocks in LOOP that are strictly
1105 dominated by BB by NUM/DEN. */
1108 scale_dominated_blocks_in_loop (class loop
*loop
, basic_block bb
,
1109 profile_count num
, profile_count den
)
1113 if (!den
.nonzero_p () && !(num
== profile_count::zero ()))
1116 for (son
= first_dom_son (CDI_DOMINATORS
, bb
);
1118 son
= next_dom_son (CDI_DOMINATORS
, son
))
1120 if (!flow_bb_inside_loop_p (loop
, son
))
1122 scale_bbs_frequencies_profile_count (&son
, 1, num
, den
);
1123 scale_dominated_blocks_in_loop (loop
, son
, num
, den
);
1127 /* Return estimated niter for LOOP after unrolling by FACTOR times. */
1130 niter_for_unrolled_loop (class loop
*loop
, unsigned factor
)
1132 gcc_assert (factor
!= 0);
1133 bool profile_p
= false;
1134 gcov_type est_niter
= expected_loop_iterations_unbounded (loop
, &profile_p
);
1135 /* Note that this is really CEIL (est_niter + 1, factor) - 1, where the
1136 "+ 1" converts latch iterations to loop iterations and the "- 1"
1138 gcov_type new_est_niter
= est_niter
/ factor
;
1140 if (est_niter
== -1)
1143 /* Without profile feedback, loops for which we do not know a better estimate
1144 are assumed to roll 10 times. When we unroll such loop, it appears to
1145 roll too little, and it may even seem to be cold. To avoid this, we
1146 ensure that the created loop appears to roll at least 5 times (but at
1147 most as many times as before unrolling). Don't do adjustment if profile
1148 feedback is present. */
1149 if (new_est_niter
< 5 && !profile_p
)
1152 new_est_niter
= est_niter
;
1157 if (loop
->any_upper_bound
)
1159 /* As above, this is really CEIL (upper_bound + 1, factor) - 1. */
1160 widest_int bound
= wi::udiv_floor (loop
->nb_iterations_upper_bound
,
1162 if (wi::ltu_p (bound
, new_est_niter
))
1163 new_est_niter
= bound
.to_uhwi ();
1166 return new_est_niter
;
1169 /* Unroll LOOP FACTOR times. DESC describes number of iterations of LOOP.
1170 EXIT is the exit of the loop to that DESC corresponds.
1172 If N is number of iterations of the loop and MAY_BE_ZERO is the condition
1173 under that loop exits in the first iteration even if N != 0,
1177 x = phi (init, next);
1185 becomes (with possibly the exit conditions formulated a bit differently,
1186 avoiding the need to create a new iv):
1188 if (MAY_BE_ZERO || N < FACTOR)
1193 x = phi (init, next);
1204 } while (N >= FACTOR);
1207 init' = phi (init, x);
1211 x = phi (init', next);
1219 Before the loop is unrolled, TRANSFORM is called for it (only for the
1220 unrolled loop, but not for its versioned copy). DATA is passed to
1223 /* Probability in % that the unrolled loop is entered. Just a guess. */
1224 #define PROB_UNROLLED_LOOP_ENTERED 90
1227 tree_transform_and_unroll_loop (class loop
*loop
, unsigned factor
,
1228 edge exit
, class tree_niter_desc
*desc
,
1229 transform_callback transform
,
1233 tree ctr_before
, ctr_after
;
1234 tree enter_main_cond
, exit_base
, exit_step
, exit_bound
;
1235 enum tree_code exit_cmp
;
1236 gphi
*phi_old_loop
, *phi_new_loop
, *phi_rest
;
1237 gphi_iterator psi_old_loop
, psi_new_loop
;
1238 tree init
, next
, new_init
;
1239 class loop
*new_loop
;
1240 basic_block rest
, exit_bb
;
1241 edge old_entry
, new_entry
, old_latch
, precond_edge
, new_exit
;
1242 edge new_nonexit
, e
;
1243 gimple_stmt_iterator bsi
;
1247 profile_probability prob
, prob_entry
, scale_unrolled
;
1248 profile_count freq_e
, freq_h
;
1249 gcov_type new_est_niter
= niter_for_unrolled_loop (loop
, factor
);
1250 unsigned irr
= loop_preheader_edge (loop
)->flags
& EDGE_IRREDUCIBLE_LOOP
;
1251 auto_vec
<edge
> to_remove
;
1253 determine_exit_conditions (loop
, desc
, factor
,
1254 &enter_main_cond
, &exit_base
, &exit_step
,
1255 &exit_cmp
, &exit_bound
);
1257 /* Let us assume that the unrolled loop is quite likely to be entered. */
1258 if (integer_nonzerop (enter_main_cond
))
1259 prob_entry
= profile_probability::always ();
1261 prob_entry
= profile_probability::guessed_always ()
1262 .apply_scale (PROB_UNROLLED_LOOP_ENTERED
, 100);
1264 /* The values for scales should keep profile consistent, and somewhat close
1267 TODO: The current value of SCALE_REST makes it appear that the loop that
1268 is created by splitting the remaining iterations of the unrolled loop is
1269 executed the same number of times as the original loop, and with the same
1270 frequencies, which is obviously wrong. This does not appear to cause
1271 problems, so we do not bother with fixing it for now. To make the profile
1272 correct, we would need to change the probability of the exit edge of the
1273 loop, and recompute the distribution of frequencies in its body because
1274 of this change (scale the frequencies of blocks before and after the exit
1275 by appropriate factors). */
1276 scale_unrolled
= prob_entry
;
1278 new_loop
= loop_version (loop
, enter_main_cond
, NULL
, prob_entry
,
1279 prob_entry
.invert (), scale_unrolled
,
1280 profile_probability::guessed_always (),
1282 gcc_assert (new_loop
!= NULL
);
1283 update_ssa (TODO_update_ssa
);
1285 /* Prepare the cfg and update the phi nodes. Move the loop exit to the
1286 loop latch (and make its condition dummy, for the moment). */
1287 rest
= loop_preheader_edge (new_loop
)->src
;
1288 precond_edge
= single_pred_edge (rest
);
1289 split_edge (loop_latch_edge (loop
));
1290 exit_bb
= single_pred (loop
->latch
);
1292 /* Since the exit edge will be removed, the frequency of all the blocks
1293 in the loop that are dominated by it must be scaled by
1294 1 / (1 - exit->probability). */
1295 if (exit
->probability
.initialized_p ())
1296 scale_dominated_blocks_in_loop (loop
, exit
->src
,
1297 /* We are scaling up here so probability
1299 loop
->header
->count
,
1301 - loop
->header
->count
.apply_probability
1302 (exit
->probability
));
1304 bsi
= gsi_last_bb (exit_bb
);
1305 exit_if
= gimple_build_cond (EQ_EXPR
, integer_zero_node
,
1307 NULL_TREE
, NULL_TREE
);
1309 gsi_insert_after (&bsi
, exit_if
, GSI_NEW_STMT
);
1310 new_exit
= make_edge (exit_bb
, rest
, EDGE_FALSE_VALUE
| irr
);
1311 rescan_loop_exit (new_exit
, true, false);
1313 /* Set the probability of new exit to the same of the old one. Fix
1314 the frequency of the latch block, by scaling it back by
1315 1 - exit->probability. */
1316 new_exit
->probability
= exit
->probability
;
1317 new_nonexit
= single_pred_edge (loop
->latch
);
1318 new_nonexit
->probability
= exit
->probability
.invert ();
1319 new_nonexit
->flags
= EDGE_TRUE_VALUE
;
1320 if (new_nonexit
->probability
.initialized_p ())
1321 scale_bbs_frequencies (&loop
->latch
, 1, new_nonexit
->probability
);
1323 old_entry
= loop_preheader_edge (loop
);
1324 new_entry
= loop_preheader_edge (new_loop
);
1325 old_latch
= loop_latch_edge (loop
);
1326 for (psi_old_loop
= gsi_start_phis (loop
->header
),
1327 psi_new_loop
= gsi_start_phis (new_loop
->header
);
1328 !gsi_end_p (psi_old_loop
);
1329 gsi_next (&psi_old_loop
), gsi_next (&psi_new_loop
))
1331 phi_old_loop
= psi_old_loop
.phi ();
1332 phi_new_loop
= psi_new_loop
.phi ();
1334 init
= PHI_ARG_DEF_FROM_EDGE (phi_old_loop
, old_entry
);
1335 op
= PHI_ARG_DEF_PTR_FROM_EDGE (phi_new_loop
, new_entry
);
1336 gcc_assert (operand_equal_for_phi_arg_p (init
, USE_FROM_PTR (op
)));
1337 next
= PHI_ARG_DEF_FROM_EDGE (phi_old_loop
, old_latch
);
1339 /* Prefer using original variable as a base for the new ssa name.
1340 This is necessary for virtual ops, and useful in order to avoid
1341 losing debug info for real ops. */
1342 if (TREE_CODE (next
) == SSA_NAME
1343 && useless_type_conversion_p (TREE_TYPE (next
),
1345 new_init
= copy_ssa_name (next
);
1346 else if (TREE_CODE (init
) == SSA_NAME
1347 && useless_type_conversion_p (TREE_TYPE (init
),
1349 new_init
= copy_ssa_name (init
);
1350 else if (useless_type_conversion_p (TREE_TYPE (next
), TREE_TYPE (init
)))
1351 new_init
= make_temp_ssa_name (TREE_TYPE (next
), NULL
, "unrinittmp");
1353 new_init
= make_temp_ssa_name (TREE_TYPE (init
), NULL
, "unrinittmp");
1355 phi_rest
= create_phi_node (new_init
, rest
);
1357 add_phi_arg (phi_rest
, init
, precond_edge
, UNKNOWN_LOCATION
);
1358 add_phi_arg (phi_rest
, next
, new_exit
, UNKNOWN_LOCATION
);
1359 SET_USE (op
, new_init
);
1364 /* Transform the loop. */
1366 (*transform
) (loop
, data
);
1368 /* Unroll the loop and remove the exits in all iterations except for the
1370 auto_sbitmap
wont_exit (factor
);
1371 bitmap_ones (wont_exit
);
1372 bitmap_clear_bit (wont_exit
, factor
- 1);
1374 ok
= gimple_duplicate_loop_to_header_edge
1375 (loop
, loop_latch_edge (loop
), factor
- 1,
1376 wont_exit
, new_exit
, &to_remove
, DLTHE_FLAG_UPDATE_FREQ
);
1379 FOR_EACH_VEC_ELT (to_remove
, i
, e
)
1381 ok
= remove_path (e
);
1384 update_ssa (TODO_update_ssa
);
1386 /* Ensure that the frequencies in the loop match the new estimated
1387 number of iterations, and change the probability of the new
1390 freq_h
= loop
->header
->count
;
1391 freq_e
= (loop_preheader_edge (loop
))->count ();
1392 if (freq_h
.nonzero_p ())
1394 /* Avoid dropping loop body profile counter to 0 because of zero count
1395 in loop's preheader. */
1396 if (freq_h
.nonzero_p () && !(freq_e
== profile_count::zero ()))
1397 freq_e
= freq_e
.force_nonzero ();
1398 scale_loop_frequencies (loop
, freq_e
.probability_in (freq_h
));
1401 exit_bb
= single_pred (loop
->latch
);
1402 new_exit
= find_edge (exit_bb
, rest
);
1403 new_exit
->probability
= profile_probability::always ()
1404 .apply_scale (1, new_est_niter
+ 1);
1406 rest
->count
+= new_exit
->count ();
1408 new_nonexit
= single_pred_edge (loop
->latch
);
1409 prob
= new_nonexit
->probability
;
1410 new_nonexit
->probability
= new_exit
->probability
.invert ();
1411 prob
= new_nonexit
->probability
/ prob
;
1412 if (prob
.initialized_p ())
1413 scale_bbs_frequencies (&loop
->latch
, 1, prob
);
1415 /* Finally create the new counter for number of iterations and add the new
1416 exit instruction. */
1417 bsi
= gsi_last_nondebug_bb (exit_bb
);
1418 exit_if
= as_a
<gcond
*> (gsi_stmt (bsi
));
1419 create_iv (exit_base
, exit_step
, NULL_TREE
, loop
,
1420 &bsi
, false, &ctr_before
, &ctr_after
);
1421 gimple_cond_set_code (exit_if
, exit_cmp
);
1422 gimple_cond_set_lhs (exit_if
, ctr_after
);
1423 gimple_cond_set_rhs (exit_if
, exit_bound
);
1424 update_stmt (exit_if
);
1426 checking_verify_flow_info ();
1427 checking_verify_loop_structure ();
1428 checking_verify_loop_closed_ssa (true, loop
);
1429 checking_verify_loop_closed_ssa (true, new_loop
);
1432 /* Wrapper over tree_transform_and_unroll_loop for case we do not
1433 want to transform the loop before unrolling. The meaning
1434 of the arguments is the same as for tree_transform_and_unroll_loop. */
1437 tree_unroll_loop (class loop
*loop
, unsigned factor
,
1438 edge exit
, class tree_niter_desc
*desc
)
1440 tree_transform_and_unroll_loop (loop
, factor
, exit
, desc
,
1444 /* Rewrite the phi node at position PSI in function of the main
1445 induction variable MAIN_IV and insert the generated code at GSI. */
1448 rewrite_phi_with_iv (loop_p loop
,
1450 gimple_stmt_iterator
*gsi
,
1455 gphi
*phi
= psi
->phi ();
1456 tree atype
, mtype
, val
, res
= PHI_RESULT (phi
);
1458 if (virtual_operand_p (res
) || res
== main_iv
)
1464 if (!simple_iv (loop
, loop
, res
, &iv
, true))
1470 remove_phi_node (psi
, false);
1472 atype
= TREE_TYPE (res
);
1473 mtype
= POINTER_TYPE_P (atype
) ? sizetype
: atype
;
1474 val
= fold_build2 (MULT_EXPR
, mtype
, unshare_expr (iv
.step
),
1475 fold_convert (mtype
, main_iv
));
1476 val
= fold_build2 (POINTER_TYPE_P (atype
)
1477 ? POINTER_PLUS_EXPR
: PLUS_EXPR
,
1478 atype
, unshare_expr (iv
.base
), val
);
1479 val
= force_gimple_operand_gsi (gsi
, val
, false, NULL_TREE
, true,
1481 stmt
= gimple_build_assign (res
, val
);
1482 gsi_insert_before (gsi
, stmt
, GSI_SAME_STMT
);
1485 /* Rewrite all the phi nodes of LOOP in function of the main induction
1486 variable MAIN_IV. */
1489 rewrite_all_phi_nodes_with_iv (loop_p loop
, tree main_iv
)
1492 basic_block
*bbs
= get_loop_body_in_dom_order (loop
);
1495 for (i
= 0; i
< loop
->num_nodes
; i
++)
1497 basic_block bb
= bbs
[i
];
1498 gimple_stmt_iterator gsi
= gsi_after_labels (bb
);
1500 if (bb
->loop_father
!= loop
)
1503 for (psi
= gsi_start_phis (bb
); !gsi_end_p (psi
); )
1504 rewrite_phi_with_iv (loop
, &psi
, &gsi
, main_iv
);
1510 /* Bases all the induction variables in LOOP on a single induction variable
1511 (with base 0 and step 1), whose final value is compared with *NIT. When the
1512 IV type precision has to be larger than *NIT type precision, *NIT is
1513 converted to the larger type, the conversion code is inserted before the
1514 loop, and *NIT is updated to the new definition. When BUMP_IN_LATCH is true,
1515 the induction variable is incremented in the loop latch, otherwise it is
1516 incremented in the loop header. Return the induction variable that was
1520 canonicalize_loop_ivs (class loop
*loop
, tree
*nit
, bool bump_in_latch
)
1522 unsigned precision
= TYPE_PRECISION (TREE_TYPE (*nit
));
1523 unsigned original_precision
= precision
;
1524 tree type
, var_before
;
1525 gimple_stmt_iterator gsi
;
1528 edge exit
= single_dom_exit (loop
);
1530 bool unsigned_p
= false;
1532 for (psi
= gsi_start_phis (loop
->header
);
1533 !gsi_end_p (psi
); gsi_next (&psi
))
1535 gphi
*phi
= psi
.phi ();
1536 tree res
= PHI_RESULT (phi
);
1539 type
= TREE_TYPE (res
);
1540 if (virtual_operand_p (res
)
1541 || (!INTEGRAL_TYPE_P (type
)
1542 && !POINTER_TYPE_P (type
))
1543 || TYPE_PRECISION (type
) < precision
)
1546 uns
= POINTER_TYPE_P (type
) | TYPE_UNSIGNED (type
);
1548 if (TYPE_PRECISION (type
) > precision
)
1553 precision
= TYPE_PRECISION (type
);
1556 scalar_int_mode mode
= smallest_int_mode_for_size (precision
);
1557 precision
= GET_MODE_PRECISION (mode
);
1558 type
= build_nonstandard_integer_type (precision
, unsigned_p
);
1560 if (original_precision
!= precision
1561 || TYPE_UNSIGNED (TREE_TYPE (*nit
)) != unsigned_p
)
1563 *nit
= fold_convert (type
, *nit
);
1564 *nit
= force_gimple_operand (*nit
, &stmts
, true, NULL_TREE
);
1566 gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop
), stmts
);
1570 gsi
= gsi_last_bb (loop
->latch
);
1572 gsi
= gsi_last_nondebug_bb (loop
->header
);
1573 create_iv (build_int_cst_type (type
, 0), build_int_cst (type
, 1), NULL_TREE
,
1574 loop
, &gsi
, bump_in_latch
, &var_before
, NULL
);
1576 rewrite_all_phi_nodes_with_iv (loop
, var_before
);
1578 stmt
= as_a
<gcond
*> (last_stmt (exit
->src
));
1579 /* Make the loop exit if the control condition is not satisfied. */
1580 if (exit
->flags
& EDGE_TRUE_VALUE
)
1584 extract_true_false_edges_from_block (exit
->src
, &te
, &fe
);
1585 te
->flags
= EDGE_FALSE_VALUE
;
1586 fe
->flags
= EDGE_TRUE_VALUE
;
1588 gimple_cond_set_code (stmt
, LT_EXPR
);
1589 gimple_cond_set_lhs (stmt
, var_before
);
1590 gimple_cond_set_rhs (stmt
, *nit
);