1 /* Rewrite a program in Normal form into SSA.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
3 Free Software Foundation, Inc.
4 Contributed by Diego Novillo <dnovillo@redhat.com>
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
29 #include "langhooks.h"
30 #include "basic-block.h"
32 #include "tree-pretty-print.h"
33 #include "gimple-pretty-print.h"
35 #include "tree-flow.h"
37 #include "tree-inline.h"
40 #include "tree-dump.h"
41 #include "tree-pass.h"
48 /* This file builds the SSA form for a function as described in:
49 R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. Zadeck. Efficiently
50 Computing Static Single Assignment Form and the Control Dependence
51 Graph. ACM Transactions on Programming Languages and Systems,
52 13(4):451-490, October 1991. */
54 /* Structure to map a variable VAR to the set of blocks that contain
55 definitions for VAR. */
61 /* Blocks that contain definitions of VAR. Bit I will be set if the
62 Ith block contains a definition of VAR. */
65 /* Blocks that contain a PHI node for VAR. */
68 /* Blocks where VAR is live-on-entry. Similar semantics as
74 /* Each entry in DEF_BLOCKS contains an element of type STRUCT
75 DEF_BLOCKS_D, mapping a variable VAR to a bitmap describing all the
76 basic blocks where VAR is defined (assigned a new value). It also
77 contains a bitmap of all the blocks where VAR is live-on-entry
78 (i.e., there is a use of VAR in block B without a preceding
79 definition in B). The live-on-entry information is used when
80 computing PHI pruning heuristics. */
81 static htab_t def_blocks
;
83 /* Stack of trees used to restore the global currdefs to its original
84 state after completing rewriting of a block and its dominator
85 children. Its elements have the following properties:
87 - An SSA_NAME (N) indicates that the current definition of the
88 underlying variable should be set to the given SSA_NAME. If the
89 symbol associated with the SSA_NAME is not a GIMPLE register, the
90 next slot in the stack must be a _DECL node (SYM). In this case,
91 the name N in the previous slot is the current reaching
94 - A _DECL node indicates that the underlying variable has no
97 - A NULL node at the top entry is used to mark the last slot
98 associated with the current block. */
99 static VEC(tree
,heap
) *block_defs_stack
;
102 /* Set of existing SSA names being replaced by update_ssa. */
103 static sbitmap old_ssa_names
;
105 /* Set of new SSA names being added by update_ssa. Note that both
106 NEW_SSA_NAMES and OLD_SSA_NAMES are dense bitmaps because most of
107 the operations done on them are presence tests. */
108 static sbitmap new_ssa_names
;
110 sbitmap interesting_blocks
;
112 /* Set of SSA names that have been marked to be released after they
113 were registered in the replacement table. They will be finally
114 released after we finish updating the SSA web. */
115 static bitmap names_to_release
;
117 static VEC(gimple_vec
, heap
) *phis_to_rewrite
;
119 /* The bitmap of non-NULL elements of PHIS_TO_REWRITE. */
120 static bitmap blocks_with_phis_to_rewrite
;
122 /* Growth factor for NEW_SSA_NAMES and OLD_SSA_NAMES. These sets need
123 to grow as the callers to register_new_name_mapping will typically
124 create new names on the fly. FIXME. Currently set to 1/3 to avoid
125 frequent reallocations but still need to find a reasonable growth
127 #define NAME_SETS_GROWTH_FACTOR (MAX (3, num_ssa_names / 3))
129 /* Tuple used to represent replacement mappings. */
137 /* NEW -> OLD_SET replacement table. If we are replacing several
138 existing SSA names O_1, O_2, ..., O_j with a new name N_i,
139 then REPL_TBL[N_i] = { O_1, O_2, ..., O_j }. */
140 static htab_t repl_tbl
;
142 /* The function the SSA updating data structures have been initialized for.
143 NULL if they need to be initialized by register_new_name_mapping. */
144 static struct function
*update_ssa_initialized_fn
= NULL
;
146 /* Statistics kept by update_ssa to use in the virtual mapping
147 heuristic. If the number of virtual mappings is beyond certain
148 threshold, the updater will switch from using the mappings into
149 renaming the virtual symbols from scratch. In some cases, the
150 large number of name mappings for virtual names causes significant
151 slowdowns in the PHI insertion code. */
152 struct update_ssa_stats_d
154 unsigned num_virtual_mappings
;
155 unsigned num_total_mappings
;
156 bitmap virtual_symbols
;
157 unsigned num_virtual_symbols
;
159 static struct update_ssa_stats_d update_ssa_stats
;
161 /* Global data to attach to the main dominator walk structure. */
162 struct mark_def_sites_global_data
164 /* This bitmap contains the variables which are set before they
165 are used in a basic block. */
170 /* Information stored for SSA names. */
173 /* The current reaching definition replacing this SSA name. */
176 /* This field indicates whether or not the variable may need PHI nodes.
177 See the enum's definition for more detailed information about the
179 ENUM_BITFIELD (need_phi_state
) need_phi_state
: 2;
181 /* Age of this record (so that info_for_ssa_name table can be cleared
182 quickly); if AGE < CURRENT_INFO_FOR_SSA_NAME_AGE, then the fields
183 are assumed to be null. */
187 /* The information associated with names. */
188 typedef struct ssa_name_info
*ssa_name_info_p
;
189 DEF_VEC_P (ssa_name_info_p
);
190 DEF_VEC_ALLOC_P (ssa_name_info_p
, heap
);
192 static VEC(ssa_name_info_p
, heap
) *info_for_ssa_name
;
193 static unsigned current_info_for_ssa_name_age
;
195 /* The set of blocks affected by update_ssa. */
196 static bitmap blocks_to_update
;
198 /* The main entry point to the SSA renamer (rewrite_blocks) may be
199 called several times to do different, but related, tasks.
200 Initially, we need it to rename the whole program into SSA form.
201 At other times, we may need it to only rename into SSA newly
202 exposed symbols. Finally, we can also call it to incrementally fix
203 an already built SSA web. */
205 /* Convert the whole function into SSA form. */
208 /* Incrementally update the SSA web by replacing existing SSA
209 names with new ones. See update_ssa for details. */
216 /* Prototypes for debugging functions. */
217 extern void dump_tree_ssa (FILE *);
218 extern void debug_tree_ssa (void);
219 extern void debug_def_blocks (void);
220 extern void dump_tree_ssa_stats (FILE *);
221 extern void debug_tree_ssa_stats (void);
222 extern void dump_update_ssa (FILE *);
223 extern void debug_update_ssa (void);
224 extern void dump_names_replaced_by (FILE *, tree
);
225 extern void debug_names_replaced_by (tree
);
226 extern void dump_def_blocks (FILE *);
227 extern void debug_def_blocks (void);
228 extern void dump_defs_stack (FILE *, int);
229 extern void debug_defs_stack (int);
230 extern void dump_currdefs (FILE *);
231 extern void debug_currdefs (void);
233 /* Return true if STMT needs to be rewritten. When renaming a subset
234 of the variables, not all statements will be processed. This is
235 decided in mark_def_sites. */
238 rewrite_uses_p (gimple stmt
)
240 return gimple_visited_p (stmt
);
244 /* Set the rewrite marker on STMT to the value given by REWRITE_P. */
247 set_rewrite_uses (gimple stmt
, bool rewrite_p
)
249 gimple_set_visited (stmt
, rewrite_p
);
253 /* Return true if the DEFs created by statement STMT should be
254 registered when marking new definition sites. This is slightly
255 different than rewrite_uses_p: it's used by update_ssa to
256 distinguish statements that need to have both uses and defs
257 processed from those that only need to have their defs processed.
258 Statements that define new SSA names only need to have their defs
259 registered, but they don't need to have their uses renamed. */
262 register_defs_p (gimple stmt
)
264 return gimple_plf (stmt
, GF_PLF_1
) != 0;
268 /* If REGISTER_DEFS_P is true, mark STMT to have its DEFs registered. */
271 set_register_defs (gimple stmt
, bool register_defs_p
)
273 gimple_set_plf (stmt
, GF_PLF_1
, register_defs_p
);
277 /* Get the information associated with NAME. */
279 static inline ssa_name_info_p
280 get_ssa_name_ann (tree name
)
282 unsigned ver
= SSA_NAME_VERSION (name
);
283 unsigned len
= VEC_length (ssa_name_info_p
, info_for_ssa_name
);
284 struct ssa_name_info
*info
;
288 unsigned new_len
= num_ssa_names
;
290 VEC_reserve (ssa_name_info_p
, heap
, info_for_ssa_name
, new_len
);
291 while (len
++ < new_len
)
293 struct ssa_name_info
*info
= XCNEW (struct ssa_name_info
);
294 info
->age
= current_info_for_ssa_name_age
;
295 VEC_quick_push (ssa_name_info_p
, info_for_ssa_name
, info
);
299 info
= VEC_index (ssa_name_info_p
, info_for_ssa_name
, ver
);
300 if (info
->age
< current_info_for_ssa_name_age
)
302 info
->need_phi_state
= NEED_PHI_STATE_UNKNOWN
;
303 info
->current_def
= NULL_TREE
;
304 info
->age
= current_info_for_ssa_name_age
;
311 /* Clears info for SSA names. */
314 clear_ssa_name_info (void)
316 current_info_for_ssa_name_age
++;
320 /* Get phi_state field for VAR. */
322 static inline enum need_phi_state
323 get_phi_state (tree var
)
325 if (TREE_CODE (var
) == SSA_NAME
)
326 return get_ssa_name_ann (var
)->need_phi_state
;
328 return var_ann (var
)->need_phi_state
;
332 /* Sets phi_state field for VAR to STATE. */
335 set_phi_state (tree var
, enum need_phi_state state
)
337 if (TREE_CODE (var
) == SSA_NAME
)
338 get_ssa_name_ann (var
)->need_phi_state
= state
;
340 var_ann (var
)->need_phi_state
= state
;
344 /* Return the current definition for VAR. */
347 get_current_def (tree var
)
349 if (TREE_CODE (var
) == SSA_NAME
)
350 return get_ssa_name_ann (var
)->current_def
;
352 return var_ann (var
)->current_def
;
356 /* Sets current definition of VAR to DEF. */
359 set_current_def (tree var
, tree def
)
361 if (TREE_CODE (var
) == SSA_NAME
)
362 get_ssa_name_ann (var
)->current_def
= def
;
364 var_ann (var
)->current_def
= def
;
368 /* Compute global livein information given the set of blocks where
369 an object is locally live at the start of the block (LIVEIN)
370 and the set of blocks where the object is defined (DEF_BLOCKS).
372 Note: This routine augments the existing local livein information
373 to include global livein (i.e., it modifies the underlying bitmap
377 compute_global_livein (bitmap livein ATTRIBUTE_UNUSED
, bitmap def_blocks ATTRIBUTE_UNUSED
)
379 basic_block bb
, *worklist
, *tos
;
384 = (basic_block
*) xmalloc (sizeof (basic_block
) * (last_basic_block
+ 1));
386 EXECUTE_IF_SET_IN_BITMAP (livein
, 0, i
, bi
)
387 *tos
++ = BASIC_BLOCK (i
);
389 /* Iterate until the worklist is empty. */
390 while (tos
!= worklist
)
395 /* Pull a block off the worklist. */
398 /* For each predecessor block. */
399 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
401 basic_block pred
= e
->src
;
402 int pred_index
= pred
->index
;
404 /* None of this is necessary for the entry block. */
405 if (pred
!= ENTRY_BLOCK_PTR
406 && ! bitmap_bit_p (livein
, pred_index
)
407 && ! bitmap_bit_p (def_blocks
, pred_index
))
410 bitmap_set_bit (livein
, pred_index
);
419 /* Cleans up the REWRITE_THIS_STMT and REGISTER_DEFS_IN_THIS_STMT flags for
420 all statements in basic block BB. */
423 initialize_flags_in_bb (basic_block bb
)
426 gimple_stmt_iterator gsi
;
428 for (gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
430 gimple phi
= gsi_stmt (gsi
);
431 set_rewrite_uses (phi
, false);
432 set_register_defs (phi
, false);
435 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
437 stmt
= gsi_stmt (gsi
);
439 /* We are going to use the operand cache API, such as
440 SET_USE, SET_DEF, and FOR_EACH_IMM_USE_FAST. The operand
441 cache for each statement should be up-to-date. */
442 gcc_assert (!gimple_modified_p (stmt
));
443 set_rewrite_uses (stmt
, false);
444 set_register_defs (stmt
, false);
448 /* Mark block BB as interesting for update_ssa. */
451 mark_block_for_update (basic_block bb
)
453 gcc_assert (blocks_to_update
!= NULL
);
454 if (!bitmap_set_bit (blocks_to_update
, bb
->index
))
456 initialize_flags_in_bb (bb
);
459 /* Return the set of blocks where variable VAR is defined and the blocks
460 where VAR is live on entry (livein). If no entry is found in
461 DEF_BLOCKS, a new one is created and returned. */
463 static inline struct def_blocks_d
*
464 get_def_blocks_for (tree var
)
466 struct def_blocks_d db
, *db_p
;
470 slot
= htab_find_slot (def_blocks
, (void *) &db
, INSERT
);
473 db_p
= XNEW (struct def_blocks_d
);
475 db_p
->def_blocks
= BITMAP_ALLOC (NULL
);
476 db_p
->phi_blocks
= BITMAP_ALLOC (NULL
);
477 db_p
->livein_blocks
= BITMAP_ALLOC (NULL
);
478 *slot
= (void *) db_p
;
481 db_p
= (struct def_blocks_d
*) *slot
;
487 /* Mark block BB as the definition site for variable VAR. PHI_P is true if
488 VAR is defined by a PHI node. */
491 set_def_block (tree var
, basic_block bb
, bool phi_p
)
493 struct def_blocks_d
*db_p
;
494 enum need_phi_state state
;
496 state
= get_phi_state (var
);
497 db_p
= get_def_blocks_for (var
);
499 /* Set the bit corresponding to the block where VAR is defined. */
500 bitmap_set_bit (db_p
->def_blocks
, bb
->index
);
502 bitmap_set_bit (db_p
->phi_blocks
, bb
->index
);
504 /* Keep track of whether or not we may need to insert PHI nodes.
506 If we are in the UNKNOWN state, then this is the first definition
507 of VAR. Additionally, we have not seen any uses of VAR yet, so
508 we do not need a PHI node for this variable at this time (i.e.,
509 transition to NEED_PHI_STATE_NO).
511 If we are in any other state, then we either have multiple definitions
512 of this variable occurring in different blocks or we saw a use of the
513 variable which was not dominated by the block containing the
514 definition(s). In this case we may need a PHI node, so enter
515 state NEED_PHI_STATE_MAYBE. */
516 if (state
== NEED_PHI_STATE_UNKNOWN
)
517 set_phi_state (var
, NEED_PHI_STATE_NO
);
519 set_phi_state (var
, NEED_PHI_STATE_MAYBE
);
523 /* Mark block BB as having VAR live at the entry to BB. */
526 set_livein_block (tree var
, basic_block bb
)
528 struct def_blocks_d
*db_p
;
529 enum need_phi_state state
= get_phi_state (var
);
531 db_p
= get_def_blocks_for (var
);
533 /* Set the bit corresponding to the block where VAR is live in. */
534 bitmap_set_bit (db_p
->livein_blocks
, bb
->index
);
536 /* Keep track of whether or not we may need to insert PHI nodes.
538 If we reach here in NEED_PHI_STATE_NO, see if this use is dominated
539 by the single block containing the definition(s) of this variable. If
540 it is, then we remain in NEED_PHI_STATE_NO, otherwise we transition to
541 NEED_PHI_STATE_MAYBE. */
542 if (state
== NEED_PHI_STATE_NO
)
544 int def_block_index
= bitmap_first_set_bit (db_p
->def_blocks
);
546 if (def_block_index
== -1
547 || ! dominated_by_p (CDI_DOMINATORS
, bb
,
548 BASIC_BLOCK (def_block_index
)))
549 set_phi_state (var
, NEED_PHI_STATE_MAYBE
);
552 set_phi_state (var
, NEED_PHI_STATE_MAYBE
);
556 /* Return true if symbol SYM is marked for renaming. */
559 symbol_marked_for_renaming (tree sym
)
561 return bitmap_bit_p (SYMS_TO_RENAME (cfun
), DECL_UID (sym
));
565 /* Return true if NAME is in OLD_SSA_NAMES. */
568 is_old_name (tree name
)
570 unsigned ver
= SSA_NAME_VERSION (name
);
573 return ver
< new_ssa_names
->n_bits
&& TEST_BIT (old_ssa_names
, ver
);
577 /* Return true if NAME is in NEW_SSA_NAMES. */
580 is_new_name (tree name
)
582 unsigned ver
= SSA_NAME_VERSION (name
);
585 return ver
< new_ssa_names
->n_bits
&& TEST_BIT (new_ssa_names
, ver
);
589 /* Hashing and equality functions for REPL_TBL. */
592 repl_map_hash (const void *p
)
594 return htab_hash_pointer ((const void *)((const struct repl_map_d
*)p
)->name
);
598 repl_map_eq (const void *p1
, const void *p2
)
600 return ((const struct repl_map_d
*)p1
)->name
601 == ((const struct repl_map_d
*)p2
)->name
;
605 repl_map_free (void *p
)
607 BITMAP_FREE (((struct repl_map_d
*)p
)->set
);
612 /* Return the names replaced by NEW_TREE (i.e., REPL_TBL[NEW_TREE].SET). */
615 names_replaced_by (tree new_tree
)
621 slot
= htab_find_slot (repl_tbl
, (void *) &m
, NO_INSERT
);
623 /* If N was not registered in the replacement table, return NULL. */
624 if (slot
== NULL
|| *slot
== NULL
)
627 return ((struct repl_map_d
*) *slot
)->set
;
631 /* Add OLD to REPL_TBL[NEW_TREE].SET. */
634 add_to_repl_tbl (tree new_tree
, tree old
)
636 struct repl_map_d m
, *mp
;
640 slot
= htab_find_slot (repl_tbl
, (void *) &m
, INSERT
);
643 mp
= XNEW (struct repl_map_d
);
645 mp
->set
= BITMAP_ALLOC (NULL
);
649 mp
= (struct repl_map_d
*) *slot
;
651 bitmap_set_bit (mp
->set
, SSA_NAME_VERSION (old
));
655 /* Add a new mapping NEW_TREE -> OLD REPL_TBL. Every entry N_i in REPL_TBL
656 represents the set of names O_1 ... O_j replaced by N_i. This is
657 used by update_ssa and its helpers to introduce new SSA names in an
658 already formed SSA web. */
661 add_new_name_mapping (tree new_tree
, tree old
)
663 timevar_push (TV_TREE_SSA_INCREMENTAL
);
665 /* OLD and NEW_TREE must be different SSA names for the same symbol. */
666 gcc_assert (new_tree
!= old
&& SSA_NAME_VAR (new_tree
) == SSA_NAME_VAR (old
));
668 /* If this mapping is for virtual names, we will need to update
669 virtual operands. If this is a mapping for .MEM, then we gather
670 the symbols associated with each name. */
671 if (!is_gimple_reg (new_tree
))
675 update_ssa_stats
.num_virtual_mappings
++;
676 update_ssa_stats
.num_virtual_symbols
++;
678 /* Keep counts of virtual mappings and symbols to use in the
679 virtual mapping heuristic. If we have large numbers of
680 virtual mappings for a relatively low number of symbols, it
681 will make more sense to rename the symbols from scratch.
682 Otherwise, the insertion of PHI nodes for each of the old
683 names in these mappings will be very slow. */
684 sym
= SSA_NAME_VAR (new_tree
);
685 bitmap_set_bit (update_ssa_stats
.virtual_symbols
, DECL_UID (sym
));
688 /* We may need to grow NEW_SSA_NAMES and OLD_SSA_NAMES because our
689 caller may have created new names since the set was created. */
690 if (new_ssa_names
->n_bits
<= num_ssa_names
- 1)
692 unsigned int new_sz
= num_ssa_names
+ NAME_SETS_GROWTH_FACTOR
;
693 new_ssa_names
= sbitmap_resize (new_ssa_names
, new_sz
, 0);
694 old_ssa_names
= sbitmap_resize (old_ssa_names
, new_sz
, 0);
697 /* Update the REPL_TBL table. */
698 add_to_repl_tbl (new_tree
, old
);
700 /* If OLD had already been registered as a new name, then all the
701 names that OLD replaces should also be replaced by NEW_TREE. */
702 if (is_new_name (old
))
703 bitmap_ior_into (names_replaced_by (new_tree
), names_replaced_by (old
));
705 /* Register NEW_TREE and OLD in NEW_SSA_NAMES and OLD_SSA_NAMES,
707 SET_BIT (new_ssa_names
, SSA_NAME_VERSION (new_tree
));
708 SET_BIT (old_ssa_names
, SSA_NAME_VERSION (old
));
710 /* Update mapping counter to use in the virtual mapping heuristic. */
711 update_ssa_stats
.num_total_mappings
++;
713 timevar_pop (TV_TREE_SSA_INCREMENTAL
);
717 /* Call back for walk_dominator_tree used to collect definition sites
718 for every variable in the function. For every statement S in block
721 1- Variables defined by S in the DEFS of S are marked in the bitmap
724 2- If S uses a variable VAR and there is no preceding kill of VAR,
725 then it is marked in the LIVEIN_BLOCKS bitmap associated with VAR.
727 This information is used to determine which variables are live
728 across block boundaries to reduce the number of PHI nodes
732 mark_def_sites (basic_block bb
, gimple stmt
, bitmap kills
)
738 /* Since this is the first time that we rewrite the program into SSA
739 form, force an operand scan on every statement. */
742 gcc_assert (blocks_to_update
== NULL
);
743 set_register_defs (stmt
, false);
744 set_rewrite_uses (stmt
, false);
746 if (is_gimple_debug (stmt
))
748 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
750 tree sym
= USE_FROM_PTR (use_p
);
751 gcc_assert (DECL_P (sym
));
752 set_rewrite_uses (stmt
, true);
754 if (rewrite_uses_p (stmt
))
755 SET_BIT (interesting_blocks
, bb
->index
);
759 /* If a variable is used before being set, then the variable is live
760 across a block boundary, so mark it live-on-entry to BB. */
761 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
763 tree sym
= USE_FROM_PTR (use_p
);
764 gcc_assert (DECL_P (sym
));
765 if (!bitmap_bit_p (kills
, DECL_UID (sym
)))
766 set_livein_block (sym
, bb
);
767 set_rewrite_uses (stmt
, true);
770 /* Now process the defs. Mark BB as the definition block and add
771 each def to the set of killed symbols. */
772 FOR_EACH_SSA_TREE_OPERAND (def
, stmt
, iter
, SSA_OP_DEF
)
774 gcc_assert (DECL_P (def
));
775 set_def_block (def
, bb
, false);
776 bitmap_set_bit (kills
, DECL_UID (def
));
777 set_register_defs (stmt
, true);
780 /* If we found the statement interesting then also mark the block BB
782 if (rewrite_uses_p (stmt
) || register_defs_p (stmt
))
783 SET_BIT (interesting_blocks
, bb
->index
);
786 /* Structure used by prune_unused_phi_nodes to record bounds of the intervals
787 in the dfs numbering of the dominance tree. */
791 /* Basic block whose index this entry corresponds to. */
794 /* The dfs number of this node. */
798 /* Compares two entries of type struct dom_dfsnum by dfs_num field. Callback
802 cmp_dfsnum (const void *a
, const void *b
)
804 const struct dom_dfsnum
*const da
= (const struct dom_dfsnum
*) a
;
805 const struct dom_dfsnum
*const db
= (const struct dom_dfsnum
*) b
;
807 return (int) da
->dfs_num
- (int) db
->dfs_num
;
810 /* Among the intervals starting at the N points specified in DEFS, find
811 the one that contains S, and return its bb_index. */
814 find_dfsnum_interval (struct dom_dfsnum
*defs
, unsigned n
, unsigned s
)
816 unsigned f
= 0, t
= n
, m
;
821 if (defs
[m
].dfs_num
<= s
)
827 return defs
[f
].bb_index
;
830 /* Clean bits from PHIS for phi nodes whose value cannot be used in USES.
831 KILLS is a bitmap of blocks where the value is defined before any use. */
834 prune_unused_phi_nodes (bitmap phis
, bitmap kills
, bitmap uses
)
836 VEC(int, heap
) *worklist
;
838 unsigned i
, b
, p
, u
, top
;
840 basic_block def_bb
, use_bb
;
844 struct dom_dfsnum
*defs
;
845 unsigned n_defs
, adef
;
847 if (bitmap_empty_p (uses
))
853 /* The phi must dominate a use, or an argument of a live phi. Also, we
854 do not create any phi nodes in def blocks, unless they are also livein. */
855 to_remove
= BITMAP_ALLOC (NULL
);
856 bitmap_and_compl (to_remove
, kills
, uses
);
857 bitmap_and_compl_into (phis
, to_remove
);
858 if (bitmap_empty_p (phis
))
860 BITMAP_FREE (to_remove
);
864 /* We want to remove the unnecessary phi nodes, but we do not want to compute
865 liveness information, as that may be linear in the size of CFG, and if
866 there are lot of different variables to rewrite, this may lead to quadratic
869 Instead, we basically emulate standard dce. We put all uses to worklist,
870 then for each of them find the nearest def that dominates them. If this
871 def is a phi node, we mark it live, and if it was not live before, we
872 add the predecessors of its basic block to the worklist.
874 To quickly locate the nearest def that dominates use, we use dfs numbering
875 of the dominance tree (that is already available in order to speed up
876 queries). For each def, we have the interval given by the dfs number on
877 entry to and on exit from the corresponding subtree in the dominance tree.
878 The nearest dominator for a given use is the smallest of these intervals
879 that contains entry and exit dfs numbers for the basic block with the use.
880 If we store the bounds for all the uses to an array and sort it, we can
881 locate the nearest dominating def in logarithmic time by binary search.*/
882 bitmap_ior (to_remove
, kills
, phis
);
883 n_defs
= bitmap_count_bits (to_remove
);
884 defs
= XNEWVEC (struct dom_dfsnum
, 2 * n_defs
+ 1);
885 defs
[0].bb_index
= 1;
888 EXECUTE_IF_SET_IN_BITMAP (to_remove
, 0, i
, bi
)
890 def_bb
= BASIC_BLOCK (i
);
891 defs
[adef
].bb_index
= i
;
892 defs
[adef
].dfs_num
= bb_dom_dfs_in (CDI_DOMINATORS
, def_bb
);
893 defs
[adef
+ 1].bb_index
= i
;
894 defs
[adef
+ 1].dfs_num
= bb_dom_dfs_out (CDI_DOMINATORS
, def_bb
);
897 BITMAP_FREE (to_remove
);
898 gcc_assert (adef
== 2 * n_defs
+ 1);
899 qsort (defs
, adef
, sizeof (struct dom_dfsnum
), cmp_dfsnum
);
900 gcc_assert (defs
[0].bb_index
== 1);
902 /* Now each DEFS entry contains the number of the basic block to that the
903 dfs number corresponds. Change them to the number of basic block that
904 corresponds to the interval following the dfs number. Also, for the
905 dfs_out numbers, increase the dfs number by one (so that it corresponds
906 to the start of the following interval, not to the end of the current
907 one). We use WORKLIST as a stack. */
908 worklist
= VEC_alloc (int, heap
, n_defs
+ 1);
909 VEC_quick_push (int, worklist
, 1);
912 for (i
= 1; i
< adef
; i
++)
914 b
= defs
[i
].bb_index
;
917 /* This is a closing element. Interval corresponding to the top
918 of the stack after removing it follows. */
919 VEC_pop (int, worklist
);
920 top
= VEC_index (int, worklist
, VEC_length (int, worklist
) - 1);
921 defs
[n_defs
].bb_index
= top
;
922 defs
[n_defs
].dfs_num
= defs
[i
].dfs_num
+ 1;
926 /* Opening element. Nothing to do, just push it to the stack and move
927 it to the correct position. */
928 defs
[n_defs
].bb_index
= defs
[i
].bb_index
;
929 defs
[n_defs
].dfs_num
= defs
[i
].dfs_num
;
930 VEC_quick_push (int, worklist
, b
);
934 /* If this interval starts at the same point as the previous one, cancel
936 if (defs
[n_defs
].dfs_num
== defs
[n_defs
- 1].dfs_num
)
937 defs
[n_defs
- 1].bb_index
= defs
[n_defs
].bb_index
;
941 VEC_pop (int, worklist
);
942 gcc_assert (VEC_empty (int, worklist
));
944 /* Now process the uses. */
945 live_phis
= BITMAP_ALLOC (NULL
);
946 EXECUTE_IF_SET_IN_BITMAP (uses
, 0, i
, bi
)
948 VEC_safe_push (int, heap
, worklist
, i
);
951 while (!VEC_empty (int, worklist
))
953 b
= VEC_pop (int, worklist
);
954 if (b
== ENTRY_BLOCK
)
957 /* If there is a phi node in USE_BB, it is made live. Otherwise,
958 find the def that dominates the immediate dominator of USE_BB
959 (the kill in USE_BB does not dominate the use). */
960 if (bitmap_bit_p (phis
, b
))
964 use_bb
= get_immediate_dominator (CDI_DOMINATORS
, BASIC_BLOCK (b
));
965 p
= find_dfsnum_interval (defs
, n_defs
,
966 bb_dom_dfs_in (CDI_DOMINATORS
, use_bb
));
967 if (!bitmap_bit_p (phis
, p
))
971 /* If the phi node is already live, there is nothing to do. */
972 if (!bitmap_set_bit (live_phis
, p
))
975 /* Add the new uses to the worklist. */
976 def_bb
= BASIC_BLOCK (p
);
977 FOR_EACH_EDGE (e
, ei
, def_bb
->preds
)
980 if (bitmap_bit_p (uses
, u
))
983 /* In case there is a kill directly in the use block, do not record
984 the use (this is also necessary for correctness, as we assume that
985 uses dominated by a def directly in their block have been filtered
987 if (bitmap_bit_p (kills
, u
))
990 bitmap_set_bit (uses
, u
);
991 VEC_safe_push (int, heap
, worklist
, u
);
995 VEC_free (int, heap
, worklist
);
996 bitmap_copy (phis
, live_phis
);
997 BITMAP_FREE (live_phis
);
1001 /* Return the set of blocks where variable VAR is defined and the blocks
1002 where VAR is live on entry (livein). Return NULL, if no entry is
1003 found in DEF_BLOCKS. */
1005 static inline struct def_blocks_d
*
1006 find_def_blocks_for (tree var
)
1008 struct def_blocks_d dm
;
1010 return (struct def_blocks_d
*) htab_find (def_blocks
, &dm
);
1014 /* Retrieve or create a default definition for symbol SYM. */
1017 get_default_def_for (tree sym
)
1019 tree ddef
= gimple_default_def (cfun
, sym
);
1021 if (ddef
== NULL_TREE
)
1023 ddef
= make_ssa_name (sym
, gimple_build_nop ());
1024 set_default_def (sym
, ddef
);
1031 /* Marks phi node PHI in basic block BB for rewrite. */
1034 mark_phi_for_rewrite (basic_block bb
, gimple phi
)
1037 unsigned i
, idx
= bb
->index
;
1039 if (rewrite_uses_p (phi
))
1042 set_rewrite_uses (phi
, true);
1044 if (!blocks_with_phis_to_rewrite
)
1047 bitmap_set_bit (blocks_with_phis_to_rewrite
, idx
);
1048 VEC_reserve (gimple_vec
, heap
, phis_to_rewrite
, last_basic_block
+ 1);
1049 for (i
= VEC_length (gimple_vec
, phis_to_rewrite
); i
<= idx
; i
++)
1050 VEC_quick_push (gimple_vec
, phis_to_rewrite
, NULL
);
1052 phis
= VEC_index (gimple_vec
, phis_to_rewrite
, idx
);
1054 phis
= VEC_alloc (gimple
, heap
, 10);
1056 VEC_safe_push (gimple
, heap
, phis
, phi
);
1057 VEC_replace (gimple_vec
, phis_to_rewrite
, idx
, phis
);
1060 /* Insert PHI nodes for variable VAR using the iterated dominance
1061 frontier given in PHI_INSERTION_POINTS. If UPDATE_P is true, this
1062 function assumes that the caller is incrementally updating the
1063 existing SSA form, in which case VAR may be an SSA name instead of
1066 PHI_INSERTION_POINTS is updated to reflect nodes that already had a
1067 PHI node for VAR. On exit, only the nodes that received a PHI node
1068 for VAR will be present in PHI_INSERTION_POINTS. */
1071 insert_phi_nodes_for (tree var
, bitmap phi_insertion_points
, bool update_p
)
1078 struct def_blocks_d
*def_map
;
1080 def_map
= find_def_blocks_for (var
);
1081 gcc_assert (def_map
);
1083 /* Remove the blocks where we already have PHI nodes for VAR. */
1084 bitmap_and_compl_into (phi_insertion_points
, def_map
->phi_blocks
);
1086 /* Remove obviously useless phi nodes. */
1087 prune_unused_phi_nodes (phi_insertion_points
, def_map
->def_blocks
,
1088 def_map
->livein_blocks
);
1090 /* And insert the PHI nodes. */
1091 EXECUTE_IF_SET_IN_BITMAP (phi_insertion_points
, 0, bb_index
, bi
)
1093 bb
= BASIC_BLOCK (bb_index
);
1095 mark_block_for_update (bb
);
1099 if (TREE_CODE (var
) == SSA_NAME
)
1101 /* If we are rewriting SSA names, create the LHS of the PHI
1102 node by duplicating VAR. This is useful in the case of
1103 pointers, to also duplicate pointer attributes (alias
1104 information, in particular). */
1108 gcc_assert (update_p
);
1109 phi
= create_phi_node (var
, bb
);
1111 new_lhs
= duplicate_ssa_name (var
, phi
);
1112 gimple_phi_set_result (phi
, new_lhs
);
1113 add_new_name_mapping (new_lhs
, var
);
1115 /* Add VAR to every argument slot of PHI. We need VAR in
1116 every argument so that rewrite_update_phi_arguments knows
1117 which name is this PHI node replacing. If VAR is a
1118 symbol marked for renaming, this is not necessary, the
1119 renamer will use the symbol on the LHS to get its
1120 reaching definition. */
1121 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
1122 add_phi_arg (phi
, var
, e
, UNKNOWN_LOCATION
);
1128 gcc_assert (DECL_P (var
));
1129 phi
= create_phi_node (var
, bb
);
1131 tracked_var
= target_for_debug_bind (var
);
1134 gimple note
= gimple_build_debug_bind (tracked_var
,
1137 gimple_stmt_iterator si
= gsi_after_labels (bb
);
1138 gsi_insert_before (&si
, note
, GSI_SAME_STMT
);
1142 /* Mark this PHI node as interesting for update_ssa. */
1143 set_register_defs (phi
, true);
1144 mark_phi_for_rewrite (bb
, phi
);
1149 /* Insert PHI nodes at the dominance frontier of blocks with variable
1150 definitions. DFS contains the dominance frontier information for
1154 insert_phi_nodes (bitmap_head
*dfs
)
1156 referenced_var_iterator rvi
;
1162 timevar_push (TV_TREE_INSERT_PHI_NODES
);
1164 /* Do two stages to avoid code generation differences for UID
1165 differences but no UID ordering differences. */
1167 vars
= BITMAP_ALLOC (NULL
);
1168 FOR_EACH_REFERENCED_VAR (cfun
, var
, rvi
)
1170 struct def_blocks_d
*def_map
;
1172 def_map
= find_def_blocks_for (var
);
1173 if (def_map
== NULL
)
1176 if (get_phi_state (var
) != NEED_PHI_STATE_NO
)
1177 bitmap_set_bit (vars
, DECL_UID (var
));
1180 EXECUTE_IF_SET_IN_BITMAP (vars
, 0, uid
, bi
)
1182 tree var
= referenced_var (uid
);
1183 struct def_blocks_d
*def_map
;
1186 def_map
= find_def_blocks_for (var
);
1187 idf
= compute_idf (def_map
->def_blocks
, dfs
);
1188 insert_phi_nodes_for (var
, idf
, false);
1194 timevar_pop (TV_TREE_INSERT_PHI_NODES
);
1198 /* Push SYM's current reaching definition into BLOCK_DEFS_STACK and
1199 register DEF (an SSA_NAME) to be a new definition for SYM. */
1202 register_new_def (tree def
, tree sym
)
1206 /* If this variable is set in a single basic block and all uses are
1207 dominated by the set(s) in that single basic block, then there is
1208 no reason to record anything for this variable in the block local
1209 definition stacks. Doing so just wastes time and memory.
1211 This is the same test to prune the set of variables which may
1212 need PHI nodes. So we just use that information since it's already
1213 computed and available for us to use. */
1214 if (get_phi_state (sym
) == NEED_PHI_STATE_NO
)
1216 set_current_def (sym
, def
);
1220 currdef
= get_current_def (sym
);
1222 /* If SYM is not a GIMPLE register, then CURRDEF may be a name whose
1223 SSA_NAME_VAR is not necessarily SYM. In this case, also push SYM
1224 in the stack so that we know which symbol is being defined by
1225 this SSA name when we unwind the stack. */
1226 if (currdef
&& !is_gimple_reg (sym
))
1227 VEC_safe_push (tree
, heap
, block_defs_stack
, sym
);
1229 /* Push the current reaching definition into BLOCK_DEFS_STACK. This
1230 stack is later used by the dominator tree callbacks to restore
1231 the reaching definitions for all the variables defined in the
1232 block after a recursive visit to all its immediately dominated
1233 blocks. If there is no current reaching definition, then just
1234 record the underlying _DECL node. */
1235 VEC_safe_push (tree
, heap
, block_defs_stack
, currdef
? currdef
: sym
);
1237 /* Set the current reaching definition for SYM to be DEF. */
1238 set_current_def (sym
, def
);
1242 /* Perform a depth-first traversal of the dominator tree looking for
1243 variables to rename. BB is the block where to start searching.
1244 Renaming is a five step process:
1246 1- Every definition made by PHI nodes at the start of the blocks is
1247 registered as the current definition for the corresponding variable.
1249 2- Every statement in BB is rewritten. USE and VUSE operands are
1250 rewritten with their corresponding reaching definition. DEF and
1251 VDEF targets are registered as new definitions.
1253 3- All the PHI nodes in successor blocks of BB are visited. The
1254 argument corresponding to BB is replaced with its current reaching
1257 4- Recursively rewrite every dominator child block of BB.
1259 5- Restore (in reverse order) the current reaching definition for every
1260 new definition introduced in this block. This is done so that when
1261 we return from the recursive call, all the current reaching
1262 definitions are restored to the names that were valid in the
1263 dominator parent of BB. */
1265 /* Return the current definition for variable VAR. If none is found,
1266 create a new SSA name to act as the zeroth definition for VAR. */
1269 get_reaching_def (tree var
)
1273 /* Lookup the current reaching definition for VAR. */
1274 currdef
= get_current_def (var
);
1276 /* If there is no reaching definition for VAR, create and register a
1277 default definition for it (if needed). */
1278 if (currdef
== NULL_TREE
)
1280 tree sym
= DECL_P (var
) ? var
: SSA_NAME_VAR (var
);
1281 currdef
= get_default_def_for (sym
);
1282 set_current_def (var
, currdef
);
1285 /* Return the current reaching definition for VAR, or the default
1286 definition, if we had to create one. */
1291 /* Helper function for rewrite_stmt. Rewrite uses in a debug stmt. */
1294 rewrite_debug_stmt_uses (gimple stmt
)
1296 use_operand_p use_p
;
1298 bool update
= false;
1300 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
1302 tree var
= USE_FROM_PTR (use_p
), def
= NULL_TREE
;
1303 gcc_assert (DECL_P (var
));
1304 if (var_ann (var
) == NULL
)
1306 if (TREE_CODE (var
) == PARM_DECL
&& single_succ_p (ENTRY_BLOCK_PTR
))
1308 gimple_stmt_iterator gsi
1309 = gsi_after_labels (single_succ (ENTRY_BLOCK_PTR
));
1311 /* Search a few source bind stmts at the start of first bb to
1312 see if a DEBUG_EXPR_DECL can't be reused. */
1314 !gsi_end_p (gsi
) && lim
> 0;
1315 gsi_next (&gsi
), lim
--)
1317 gimple gstmt
= gsi_stmt (gsi
);
1318 if (!gimple_debug_source_bind_p (gstmt
))
1320 if (gimple_debug_source_bind_get_value (gstmt
) == var
)
1322 def
= gimple_debug_source_bind_get_var (gstmt
);
1323 if (TREE_CODE (def
) == DEBUG_EXPR_DECL
)
1329 /* If not, add a new source bind stmt. */
1330 if (def
== NULL_TREE
)
1333 def
= make_node (DEBUG_EXPR_DECL
);
1334 def_temp
= gimple_build_debug_source_bind (def
, var
, NULL
);
1335 DECL_ARTIFICIAL (def
) = 1;
1336 TREE_TYPE (def
) = TREE_TYPE (var
);
1337 DECL_MODE (def
) = DECL_MODE (var
);
1338 gsi
= gsi_after_labels (single_succ (ENTRY_BLOCK_PTR
));
1339 gsi_insert_before (&gsi
, def_temp
, GSI_SAME_STMT
);
1346 def
= get_current_def (var
);
1347 /* Check if get_current_def can be trusted. */
1350 basic_block bb
= gimple_bb (stmt
);
1352 = SSA_NAME_IS_DEFAULT_DEF (def
)
1353 ? NULL
: gimple_bb (SSA_NAME_DEF_STMT (def
));
1355 /* If definition is in current bb, it is fine. */
1358 /* If definition bb doesn't dominate the current bb,
1359 it can't be used. */
1360 else if (def_bb
&& !dominated_by_p (CDI_DOMINATORS
, bb
, def_bb
))
1362 /* If there is just one definition and dominates the current
1364 else if (get_phi_state (var
) == NEED_PHI_STATE_NO
)
1368 struct def_blocks_d
*db_p
= get_def_blocks_for (var
);
1370 /* If there are some non-debug uses in the current bb,
1372 if (bitmap_bit_p (db_p
->livein_blocks
, bb
->index
))
1374 /* Otherwise give up for now. */
1382 gimple_debug_bind_reset_value (stmt
);
1386 SET_USE (use_p
, def
);
1392 /* SSA Rewriting Step 2. Rewrite every variable used in each statement in
1393 the block with its immediate reaching definitions. Update the current
1394 definition of a variable when a new real or virtual definition is found. */
1397 rewrite_stmt (gimple_stmt_iterator si
)
1399 use_operand_p use_p
;
1400 def_operand_p def_p
;
1402 gimple stmt
= gsi_stmt (si
);
1404 /* If mark_def_sites decided that we don't need to rewrite this
1405 statement, ignore it. */
1406 gcc_assert (blocks_to_update
== NULL
);
1407 if (!rewrite_uses_p (stmt
) && !register_defs_p (stmt
))
1410 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1412 fprintf (dump_file
, "Renaming statement ");
1413 print_gimple_stmt (dump_file
, stmt
, 0, TDF_SLIM
);
1414 fprintf (dump_file
, "\n");
1417 /* Step 1. Rewrite USES in the statement. */
1418 if (rewrite_uses_p (stmt
))
1420 if (is_gimple_debug (stmt
))
1421 rewrite_debug_stmt_uses (stmt
);
1423 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
1425 tree var
= USE_FROM_PTR (use_p
);
1426 gcc_assert (DECL_P (var
));
1427 SET_USE (use_p
, get_reaching_def (var
));
1431 /* Step 2. Register the statement's DEF operands. */
1432 if (register_defs_p (stmt
))
1433 FOR_EACH_SSA_DEF_OPERAND (def_p
, stmt
, iter
, SSA_OP_DEF
)
1435 tree var
= DEF_FROM_PTR (def_p
);
1436 tree name
= make_ssa_name (var
, stmt
);
1438 gcc_assert (DECL_P (var
));
1439 SET_DEF (def_p
, name
);
1440 register_new_def (DEF_FROM_PTR (def_p
), var
);
1442 tracked_var
= target_for_debug_bind (var
);
1445 gimple note
= gimple_build_debug_bind (tracked_var
, name
, stmt
);
1446 gsi_insert_after (&si
, note
, GSI_SAME_STMT
);
1452 /* SSA Rewriting Step 3. Visit all the successor blocks of BB looking for
1453 PHI nodes. For every PHI node found, add a new argument containing the
1454 current reaching definition for the variable and the edge through which
1455 that definition is reaching the PHI node. */
1458 rewrite_add_phi_arguments (basic_block bb
)
1463 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1466 gimple_stmt_iterator gsi
;
1468 for (gsi
= gsi_start_phis (e
->dest
); !gsi_end_p (gsi
);
1474 phi
= gsi_stmt (gsi
);
1475 currdef
= get_reaching_def (SSA_NAME_VAR (gimple_phi_result (phi
)));
1476 stmt
= SSA_NAME_DEF_STMT (currdef
);
1477 add_phi_arg (phi
, currdef
, e
, gimple_location (stmt
));
1482 /* SSA Rewriting Step 1. Initialization, create a block local stack
1483 of reaching definitions for new SSA names produced in this block
1484 (BLOCK_DEFS). Register new definitions for every PHI node in the
1488 rewrite_enter_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
1492 gimple_stmt_iterator gsi
;
1494 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1495 fprintf (dump_file
, "\n\nRenaming block #%d\n\n", bb
->index
);
1497 /* Mark the unwind point for this block. */
1498 VEC_safe_push (tree
, heap
, block_defs_stack
, NULL_TREE
);
1500 /* Step 1. Register new definitions for every PHI node in the block.
1501 Conceptually, all the PHI nodes are executed in parallel and each PHI
1502 node introduces a new version for the associated variable. */
1503 for (gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
1507 phi
= gsi_stmt (gsi
);
1508 result
= gimple_phi_result (phi
);
1509 gcc_assert (is_gimple_reg (result
));
1510 register_new_def (result
, SSA_NAME_VAR (result
));
1513 /* Step 2. Rewrite every variable used in each statement in the block
1514 with its immediate reaching definitions. Update the current definition
1515 of a variable when a new real or virtual definition is found. */
1516 if (TEST_BIT (interesting_blocks
, bb
->index
))
1517 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
1520 /* Step 3. Visit all the successor blocks of BB looking for PHI nodes.
1521 For every PHI node found, add a new argument containing the current
1522 reaching definition for the variable and the edge through which that
1523 definition is reaching the PHI node. */
1524 rewrite_add_phi_arguments (bb
);
1529 /* Called after visiting all the statements in basic block BB and all
1530 of its dominator children. Restore CURRDEFS to its original value. */
1533 rewrite_leave_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
1534 basic_block bb ATTRIBUTE_UNUSED
)
1536 /* Restore CURRDEFS to its original state. */
1537 while (VEC_length (tree
, block_defs_stack
) > 0)
1539 tree tmp
= VEC_pop (tree
, block_defs_stack
);
1540 tree saved_def
, var
;
1542 if (tmp
== NULL_TREE
)
1545 if (TREE_CODE (tmp
) == SSA_NAME
)
1547 /* If we recorded an SSA_NAME, then make the SSA_NAME the
1548 current definition of its underlying variable. Note that
1549 if the SSA_NAME is not for a GIMPLE register, the symbol
1550 being defined is stored in the next slot in the stack.
1551 This mechanism is needed because an SSA name for a
1552 non-register symbol may be the definition for more than
1553 one symbol (e.g., SFTs, aliased variables, etc). */
1555 var
= SSA_NAME_VAR (saved_def
);
1556 if (!is_gimple_reg (var
))
1557 var
= VEC_pop (tree
, block_defs_stack
);
1561 /* If we recorded anything else, it must have been a _DECL
1562 node and its current reaching definition must have been
1568 set_current_def (var
, saved_def
);
1573 /* Dump bitmap SET (assumed to contain VAR_DECLs) to FILE. */
1576 dump_decl_set (FILE *file
, bitmap set
)
1583 fprintf (file
, "{ ");
1585 EXECUTE_IF_SET_IN_BITMAP (set
, 0, i
, bi
)
1587 tree var
= referenced_var_lookup (cfun
, i
);
1589 print_generic_expr (file
, var
, 0);
1591 fprintf (file
, "D.%u", i
);
1592 fprintf (file
, " ");
1595 fprintf (file
, "}");
1598 fprintf (file
, "NIL");
1602 /* Dump bitmap SET (assumed to contain VAR_DECLs) to FILE. */
1605 debug_decl_set (bitmap set
)
1607 dump_decl_set (stderr
, set
);
1608 fprintf (stderr
, "\n");
1612 /* Dump the renaming stack (block_defs_stack) to FILE. Traverse the
1613 stack up to a maximum of N levels. If N is -1, the whole stack is
1614 dumped. New levels are created when the dominator tree traversal
1615 used for renaming enters a new sub-tree. */
1618 dump_defs_stack (FILE *file
, int n
)
1622 fprintf (file
, "\n\nRenaming stack");
1624 fprintf (file
, " (up to %d levels)", n
);
1625 fprintf (file
, "\n\n");
1628 fprintf (file
, "Level %d (current level)\n", i
);
1629 for (j
= (int) VEC_length (tree
, block_defs_stack
) - 1; j
>= 0; j
--)
1633 name
= VEC_index (tree
, block_defs_stack
, j
);
1634 if (name
== NULL_TREE
)
1639 fprintf (file
, "\nLevel %d\n", i
);
1650 var
= SSA_NAME_VAR (name
);
1651 if (!is_gimple_reg (var
))
1654 var
= VEC_index (tree
, block_defs_stack
, j
);
1658 fprintf (file
, " Previous CURRDEF (");
1659 print_generic_expr (file
, var
, 0);
1660 fprintf (file
, ") = ");
1662 print_generic_expr (file
, name
, 0);
1664 fprintf (file
, "<NIL>");
1665 fprintf (file
, "\n");
1670 /* Dump the renaming stack (block_defs_stack) to stderr. Traverse the
1671 stack up to a maximum of N levels. If N is -1, the whole stack is
1672 dumped. New levels are created when the dominator tree traversal
1673 used for renaming enters a new sub-tree. */
1676 debug_defs_stack (int n
)
1678 dump_defs_stack (stderr
, n
);
1682 /* Dump the current reaching definition of every symbol to FILE. */
1685 dump_currdefs (FILE *file
)
1687 referenced_var_iterator i
;
1690 fprintf (file
, "\n\nCurrent reaching definitions\n\n");
1691 FOR_EACH_REFERENCED_VAR (cfun
, var
, i
)
1692 if (SYMS_TO_RENAME (cfun
) == NULL
1693 || bitmap_bit_p (SYMS_TO_RENAME (cfun
), DECL_UID (var
)))
1695 fprintf (file
, "CURRDEF (");
1696 print_generic_expr (file
, var
, 0);
1697 fprintf (file
, ") = ");
1698 if (get_current_def (var
))
1699 print_generic_expr (file
, get_current_def (var
), 0);
1701 fprintf (file
, "<NIL>");
1702 fprintf (file
, "\n");
1707 /* Dump the current reaching definition of every symbol to stderr. */
1710 debug_currdefs (void)
1712 dump_currdefs (stderr
);
1716 /* Dump SSA information to FILE. */
1719 dump_tree_ssa (FILE *file
)
1721 const char *funcname
1722 = lang_hooks
.decl_printable_name (current_function_decl
, 2);
1724 fprintf (file
, "SSA renaming information for %s\n\n", funcname
);
1726 dump_def_blocks (file
);
1727 dump_defs_stack (file
, -1);
1728 dump_currdefs (file
);
1729 dump_tree_ssa_stats (file
);
1733 /* Dump SSA information to stderr. */
1736 debug_tree_ssa (void)
1738 dump_tree_ssa (stderr
);
1742 /* Dump statistics for the hash table HTAB. */
1745 htab_statistics (FILE *file
, htab_t htab
)
1747 fprintf (file
, "size %ld, %ld elements, %f collision/search ratio\n",
1748 (long) htab_size (htab
),
1749 (long) htab_elements (htab
),
1750 htab_collisions (htab
));
1754 /* Dump SSA statistics on FILE. */
1757 dump_tree_ssa_stats (FILE *file
)
1759 if (def_blocks
|| repl_tbl
)
1760 fprintf (file
, "\nHash table statistics:\n");
1764 fprintf (file
, " def_blocks: ");
1765 htab_statistics (file
, def_blocks
);
1770 fprintf (file
, " repl_tbl: ");
1771 htab_statistics (file
, repl_tbl
);
1774 if (def_blocks
|| repl_tbl
)
1775 fprintf (file
, "\n");
1779 /* Dump SSA statistics on stderr. */
1782 debug_tree_ssa_stats (void)
1784 dump_tree_ssa_stats (stderr
);
1788 /* Hashing and equality functions for DEF_BLOCKS. */
1791 def_blocks_hash (const void *p
)
1793 return htab_hash_pointer
1794 ((const void *)((const struct def_blocks_d
*)p
)->var
);
1798 def_blocks_eq (const void *p1
, const void *p2
)
1800 return ((const struct def_blocks_d
*)p1
)->var
1801 == ((const struct def_blocks_d
*)p2
)->var
;
1805 /* Free memory allocated by one entry in DEF_BLOCKS. */
1808 def_blocks_free (void *p
)
1810 struct def_blocks_d
*entry
= (struct def_blocks_d
*) p
;
1811 BITMAP_FREE (entry
->def_blocks
);
1812 BITMAP_FREE (entry
->phi_blocks
);
1813 BITMAP_FREE (entry
->livein_blocks
);
1818 /* Callback for htab_traverse to dump the DEF_BLOCKS hash table. */
1821 debug_def_blocks_r (void **slot
, void *data
)
1823 FILE *file
= (FILE *) data
;
1824 struct def_blocks_d
*db_p
= (struct def_blocks_d
*) *slot
;
1826 fprintf (file
, "VAR: ");
1827 print_generic_expr (file
, db_p
->var
, dump_flags
);
1828 bitmap_print (file
, db_p
->def_blocks
, ", DEF_BLOCKS: { ", "}");
1829 bitmap_print (file
, db_p
->livein_blocks
, ", LIVEIN_BLOCKS: { ", "}");
1830 bitmap_print (file
, db_p
->phi_blocks
, ", PHI_BLOCKS: { ", "}\n");
1836 /* Dump the DEF_BLOCKS hash table on FILE. */
1839 dump_def_blocks (FILE *file
)
1841 fprintf (file
, "\n\nDefinition and live-in blocks:\n\n");
1843 htab_traverse (def_blocks
, debug_def_blocks_r
, file
);
1847 /* Dump the DEF_BLOCKS hash table on stderr. */
1850 debug_def_blocks (void)
1852 dump_def_blocks (stderr
);
1856 /* Register NEW_NAME to be the new reaching definition for OLD_NAME. */
1859 register_new_update_single (tree new_name
, tree old_name
)
1861 tree currdef
= get_current_def (old_name
);
1863 /* Push the current reaching definition into BLOCK_DEFS_STACK.
1864 This stack is later used by the dominator tree callbacks to
1865 restore the reaching definitions for all the variables
1866 defined in the block after a recursive visit to all its
1867 immediately dominated blocks. */
1868 VEC_reserve (tree
, heap
, block_defs_stack
, 2);
1869 VEC_quick_push (tree
, block_defs_stack
, currdef
);
1870 VEC_quick_push (tree
, block_defs_stack
, old_name
);
1872 /* Set the current reaching definition for OLD_NAME to be
1874 set_current_def (old_name
, new_name
);
1878 /* Register NEW_NAME to be the new reaching definition for all the
1879 names in OLD_NAMES. Used by the incremental SSA update routines to
1880 replace old SSA names with new ones. */
1883 register_new_update_set (tree new_name
, bitmap old_names
)
1888 EXECUTE_IF_SET_IN_BITMAP (old_names
, 0, i
, bi
)
1889 register_new_update_single (new_name
, ssa_name (i
));
1894 /* If the operand pointed to by USE_P is a name in OLD_SSA_NAMES or
1895 it is a symbol marked for renaming, replace it with USE_P's current
1896 reaching definition. */
1899 maybe_replace_use (use_operand_p use_p
)
1901 tree rdef
= NULL_TREE
;
1902 tree use
= USE_FROM_PTR (use_p
);
1903 tree sym
= DECL_P (use
) ? use
: SSA_NAME_VAR (use
);
1905 if (symbol_marked_for_renaming (sym
))
1906 rdef
= get_reaching_def (sym
);
1907 else if (is_old_name (use
))
1908 rdef
= get_reaching_def (use
);
1910 if (rdef
&& rdef
!= use
)
1911 SET_USE (use_p
, rdef
);
1915 /* Same as maybe_replace_use, but without introducing default stmts,
1916 returning false to indicate a need to do so. */
1919 maybe_replace_use_in_debug_stmt (use_operand_p use_p
)
1921 tree rdef
= NULL_TREE
;
1922 tree use
= USE_FROM_PTR (use_p
);
1923 tree sym
= DECL_P (use
) ? use
: SSA_NAME_VAR (use
);
1925 if (symbol_marked_for_renaming (sym
))
1926 rdef
= get_current_def (sym
);
1927 else if (is_old_name (use
))
1929 rdef
= get_current_def (use
);
1930 /* We can't assume that, if there's no current definition, the
1931 default one should be used. It could be the case that we've
1932 rearranged blocks so that the earlier definition no longer
1933 dominates the use. */
1934 if (!rdef
&& SSA_NAME_IS_DEFAULT_DEF (use
))
1940 if (rdef
&& rdef
!= use
)
1941 SET_USE (use_p
, rdef
);
1943 return rdef
!= NULL_TREE
;
1947 /* If the operand pointed to by DEF_P is an SSA name in NEW_SSA_NAMES
1948 or OLD_SSA_NAMES, or if it is a symbol marked for renaming,
1949 register it as the current definition for the names replaced by
1953 maybe_register_def (def_operand_p def_p
, gimple stmt
,
1954 gimple_stmt_iterator gsi
)
1956 tree def
= DEF_FROM_PTR (def_p
);
1957 tree sym
= DECL_P (def
) ? def
: SSA_NAME_VAR (def
);
1959 /* If DEF is a naked symbol that needs renaming, create a new
1961 if (symbol_marked_for_renaming (sym
))
1967 def
= make_ssa_name (def
, stmt
);
1968 SET_DEF (def_p
, def
);
1970 tracked_var
= target_for_debug_bind (sym
);
1973 gimple note
= gimple_build_debug_bind (tracked_var
, def
, stmt
);
1974 /* If stmt ends the bb, insert the debug stmt on the single
1975 non-EH edge from the stmt. */
1976 if (gsi_one_before_end_p (gsi
) && stmt_ends_bb_p (stmt
))
1978 basic_block bb
= gsi_bb (gsi
);
1981 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1982 if (!(e
->flags
& EDGE_EH
))
1987 /* If there are other predecessors to ef->dest, then
1988 there must be PHI nodes for the modified
1989 variable, and therefore there will be debug bind
1990 stmts after the PHI nodes. The debug bind notes
1991 we'd insert would force the creation of a new
1992 block (diverging codegen) and be redundant with
1993 the post-PHI bind stmts, so don't add them.
1995 As for the exit edge, there wouldn't be redundant
1996 bind stmts, but there wouldn't be a PC to bind
1997 them to either, so avoid diverging the CFG. */
1998 if (ef
&& single_pred_p (ef
->dest
)
1999 && ef
->dest
!= EXIT_BLOCK_PTR
)
2001 /* If there were PHI nodes in the node, we'd
2002 have to make sure the value we're binding
2003 doesn't need rewriting. But there shouldn't
2004 be PHI nodes in a single-predecessor block,
2005 so we just add the note. */
2006 gsi_insert_on_edge_immediate (ef
, note
);
2010 gsi_insert_after (&gsi
, note
, GSI_SAME_STMT
);
2014 register_new_update_single (def
, sym
);
2018 /* If DEF is a new name, register it as a new definition
2019 for all the names replaced by DEF. */
2020 if (is_new_name (def
))
2021 register_new_update_set (def
, names_replaced_by (def
));
2023 /* If DEF is an old name, register DEF as a new
2024 definition for itself. */
2025 if (is_old_name (def
))
2026 register_new_update_single (def
, def
);
2031 /* Update every variable used in the statement pointed-to by SI. The
2032 statement is assumed to be in SSA form already. Names in
2033 OLD_SSA_NAMES used by SI will be updated to their current reaching
2034 definition. Names in OLD_SSA_NAMES or NEW_SSA_NAMES defined by SI
2035 will be registered as a new definition for their corresponding name
2036 in OLD_SSA_NAMES. */
2039 rewrite_update_stmt (gimple stmt
, gimple_stmt_iterator gsi
)
2041 use_operand_p use_p
;
2042 def_operand_p def_p
;
2045 /* Only update marked statements. */
2046 if (!rewrite_uses_p (stmt
) && !register_defs_p (stmt
))
2049 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
2051 fprintf (dump_file
, "Updating SSA information for statement ");
2052 print_gimple_stmt (dump_file
, stmt
, 0, TDF_SLIM
);
2055 /* Rewrite USES included in OLD_SSA_NAMES and USES whose underlying
2056 symbol is marked for renaming. */
2057 if (rewrite_uses_p (stmt
))
2059 if (is_gimple_debug (stmt
))
2061 bool failed
= false;
2063 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
2064 if (!maybe_replace_use_in_debug_stmt (use_p
))
2072 /* DOM sometimes threads jumps in such a way that a
2073 debug stmt ends up referencing a SSA variable that no
2074 longer dominates the debug stmt, but such that all
2075 incoming definitions refer to the same definition in
2076 an earlier dominator. We could try to recover that
2077 definition somehow, but this will have to do for now.
2079 Introducing a default definition, which is what
2080 maybe_replace_use() would do in such cases, may
2081 modify code generation, for the otherwise-unused
2082 default definition would never go away, modifying SSA
2083 version numbers all over. */
2084 gimple_debug_bind_reset_value (stmt
);
2090 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_ALL_USES
)
2091 maybe_replace_use (use_p
);
2095 /* Register definitions of names in NEW_SSA_NAMES and OLD_SSA_NAMES.
2096 Also register definitions for names whose underlying symbol is
2097 marked for renaming. */
2098 if (register_defs_p (stmt
))
2099 FOR_EACH_SSA_DEF_OPERAND (def_p
, stmt
, iter
, SSA_OP_ALL_DEFS
)
2100 maybe_register_def (def_p
, stmt
, gsi
);
2104 /* Visit all the successor blocks of BB looking for PHI nodes. For
2105 every PHI node found, check if any of its arguments is in
2106 OLD_SSA_NAMES. If so, and if the argument has a current reaching
2107 definition, replace it. */
2110 rewrite_update_phi_arguments (basic_block bb
)
2116 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
2121 if (!bitmap_bit_p (blocks_with_phis_to_rewrite
, e
->dest
->index
))
2124 phis
= VEC_index (gimple_vec
, phis_to_rewrite
, e
->dest
->index
);
2125 FOR_EACH_VEC_ELT (gimple
, phis
, i
, phi
)
2127 tree arg
, lhs_sym
, reaching_def
= NULL
;
2128 use_operand_p arg_p
;
2130 gcc_assert (rewrite_uses_p (phi
));
2132 arg_p
= PHI_ARG_DEF_PTR_FROM_EDGE (phi
, e
);
2133 arg
= USE_FROM_PTR (arg_p
);
2135 if (arg
&& !DECL_P (arg
) && TREE_CODE (arg
) != SSA_NAME
)
2138 lhs_sym
= SSA_NAME_VAR (gimple_phi_result (phi
));
2140 if (arg
== NULL_TREE
)
2142 /* When updating a PHI node for a recently introduced
2143 symbol we may find NULL arguments. That's why we
2144 take the symbol from the LHS of the PHI node. */
2145 reaching_def
= get_reaching_def (lhs_sym
);
2150 tree sym
= DECL_P (arg
) ? arg
: SSA_NAME_VAR (arg
);
2152 if (symbol_marked_for_renaming (sym
))
2153 reaching_def
= get_reaching_def (sym
);
2154 else if (is_old_name (arg
))
2155 reaching_def
= get_reaching_def (arg
);
2158 /* Update the argument if there is a reaching def. */
2162 source_location locus
;
2163 int arg_i
= PHI_ARG_INDEX_FROM_USE (arg_p
);
2165 SET_USE (arg_p
, reaching_def
);
2166 stmt
= SSA_NAME_DEF_STMT (reaching_def
);
2168 /* Single element PHI nodes behave like copies, so get the
2169 location from the phi argument. */
2170 if (gimple_code (stmt
) == GIMPLE_PHI
&&
2171 gimple_phi_num_args (stmt
) == 1)
2172 locus
= gimple_phi_arg_location (stmt
, 0);
2174 locus
= gimple_location (stmt
);
2176 gimple_phi_arg_set_location (phi
, arg_i
, locus
);
2180 if (e
->flags
& EDGE_ABNORMAL
)
2181 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (USE_FROM_PTR (arg_p
)) = 1;
2187 /* Initialization of block data structures for the incremental SSA
2188 update pass. Create a block local stack of reaching definitions
2189 for new SSA names produced in this block (BLOCK_DEFS). Register
2190 new definitions for every PHI node in the block. */
2193 rewrite_update_enter_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
2196 bool is_abnormal_phi
;
2197 gimple_stmt_iterator gsi
;
2199 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
2200 fprintf (dump_file
, "Registering new PHI nodes in block #%d\n",
2203 /* Mark the unwind point for this block. */
2204 VEC_safe_push (tree
, heap
, block_defs_stack
, NULL_TREE
);
2206 if (!bitmap_bit_p (blocks_to_update
, bb
->index
))
2209 /* Mark the LHS if any of the arguments flows through an abnormal
2211 is_abnormal_phi
= bb_has_abnormal_pred (bb
);
2213 /* If any of the PHI nodes is a replacement for a name in
2214 OLD_SSA_NAMES or it's one of the names in NEW_SSA_NAMES, then
2215 register it as a new definition for its corresponding name. Also
2216 register definitions for names whose underlying symbols are
2217 marked for renaming. */
2218 for (gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
2221 gimple phi
= gsi_stmt (gsi
);
2223 if (!register_defs_p (phi
))
2226 lhs
= gimple_phi_result (phi
);
2227 lhs_sym
= SSA_NAME_VAR (lhs
);
2229 if (symbol_marked_for_renaming (lhs_sym
))
2230 register_new_update_single (lhs
, lhs_sym
);
2234 /* If LHS is a new name, register a new definition for all
2235 the names replaced by LHS. */
2236 if (is_new_name (lhs
))
2237 register_new_update_set (lhs
, names_replaced_by (lhs
));
2239 /* If LHS is an OLD name, register it as a new definition
2241 if (is_old_name (lhs
))
2242 register_new_update_single (lhs
, lhs
);
2245 if (is_abnormal_phi
)
2246 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs
) = 1;
2249 /* Step 2. Rewrite every variable used in each statement in the block. */
2250 if (TEST_BIT (interesting_blocks
, bb
->index
))
2252 gcc_assert (bitmap_bit_p (blocks_to_update
, bb
->index
));
2253 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
2254 rewrite_update_stmt (gsi_stmt (gsi
), gsi
);
2257 /* Step 3. Update PHI nodes. */
2258 rewrite_update_phi_arguments (bb
);
2261 /* Called after visiting block BB. Unwind BLOCK_DEFS_STACK to restore
2262 the current reaching definition of every name re-written in BB to
2263 the original reaching definition before visiting BB. This
2264 unwinding must be done in the opposite order to what is done in
2265 register_new_update_set. */
2268 rewrite_update_leave_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
2269 basic_block bb ATTRIBUTE_UNUSED
)
2271 while (VEC_length (tree
, block_defs_stack
) > 0)
2273 tree var
= VEC_pop (tree
, block_defs_stack
);
2276 /* NULL indicates the unwind stop point for this block (see
2277 rewrite_update_enter_block). */
2281 saved_def
= VEC_pop (tree
, block_defs_stack
);
2282 set_current_def (var
, saved_def
);
2287 /* Rewrite the actual blocks, statements, and PHI arguments, to be in SSA
2290 ENTRY indicates the block where to start. Every block dominated by
2291 ENTRY will be rewritten.
2293 WHAT indicates what actions will be taken by the renamer (see enum
2296 BLOCKS are the set of interesting blocks for the dominator walker
2297 to process. If this set is NULL, then all the nodes dominated
2298 by ENTRY are walked. Otherwise, blocks dominated by ENTRY that
2299 are not present in BLOCKS are ignored. */
2302 rewrite_blocks (basic_block entry
, enum rewrite_mode what
)
2304 struct dom_walk_data walk_data
;
2306 /* Rewrite all the basic blocks in the program. */
2307 timevar_push (TV_TREE_SSA_REWRITE_BLOCKS
);
2309 /* Setup callbacks for the generic dominator tree walker. */
2310 memset (&walk_data
, 0, sizeof (walk_data
));
2312 walk_data
.dom_direction
= CDI_DOMINATORS
;
2314 if (what
== REWRITE_ALL
)
2316 walk_data
.before_dom_children
= rewrite_enter_block
;
2317 walk_data
.after_dom_children
= rewrite_leave_block
;
2319 else if (what
== REWRITE_UPDATE
)
2321 walk_data
.before_dom_children
= rewrite_update_enter_block
;
2322 walk_data
.after_dom_children
= rewrite_update_leave_block
;
2327 block_defs_stack
= VEC_alloc (tree
, heap
, 10);
2329 /* Initialize the dominator walker. */
2330 init_walk_dominator_tree (&walk_data
);
2332 /* Recursively walk the dominator tree rewriting each statement in
2333 each basic block. */
2334 walk_dominator_tree (&walk_data
, entry
);
2336 /* Finalize the dominator walker. */
2337 fini_walk_dominator_tree (&walk_data
);
2339 /* Debugging dumps. */
2340 if (dump_file
&& (dump_flags
& TDF_STATS
))
2342 dump_dfa_stats (dump_file
);
2344 dump_tree_ssa_stats (dump_file
);
2347 VEC_free (tree
, heap
, block_defs_stack
);
2349 timevar_pop (TV_TREE_SSA_REWRITE_BLOCKS
);
2353 /* Block processing routine for mark_def_sites. Clear the KILLS bitmap
2354 at the start of each block, and call mark_def_sites for each statement. */
2357 mark_def_sites_block (struct dom_walk_data
*walk_data
, basic_block bb
)
2359 struct mark_def_sites_global_data
*gd
;
2361 gimple_stmt_iterator gsi
;
2363 gd
= (struct mark_def_sites_global_data
*) walk_data
->global_data
;
2366 bitmap_clear (kills
);
2367 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
2368 mark_def_sites (bb
, gsi_stmt (gsi
), kills
);
2372 /* Mark the definition site blocks for each variable, so that we know
2373 where the variable is actually live.
2375 The INTERESTING_BLOCKS global will be filled in with all the blocks
2376 that should be processed by the renamer. It is assumed that the
2377 caller has already initialized and zeroed it. */
2380 mark_def_site_blocks (void)
2382 struct dom_walk_data walk_data
;
2383 struct mark_def_sites_global_data mark_def_sites_global_data
;
2385 /* Setup callbacks for the generic dominator tree walker to find and
2386 mark definition sites. */
2387 walk_data
.dom_direction
= CDI_DOMINATORS
;
2388 walk_data
.initialize_block_local_data
= NULL
;
2389 walk_data
.before_dom_children
= mark_def_sites_block
;
2390 walk_data
.after_dom_children
= NULL
;
2392 /* Notice that this bitmap is indexed using variable UIDs, so it must be
2393 large enough to accommodate all the variables referenced in the
2394 function, not just the ones we are renaming. */
2395 mark_def_sites_global_data
.kills
= BITMAP_ALLOC (NULL
);
2396 walk_data
.global_data
= &mark_def_sites_global_data
;
2398 /* We do not have any local data. */
2399 walk_data
.block_local_data_size
= 0;
2401 /* Initialize the dominator walker. */
2402 init_walk_dominator_tree (&walk_data
);
2404 /* Recursively walk the dominator tree. */
2405 walk_dominator_tree (&walk_data
, ENTRY_BLOCK_PTR
);
2407 /* Finalize the dominator walker. */
2408 fini_walk_dominator_tree (&walk_data
);
2410 /* We no longer need this bitmap, clear and free it. */
2411 BITMAP_FREE (mark_def_sites_global_data
.kills
);
2415 /* Initialize internal data needed during renaming. */
2418 init_ssa_renamer (void)
2421 referenced_var_iterator rvi
;
2423 cfun
->gimple_df
->in_ssa_p
= false;
2425 /* Allocate memory for the DEF_BLOCKS hash table. */
2426 gcc_assert (def_blocks
== NULL
);
2427 def_blocks
= htab_create (num_referenced_vars
, def_blocks_hash
,
2428 def_blocks_eq
, def_blocks_free
);
2430 FOR_EACH_REFERENCED_VAR (cfun
, var
, rvi
)
2431 set_current_def (var
, NULL_TREE
);
2435 /* Deallocate internal data structures used by the renamer. */
2438 fini_ssa_renamer (void)
2442 htab_delete (def_blocks
);
2446 cfun
->gimple_df
->in_ssa_p
= true;
2449 /* Main entry point into the SSA builder. The renaming process
2450 proceeds in four main phases:
2452 1- Compute dominance frontier and immediate dominators, needed to
2453 insert PHI nodes and rename the function in dominator tree
2456 2- Find and mark all the blocks that define variables
2457 (mark_def_site_blocks).
2459 3- Insert PHI nodes at dominance frontiers (insert_phi_nodes).
2461 4- Rename all the blocks (rewrite_blocks) and statements in the program.
2463 Steps 3 and 4 are done using the dominator tree walker
2464 (walk_dominator_tree). */
2467 rewrite_into_ssa (void)
2472 /* Initialize operand data structures. */
2473 init_ssa_operands (cfun
);
2475 /* Initialize internal data needed by the renamer. */
2476 init_ssa_renamer ();
2478 /* Initialize the set of interesting blocks. The callback
2479 mark_def_sites will add to this set those blocks that the renamer
2481 interesting_blocks
= sbitmap_alloc (last_basic_block
);
2482 sbitmap_zero (interesting_blocks
);
2484 /* Initialize dominance frontier. */
2485 dfs
= XNEWVEC (bitmap_head
, last_basic_block
);
2487 bitmap_initialize (&dfs
[bb
->index
], &bitmap_default_obstack
);
2489 /* 1- Compute dominance frontiers. */
2490 calculate_dominance_info (CDI_DOMINATORS
);
2491 compute_dominance_frontiers (dfs
);
2493 /* 2- Find and mark definition sites. */
2494 mark_def_site_blocks ();
2496 /* 3- Insert PHI nodes at dominance frontiers of definition blocks. */
2497 insert_phi_nodes (dfs
);
2499 /* 4- Rename all the blocks. */
2500 rewrite_blocks (ENTRY_BLOCK_PTR
, REWRITE_ALL
);
2502 /* Free allocated memory. */
2504 bitmap_clear (&dfs
[bb
->index
]);
2507 sbitmap_free (interesting_blocks
);
2509 fini_ssa_renamer ();
2515 struct gimple_opt_pass pass_build_ssa
=
2521 rewrite_into_ssa
, /* execute */
2524 0, /* static_pass_number */
2525 TV_TREE_SSA_OTHER
, /* tv_id */
2526 PROP_cfg
| PROP_referenced_vars
, /* properties_required */
2527 PROP_ssa
, /* properties_provided */
2528 0, /* properties_destroyed */
2529 0, /* todo_flags_start */
2530 TODO_update_ssa_only_virtuals
2532 | TODO_remove_unused_locals
/* todo_flags_finish */
2537 /* Mark the definition of VAR at STMT and BB as interesting for the
2538 renamer. BLOCKS is the set of blocks that need updating. */
2541 mark_def_interesting (tree var
, gimple stmt
, basic_block bb
, bool insert_phi_p
)
2543 gcc_assert (bitmap_bit_p (blocks_to_update
, bb
->index
));
2544 set_register_defs (stmt
, true);
2548 bool is_phi_p
= gimple_code (stmt
) == GIMPLE_PHI
;
2550 set_def_block (var
, bb
, is_phi_p
);
2552 /* If VAR is an SSA name in NEW_SSA_NAMES, this is a definition
2553 site for both itself and all the old names replaced by it. */
2554 if (TREE_CODE (var
) == SSA_NAME
&& is_new_name (var
))
2558 bitmap set
= names_replaced_by (var
);
2560 EXECUTE_IF_SET_IN_BITMAP (set
, 0, i
, bi
)
2561 set_def_block (ssa_name (i
), bb
, is_phi_p
);
2567 /* Mark the use of VAR at STMT and BB as interesting for the
2568 renamer. INSERT_PHI_P is true if we are going to insert new PHI
2572 mark_use_interesting (tree var
, gimple stmt
, basic_block bb
, bool insert_phi_p
)
2574 basic_block def_bb
= gimple_bb (stmt
);
2576 mark_block_for_update (def_bb
);
2577 mark_block_for_update (bb
);
2579 if (gimple_code (stmt
) == GIMPLE_PHI
)
2580 mark_phi_for_rewrite (def_bb
, stmt
);
2583 set_rewrite_uses (stmt
, true);
2585 if (is_gimple_debug (stmt
))
2589 /* If VAR has not been defined in BB, then it is live-on-entry
2590 to BB. Note that we cannot just use the block holding VAR's
2591 definition because if VAR is one of the names in OLD_SSA_NAMES,
2592 it will have several definitions (itself and all the names that
2596 struct def_blocks_d
*db_p
= get_def_blocks_for (var
);
2597 if (!bitmap_bit_p (db_p
->def_blocks
, bb
->index
))
2598 set_livein_block (var
, bb
);
2603 /* Do a dominator walk starting at BB processing statements that
2604 reference symbols in SYMS_TO_RENAME. This is very similar to
2605 mark_def_sites, but the scan handles statements whose operands may
2606 already be SSA names.
2608 If INSERT_PHI_P is true, mark those uses as live in the
2609 corresponding block. This is later used by the PHI placement
2610 algorithm to make PHI pruning decisions.
2612 FIXME. Most of this would be unnecessary if we could associate a
2613 symbol to all the SSA names that reference it. But that
2614 sounds like it would be expensive to maintain. Still, it
2615 would be interesting to see if it makes better sense to do
2619 prepare_block_for_update (basic_block bb
, bool insert_phi_p
)
2622 gimple_stmt_iterator si
;
2626 mark_block_for_update (bb
);
2628 /* Process PHI nodes marking interesting those that define or use
2629 the symbols that we are interested in. */
2630 for (si
= gsi_start_phis (bb
); !gsi_end_p (si
); gsi_next (&si
))
2632 gimple phi
= gsi_stmt (si
);
2633 tree lhs_sym
, lhs
= gimple_phi_result (phi
);
2635 lhs_sym
= DECL_P (lhs
) ? lhs
: SSA_NAME_VAR (lhs
);
2637 if (!symbol_marked_for_renaming (lhs_sym
))
2640 mark_def_interesting (lhs_sym
, phi
, bb
, insert_phi_p
);
2642 /* Mark the uses in phi nodes as interesting. It would be more correct
2643 to process the arguments of the phi nodes of the successor edges of
2644 BB at the end of prepare_block_for_update, however, that turns out
2645 to be significantly more expensive. Doing it here is conservatively
2646 correct -- it may only cause us to believe a value to be live in a
2647 block that also contains its definition, and thus insert a few more
2648 phi nodes for it. */
2649 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
2650 mark_use_interesting (lhs_sym
, phi
, e
->src
, insert_phi_p
);
2653 /* Process the statements. */
2654 for (si
= gsi_start_bb (bb
); !gsi_end_p (si
); gsi_next (&si
))
2658 use_operand_p use_p
;
2659 def_operand_p def_p
;
2661 stmt
= gsi_stmt (si
);
2663 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, i
, SSA_OP_ALL_USES
)
2665 tree use
= USE_FROM_PTR (use_p
);
2666 tree sym
= DECL_P (use
) ? use
: SSA_NAME_VAR (use
);
2667 if (symbol_marked_for_renaming (sym
))
2668 mark_use_interesting (sym
, stmt
, bb
, insert_phi_p
);
2671 FOR_EACH_SSA_DEF_OPERAND (def_p
, stmt
, i
, SSA_OP_ALL_DEFS
)
2673 tree def
= DEF_FROM_PTR (def_p
);
2674 tree sym
= DECL_P (def
) ? def
: SSA_NAME_VAR (def
);
2675 if (symbol_marked_for_renaming (sym
))
2676 mark_def_interesting (sym
, stmt
, bb
, insert_phi_p
);
2680 /* Now visit all the blocks dominated by BB. */
2681 for (son
= first_dom_son (CDI_DOMINATORS
, bb
);
2683 son
= next_dom_son (CDI_DOMINATORS
, son
))
2684 prepare_block_for_update (son
, insert_phi_p
);
2688 /* Helper for prepare_names_to_update. Mark all the use sites for
2689 NAME as interesting. BLOCKS and INSERT_PHI_P are as in
2690 prepare_names_to_update. */
2693 prepare_use_sites_for (tree name
, bool insert_phi_p
)
2695 use_operand_p use_p
;
2696 imm_use_iterator iter
;
2698 FOR_EACH_IMM_USE_FAST (use_p
, iter
, name
)
2700 gimple stmt
= USE_STMT (use_p
);
2701 basic_block bb
= gimple_bb (stmt
);
2703 if (gimple_code (stmt
) == GIMPLE_PHI
)
2705 int ix
= PHI_ARG_INDEX_FROM_USE (use_p
);
2706 edge e
= gimple_phi_arg_edge (stmt
, ix
);
2707 mark_use_interesting (name
, stmt
, e
->src
, insert_phi_p
);
2711 /* For regular statements, mark this as an interesting use
2713 mark_use_interesting (name
, stmt
, bb
, insert_phi_p
);
2719 /* Helper for prepare_names_to_update. Mark the definition site for
2720 NAME as interesting. BLOCKS and INSERT_PHI_P are as in
2721 prepare_names_to_update. */
2724 prepare_def_site_for (tree name
, bool insert_phi_p
)
2729 gcc_assert (names_to_release
== NULL
2730 || !bitmap_bit_p (names_to_release
, SSA_NAME_VERSION (name
)));
2732 stmt
= SSA_NAME_DEF_STMT (name
);
2733 bb
= gimple_bb (stmt
);
2736 gcc_assert (bb
->index
< last_basic_block
);
2737 mark_block_for_update (bb
);
2738 mark_def_interesting (name
, stmt
, bb
, insert_phi_p
);
2743 /* Mark definition and use sites of names in NEW_SSA_NAMES and
2744 OLD_SSA_NAMES. INSERT_PHI_P is true if the caller wants to insert
2745 PHI nodes for newly created names. */
2748 prepare_names_to_update (bool insert_phi_p
)
2752 sbitmap_iterator sbi
;
2754 /* If a name N from NEW_SSA_NAMES is also marked to be released,
2755 remove it from NEW_SSA_NAMES so that we don't try to visit its
2756 defining basic block (which most likely doesn't exist). Notice
2757 that we cannot do the same with names in OLD_SSA_NAMES because we
2758 want to replace existing instances. */
2759 if (names_to_release
)
2760 EXECUTE_IF_SET_IN_BITMAP (names_to_release
, 0, i
, bi
)
2761 RESET_BIT (new_ssa_names
, i
);
2763 /* First process names in NEW_SSA_NAMES. Otherwise, uses of old
2764 names may be considered to be live-in on blocks that contain
2765 definitions for their replacements. */
2766 EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names
, 0, i
, sbi
)
2767 prepare_def_site_for (ssa_name (i
), insert_phi_p
);
2769 /* If an old name is in NAMES_TO_RELEASE, we cannot remove it from
2770 OLD_SSA_NAMES, but we have to ignore its definition site. */
2771 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
2773 if (names_to_release
== NULL
|| !bitmap_bit_p (names_to_release
, i
))
2774 prepare_def_site_for (ssa_name (i
), insert_phi_p
);
2775 prepare_use_sites_for (ssa_name (i
), insert_phi_p
);
2780 /* Dump all the names replaced by NAME to FILE. */
2783 dump_names_replaced_by (FILE *file
, tree name
)
2789 print_generic_expr (file
, name
, 0);
2790 fprintf (file
, " -> { ");
2792 old_set
= names_replaced_by (name
);
2793 EXECUTE_IF_SET_IN_BITMAP (old_set
, 0, i
, bi
)
2795 print_generic_expr (file
, ssa_name (i
), 0);
2796 fprintf (file
, " ");
2799 fprintf (file
, "}\n");
2803 /* Dump all the names replaced by NAME to stderr. */
2806 debug_names_replaced_by (tree name
)
2808 dump_names_replaced_by (stderr
, name
);
2812 /* Dump SSA update information to FILE. */
2815 dump_update_ssa (FILE *file
)
2820 if (!need_ssa_update_p (cfun
))
2823 if (new_ssa_names
&& sbitmap_first_set_bit (new_ssa_names
) >= 0)
2825 sbitmap_iterator sbi
;
2827 fprintf (file
, "\nSSA replacement table\n");
2828 fprintf (file
, "N_i -> { O_1 ... O_j } means that N_i replaces "
2829 "O_1, ..., O_j\n\n");
2831 EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names
, 0, i
, sbi
)
2832 dump_names_replaced_by (file
, ssa_name (i
));
2834 fprintf (file
, "\n");
2835 fprintf (file
, "Number of virtual NEW -> OLD mappings: %7u\n",
2836 update_ssa_stats
.num_virtual_mappings
);
2837 fprintf (file
, "Number of real NEW -> OLD mappings: %7u\n",
2838 update_ssa_stats
.num_total_mappings
2839 - update_ssa_stats
.num_virtual_mappings
);
2840 fprintf (file
, "Number of total NEW -> OLD mappings: %7u\n",
2841 update_ssa_stats
.num_total_mappings
);
2843 fprintf (file
, "\nNumber of virtual symbols: %u\n",
2844 update_ssa_stats
.num_virtual_symbols
);
2847 if (!bitmap_empty_p (SYMS_TO_RENAME (cfun
)))
2849 fprintf (file
, "\nSymbols to be put in SSA form\n");
2850 dump_decl_set (file
, SYMS_TO_RENAME (cfun
));
2851 fprintf (file
, "\n");
2854 if (names_to_release
&& !bitmap_empty_p (names_to_release
))
2856 fprintf (file
, "\nSSA names to release after updating the SSA web\n\n");
2857 EXECUTE_IF_SET_IN_BITMAP (names_to_release
, 0, i
, bi
)
2859 print_generic_expr (file
, ssa_name (i
), 0);
2860 fprintf (file
, " ");
2862 fprintf (file
, "\n");
2867 /* Dump SSA update information to stderr. */
2870 debug_update_ssa (void)
2872 dump_update_ssa (stderr
);
2876 /* Initialize data structures used for incremental SSA updates. */
2879 init_update_ssa (struct function
*fn
)
2881 /* Reserve more space than the current number of names. The calls to
2882 add_new_name_mapping are typically done after creating new SSA
2883 names, so we'll need to reallocate these arrays. */
2884 old_ssa_names
= sbitmap_alloc (num_ssa_names
+ NAME_SETS_GROWTH_FACTOR
);
2885 sbitmap_zero (old_ssa_names
);
2887 new_ssa_names
= sbitmap_alloc (num_ssa_names
+ NAME_SETS_GROWTH_FACTOR
);
2888 sbitmap_zero (new_ssa_names
);
2890 repl_tbl
= htab_create (20, repl_map_hash
, repl_map_eq
, repl_map_free
);
2891 names_to_release
= NULL
;
2892 memset (&update_ssa_stats
, 0, sizeof (update_ssa_stats
));
2893 update_ssa_stats
.virtual_symbols
= BITMAP_ALLOC (NULL
);
2894 update_ssa_initialized_fn
= fn
;
2898 /* Deallocate data structures used for incremental SSA updates. */
2901 delete_update_ssa (void)
2906 sbitmap_free (old_ssa_names
);
2907 old_ssa_names
= NULL
;
2909 sbitmap_free (new_ssa_names
);
2910 new_ssa_names
= NULL
;
2912 htab_delete (repl_tbl
);
2915 bitmap_clear (SYMS_TO_RENAME (update_ssa_initialized_fn
));
2916 BITMAP_FREE (update_ssa_stats
.virtual_symbols
);
2918 if (names_to_release
)
2920 EXECUTE_IF_SET_IN_BITMAP (names_to_release
, 0, i
, bi
)
2921 release_ssa_name (ssa_name (i
));
2922 BITMAP_FREE (names_to_release
);
2925 clear_ssa_name_info ();
2927 fini_ssa_renamer ();
2929 if (blocks_with_phis_to_rewrite
)
2930 EXECUTE_IF_SET_IN_BITMAP (blocks_with_phis_to_rewrite
, 0, i
, bi
)
2932 gimple_vec phis
= VEC_index (gimple_vec
, phis_to_rewrite
, i
);
2934 VEC_free (gimple
, heap
, phis
);
2935 VEC_replace (gimple_vec
, phis_to_rewrite
, i
, NULL
);
2938 BITMAP_FREE (blocks_with_phis_to_rewrite
);
2939 BITMAP_FREE (blocks_to_update
);
2940 update_ssa_initialized_fn
= NULL
;
2944 /* Create a new name for OLD_NAME in statement STMT and replace the
2945 operand pointed to by DEF_P with the newly created name. Return
2946 the new name and register the replacement mapping <NEW, OLD> in
2947 update_ssa's tables. */
2950 create_new_def_for (tree old_name
, gimple stmt
, def_operand_p def
)
2952 tree new_name
= duplicate_ssa_name (old_name
, stmt
);
2954 SET_DEF (def
, new_name
);
2956 if (gimple_code (stmt
) == GIMPLE_PHI
)
2958 basic_block bb
= gimple_bb (stmt
);
2960 /* If needed, mark NEW_NAME as occurring in an abnormal PHI node. */
2961 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_name
) = bb_has_abnormal_pred (bb
);
2964 register_new_name_mapping (new_name
, old_name
);
2966 /* For the benefit of passes that will be updating the SSA form on
2967 their own, set the current reaching definition of OLD_NAME to be
2969 set_current_def (old_name
, new_name
);
2975 /* Register name NEW to be a replacement for name OLD. This function
2976 must be called for every replacement that should be performed by
2980 register_new_name_mapping (tree new_tree
, tree old
)
2982 if (!update_ssa_initialized_fn
)
2983 init_update_ssa (cfun
);
2985 gcc_assert (update_ssa_initialized_fn
== cfun
);
2987 add_new_name_mapping (new_tree
, old
);
2991 /* Register symbol SYM to be renamed by update_ssa. */
2994 mark_sym_for_renaming (tree sym
)
2996 bitmap_set_bit (SYMS_TO_RENAME (cfun
), DECL_UID (sym
));
3000 /* Register all the symbols in SET to be renamed by update_ssa. */
3003 mark_set_for_renaming (bitmap set
)
3008 if (set
== NULL
|| bitmap_empty_p (set
))
3011 EXECUTE_IF_SET_IN_BITMAP (set
, 0, i
, bi
)
3012 mark_sym_for_renaming (referenced_var (i
));
3016 /* Return true if there is any work to be done by update_ssa
3020 need_ssa_update_p (struct function
*fn
)
3022 gcc_assert (fn
!= NULL
);
3023 return (update_ssa_initialized_fn
== fn
3025 && !bitmap_empty_p (SYMS_TO_RENAME (fn
))));
3028 /* Return true if SSA name mappings have been registered for SSA updating. */
3031 name_mappings_registered_p (void)
3033 if (!update_ssa_initialized_fn
)
3036 gcc_assert (update_ssa_initialized_fn
== cfun
);
3038 return repl_tbl
&& htab_elements (repl_tbl
) > 0;
3041 /* Return true if name N has been registered in the replacement table. */
3044 name_registered_for_update_p (tree n ATTRIBUTE_UNUSED
)
3046 if (!update_ssa_initialized_fn
)
3049 gcc_assert (update_ssa_initialized_fn
== cfun
);
3051 return is_new_name (n
) || is_old_name (n
);
3055 /* Mark NAME to be released after update_ssa has finished. */
3058 release_ssa_name_after_update_ssa (tree name
)
3060 gcc_assert (cfun
&& update_ssa_initialized_fn
== cfun
);
3062 if (names_to_release
== NULL
)
3063 names_to_release
= BITMAP_ALLOC (NULL
);
3065 bitmap_set_bit (names_to_release
, SSA_NAME_VERSION (name
));
3069 /* Insert new PHI nodes to replace VAR. DFS contains dominance
3070 frontier information. BLOCKS is the set of blocks to be updated.
3072 This is slightly different than the regular PHI insertion
3073 algorithm. The value of UPDATE_FLAGS controls how PHI nodes for
3074 real names (i.e., GIMPLE registers) are inserted:
3076 - If UPDATE_FLAGS == TODO_update_ssa, we are only interested in PHI
3077 nodes inside the region affected by the block that defines VAR
3078 and the blocks that define all its replacements. All these
3079 definition blocks are stored in DEF_BLOCKS[VAR]->DEF_BLOCKS.
3081 First, we compute the entry point to the region (ENTRY). This is
3082 given by the nearest common dominator to all the definition
3083 blocks. When computing the iterated dominance frontier (IDF), any
3084 block not strictly dominated by ENTRY is ignored.
3086 We then call the standard PHI insertion algorithm with the pruned
3089 - If UPDATE_FLAGS == TODO_update_ssa_full_phi, the IDF for real
3090 names is not pruned. PHI nodes are inserted at every IDF block. */
3093 insert_updated_phi_nodes_for (tree var
, bitmap_head
*dfs
, bitmap blocks
,
3094 unsigned update_flags
)
3097 struct def_blocks_d
*db
;
3098 bitmap idf
, pruned_idf
;
3102 if (TREE_CODE (var
) == SSA_NAME
)
3103 gcc_checking_assert (is_old_name (var
));
3105 gcc_checking_assert (symbol_marked_for_renaming (var
));
3107 /* Get all the definition sites for VAR. */
3108 db
= find_def_blocks_for (var
);
3110 /* No need to do anything if there were no definitions to VAR. */
3111 if (db
== NULL
|| bitmap_empty_p (db
->def_blocks
))
3114 /* Compute the initial iterated dominance frontier. */
3115 idf
= compute_idf (db
->def_blocks
, dfs
);
3116 pruned_idf
= BITMAP_ALLOC (NULL
);
3118 if (TREE_CODE (var
) == SSA_NAME
)
3120 if (update_flags
== TODO_update_ssa
)
3122 /* If doing regular SSA updates for GIMPLE registers, we are
3123 only interested in IDF blocks dominated by the nearest
3124 common dominator of all the definition blocks. */
3125 entry
= nearest_common_dominator_for_set (CDI_DOMINATORS
,
3127 if (entry
!= ENTRY_BLOCK_PTR
)
3128 EXECUTE_IF_SET_IN_BITMAP (idf
, 0, i
, bi
)
3129 if (BASIC_BLOCK (i
) != entry
3130 && dominated_by_p (CDI_DOMINATORS
, BASIC_BLOCK (i
), entry
))
3131 bitmap_set_bit (pruned_idf
, i
);
3135 /* Otherwise, do not prune the IDF for VAR. */
3136 gcc_assert (update_flags
== TODO_update_ssa_full_phi
);
3137 bitmap_copy (pruned_idf
, idf
);
3142 /* Otherwise, VAR is a symbol that needs to be put into SSA form
3143 for the first time, so we need to compute the full IDF for
3145 bitmap_copy (pruned_idf
, idf
);
3148 if (!bitmap_empty_p (pruned_idf
))
3150 /* Make sure that PRUNED_IDF blocks and all their feeding blocks
3151 are included in the region to be updated. The feeding blocks
3152 are important to guarantee that the PHI arguments are renamed
3155 /* FIXME, this is not needed if we are updating symbols. We are
3156 already starting at the ENTRY block anyway. */
3157 bitmap_ior_into (blocks
, pruned_idf
);
3158 EXECUTE_IF_SET_IN_BITMAP (pruned_idf
, 0, i
, bi
)
3162 basic_block bb
= BASIC_BLOCK (i
);
3164 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
3165 if (e
->src
->index
>= 0)
3166 bitmap_set_bit (blocks
, e
->src
->index
);
3169 insert_phi_nodes_for (var
, pruned_idf
, true);
3172 BITMAP_FREE (pruned_idf
);
3177 /* Heuristic to determine whether SSA name mappings for virtual names
3178 should be discarded and their symbols rewritten from scratch. When
3179 there is a large number of mappings for virtual names, the
3180 insertion of PHI nodes for the old names in the mappings takes
3181 considerable more time than if we inserted PHI nodes for the
3184 Currently the heuristic takes these stats into account:
3186 - Number of mappings for virtual SSA names.
3187 - Number of distinct virtual symbols involved in those mappings.
3189 If the number of virtual mappings is much larger than the number of
3190 virtual symbols, then it will be faster to compute PHI insertion
3191 spots for the symbols. Even if this involves traversing the whole
3192 CFG, which is what happens when symbols are renamed from scratch. */
3195 switch_virtuals_to_full_rewrite_p (void)
3197 if (update_ssa_stats
.num_virtual_mappings
< (unsigned) MIN_VIRTUAL_MAPPINGS
)
3200 if (update_ssa_stats
.num_virtual_mappings
3201 > (unsigned) VIRTUAL_MAPPINGS_TO_SYMS_RATIO
3202 * update_ssa_stats
.num_virtual_symbols
)
3209 /* Remove every virtual mapping and mark all the affected virtual
3210 symbols for renaming. */
3213 switch_virtuals_to_full_rewrite (void)
3216 sbitmap_iterator sbi
;
3220 fprintf (dump_file
, "\nEnabled virtual name mapping heuristic.\n");
3221 fprintf (dump_file
, "\tNumber of virtual mappings: %7u\n",
3222 update_ssa_stats
.num_virtual_mappings
);
3223 fprintf (dump_file
, "\tNumber of unique virtual symbols: %7u\n",
3224 update_ssa_stats
.num_virtual_symbols
);
3225 fprintf (dump_file
, "Updating FUD-chains from top of CFG will be "
3226 "faster than processing\nthe name mappings.\n\n");
3229 /* Remove all virtual names from NEW_SSA_NAMES and OLD_SSA_NAMES.
3230 Note that it is not really necessary to remove the mappings from
3231 REPL_TBL, that would only waste time. */
3232 EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names
, 0, i
, sbi
)
3233 if (!is_gimple_reg (ssa_name (i
)))
3234 RESET_BIT (new_ssa_names
, i
);
3236 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
3237 if (!is_gimple_reg (ssa_name (i
)))
3238 RESET_BIT (old_ssa_names
, i
);
3240 mark_set_for_renaming (update_ssa_stats
.virtual_symbols
);
3244 /* Given a set of newly created SSA names (NEW_SSA_NAMES) and a set of
3245 existing SSA names (OLD_SSA_NAMES), update the SSA form so that:
3247 1- The names in OLD_SSA_NAMES dominated by the definitions of
3248 NEW_SSA_NAMES are all re-written to be reached by the
3249 appropriate definition from NEW_SSA_NAMES.
3251 2- If needed, new PHI nodes are added to the iterated dominance
3252 frontier of the blocks where each of NEW_SSA_NAMES are defined.
3254 The mapping between OLD_SSA_NAMES and NEW_SSA_NAMES is setup by
3255 calling register_new_name_mapping for every pair of names that the
3256 caller wants to replace.
3258 The caller identifies the new names that have been inserted and the
3259 names that need to be replaced by calling register_new_name_mapping
3260 for every pair <NEW, OLD>. Note that the function assumes that the
3261 new names have already been inserted in the IL.
3263 For instance, given the following code:
3266 2 x_1 = PHI (0, x_5)
3277 Suppose that we insert new names x_10 and x_11 (lines 4 and 8).
3280 2 x_1 = PHI (0, x_5)
3293 We want to replace all the uses of x_1 with the new definitions of
3294 x_10 and x_11. Note that the only uses that should be replaced are
3295 those at lines 5, 9 and 11. Also, the use of x_7 at line 9 should
3296 *not* be replaced (this is why we cannot just mark symbol 'x' for
3299 Additionally, we may need to insert a PHI node at line 11 because
3300 that is a merge point for x_10 and x_11. So the use of x_1 at line
3301 11 will be replaced with the new PHI node. The insertion of PHI
3302 nodes is optional. They are not strictly necessary to preserve the
3303 SSA form, and depending on what the caller inserted, they may not
3304 even be useful for the optimizers. UPDATE_FLAGS controls various
3305 aspects of how update_ssa operates, see the documentation for
3306 TODO_update_ssa*. */
3309 update_ssa (unsigned update_flags
)
3311 basic_block bb
, start_bb
;
3315 sbitmap_iterator sbi
;
3317 if (!need_ssa_update_p (cfun
))
3320 timevar_push (TV_TREE_SSA_INCREMENTAL
);
3322 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
3323 fprintf (dump_file
, "\nUpdating SSA:\n");
3325 if (!update_ssa_initialized_fn
)
3326 init_update_ssa (cfun
);
3327 gcc_assert (update_ssa_initialized_fn
== cfun
);
3329 blocks_with_phis_to_rewrite
= BITMAP_ALLOC (NULL
);
3330 if (!phis_to_rewrite
)
3331 phis_to_rewrite
= VEC_alloc (gimple_vec
, heap
, last_basic_block
);
3332 blocks_to_update
= BITMAP_ALLOC (NULL
);
3334 /* Ensure that the dominance information is up-to-date. */
3335 calculate_dominance_info (CDI_DOMINATORS
);
3337 /* Only one update flag should be set. */
3338 gcc_assert (update_flags
== TODO_update_ssa
3339 || update_flags
== TODO_update_ssa_no_phi
3340 || update_flags
== TODO_update_ssa_full_phi
3341 || update_flags
== TODO_update_ssa_only_virtuals
);
3343 /* If we only need to update virtuals, remove all the mappings for
3344 real names before proceeding. The caller is responsible for
3345 having dealt with the name mappings before calling update_ssa. */
3346 if (update_flags
== TODO_update_ssa_only_virtuals
)
3348 sbitmap_zero (old_ssa_names
);
3349 sbitmap_zero (new_ssa_names
);
3350 htab_empty (repl_tbl
);
3353 insert_phi_p
= (update_flags
!= TODO_update_ssa_no_phi
);
3357 /* If the caller requested PHI nodes to be added, initialize
3358 live-in information data structures (DEF_BLOCKS). */
3360 /* For each SSA name N, the DEF_BLOCKS table describes where the
3361 name is defined, which blocks have PHI nodes for N, and which
3362 blocks have uses of N (i.e., N is live-on-entry in those
3364 def_blocks
= htab_create (num_ssa_names
, def_blocks_hash
,
3365 def_blocks_eq
, def_blocks_free
);
3372 /* Heuristic to avoid massive slow downs when the replacement
3373 mappings include lots of virtual names. */
3374 if (insert_phi_p
&& switch_virtuals_to_full_rewrite_p ())
3375 switch_virtuals_to_full_rewrite ();
3377 /* If there are names defined in the replacement table, prepare
3378 definition and use sites for all the names in NEW_SSA_NAMES and
3380 if (sbitmap_first_set_bit (new_ssa_names
) >= 0)
3382 prepare_names_to_update (insert_phi_p
);
3384 /* If all the names in NEW_SSA_NAMES had been marked for
3385 removal, and there are no symbols to rename, then there's
3386 nothing else to do. */
3387 if (sbitmap_first_set_bit (new_ssa_names
) < 0
3388 && bitmap_empty_p (SYMS_TO_RENAME (cfun
)))
3392 /* Next, determine the block at which to start the renaming process. */
3393 if (!bitmap_empty_p (SYMS_TO_RENAME (cfun
)))
3395 /* If we have to rename some symbols from scratch, we need to
3396 start the process at the root of the CFG. FIXME, it should
3397 be possible to determine the nearest block that had a
3398 definition for each of the symbols that are marked for
3399 updating. For now this seems more work than it's worth. */
3400 start_bb
= ENTRY_BLOCK_PTR
;
3402 /* Traverse the CFG looking for existing definitions and uses of
3403 symbols in SYMS_TO_RENAME. Mark interesting blocks and
3404 statements and set local live-in information for the PHI
3405 placement heuristics. */
3406 prepare_block_for_update (start_bb
, insert_phi_p
);
3410 /* Otherwise, the entry block to the region is the nearest
3411 common dominator for the blocks in BLOCKS. */
3412 start_bb
= nearest_common_dominator_for_set (CDI_DOMINATORS
,
3416 /* If requested, insert PHI nodes at the iterated dominance frontier
3417 of every block, creating new definitions for names in OLD_SSA_NAMES
3418 and for symbols in SYMS_TO_RENAME. */
3423 /* If the caller requested PHI nodes to be added, compute
3424 dominance frontiers. */
3425 dfs
= XNEWVEC (bitmap_head
, last_basic_block
);
3427 bitmap_initialize (&dfs
[bb
->index
], &bitmap_default_obstack
);
3428 compute_dominance_frontiers (dfs
);
3430 if (sbitmap_first_set_bit (old_ssa_names
) >= 0)
3432 sbitmap_iterator sbi
;
3434 /* insert_update_phi_nodes_for will call add_new_name_mapping
3435 when inserting new PHI nodes, so the set OLD_SSA_NAMES
3436 will grow while we are traversing it (but it will not
3437 gain any new members). Copy OLD_SSA_NAMES to a temporary
3439 sbitmap tmp
= sbitmap_alloc (old_ssa_names
->n_bits
);
3440 sbitmap_copy (tmp
, old_ssa_names
);
3441 EXECUTE_IF_SET_IN_SBITMAP (tmp
, 0, i
, sbi
)
3442 insert_updated_phi_nodes_for (ssa_name (i
), dfs
, blocks_to_update
,
3447 EXECUTE_IF_SET_IN_BITMAP (SYMS_TO_RENAME (cfun
), 0, i
, bi
)
3448 insert_updated_phi_nodes_for (referenced_var (i
), dfs
, blocks_to_update
,
3452 bitmap_clear (&dfs
[bb
->index
]);
3455 /* Insertion of PHI nodes may have added blocks to the region.
3456 We need to re-compute START_BB to include the newly added
3458 if (start_bb
!= ENTRY_BLOCK_PTR
)
3459 start_bb
= nearest_common_dominator_for_set (CDI_DOMINATORS
,
3463 /* Reset the current definition for name and symbol before renaming
3465 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
3466 set_current_def (ssa_name (i
), NULL_TREE
);
3468 EXECUTE_IF_SET_IN_BITMAP (SYMS_TO_RENAME (cfun
), 0, i
, bi
)
3469 set_current_def (referenced_var (i
), NULL_TREE
);
3471 /* Now start the renaming process at START_BB. */
3472 interesting_blocks
= sbitmap_alloc (last_basic_block
);
3473 sbitmap_zero (interesting_blocks
);
3474 EXECUTE_IF_SET_IN_BITMAP (blocks_to_update
, 0, i
, bi
)
3475 SET_BIT (interesting_blocks
, i
);
3477 rewrite_blocks (start_bb
, REWRITE_UPDATE
);
3479 sbitmap_free (interesting_blocks
);
3481 /* Debugging dumps. */
3487 dump_update_ssa (dump_file
);
3489 fprintf (dump_file
, "Incremental SSA update started at block: %d\n",
3493 EXECUTE_IF_SET_IN_BITMAP (blocks_to_update
, 0, i
, bi
)
3495 fprintf (dump_file
, "Number of blocks in CFG: %d\n", last_basic_block
);
3496 fprintf (dump_file
, "Number of blocks to update: %d (%3.0f%%)\n",
3497 c
, PERCENT (c
, last_basic_block
));
3499 if (dump_flags
& TDF_DETAILS
)
3501 fprintf (dump_file
, "Affected blocks:");
3502 EXECUTE_IF_SET_IN_BITMAP (blocks_to_update
, 0, i
, bi
)
3503 fprintf (dump_file
, " %u", i
);
3504 fprintf (dump_file
, "\n");
3507 fprintf (dump_file
, "\n\n");
3510 /* Free allocated memory. */
3512 delete_update_ssa ();
3514 timevar_pop (TV_TREE_SSA_INCREMENTAL
);