1 /* Rewrite a program in Normal form into SSA.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
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"
34 #include "diagnostic.h"
35 #include "tree-pretty-print.h"
36 #include "gimple-pretty-print.h"
38 #include "tree-flow.h"
40 #include "tree-inline.h"
43 #include "tree-dump.h"
44 #include "tree-pass.h"
51 /* This file builds the SSA form for a function as described in:
52 R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. Zadeck. Efficiently
53 Computing Static Single Assignment Form and the Control Dependence
54 Graph. ACM Transactions on Programming Languages and Systems,
55 13(4):451-490, October 1991. */
57 /* Structure to map a variable VAR to the set of blocks that contain
58 definitions for VAR. */
64 /* Blocks that contain definitions of VAR. Bit I will be set if the
65 Ith block contains a definition of VAR. */
68 /* Blocks that contain a PHI node for VAR. */
71 /* Blocks where VAR is live-on-entry. Similar semantics as
77 /* Each entry in DEF_BLOCKS contains an element of type STRUCT
78 DEF_BLOCKS_D, mapping a variable VAR to a bitmap describing all the
79 basic blocks where VAR is defined (assigned a new value). It also
80 contains a bitmap of all the blocks where VAR is live-on-entry
81 (i.e., there is a use of VAR in block B without a preceding
82 definition in B). The live-on-entry information is used when
83 computing PHI pruning heuristics. */
84 static htab_t def_blocks
;
86 /* Stack of trees used to restore the global currdefs to its original
87 state after completing rewriting of a block and its dominator
88 children. Its elements have the following properties:
90 - An SSA_NAME (N) indicates that the current definition of the
91 underlying variable should be set to the given SSA_NAME. If the
92 symbol associated with the SSA_NAME is not a GIMPLE register, the
93 next slot in the stack must be a _DECL node (SYM). In this case,
94 the name N in the previous slot is the current reaching
97 - A _DECL node indicates that the underlying variable has no
100 - A NULL node at the top entry is used to mark the last slot
101 associated with the current block. */
102 static VEC(tree
,heap
) *block_defs_stack
;
105 /* Set of existing SSA names being replaced by update_ssa. */
106 static sbitmap old_ssa_names
;
108 /* Set of new SSA names being added by update_ssa. Note that both
109 NEW_SSA_NAMES and OLD_SSA_NAMES are dense bitmaps because most of
110 the operations done on them are presence tests. */
111 static sbitmap new_ssa_names
;
113 sbitmap interesting_blocks
;
115 /* Set of SSA names that have been marked to be released after they
116 were registered in the replacement table. They will be finally
117 released after we finish updating the SSA web. */
118 static bitmap names_to_release
;
120 static VEC(gimple_vec
, heap
) *phis_to_rewrite
;
122 /* The bitmap of non-NULL elements of PHIS_TO_REWRITE. */
123 static bitmap blocks_with_phis_to_rewrite
;
125 /* Growth factor for NEW_SSA_NAMES and OLD_SSA_NAMES. These sets need
126 to grow as the callers to register_new_name_mapping will typically
127 create new names on the fly. FIXME. Currently set to 1/3 to avoid
128 frequent reallocations but still need to find a reasonable growth
130 #define NAME_SETS_GROWTH_FACTOR (MAX (3, num_ssa_names / 3))
132 /* Tuple used to represent replacement mappings. */
140 /* NEW -> OLD_SET replacement table. If we are replacing several
141 existing SSA names O_1, O_2, ..., O_j with a new name N_i,
142 then REPL_TBL[N_i] = { O_1, O_2, ..., O_j }. */
143 static htab_t repl_tbl
;
145 /* The function the SSA updating data structures have been initialized for.
146 NULL if they need to be initialized by register_new_name_mapping. */
147 static struct function
*update_ssa_initialized_fn
= NULL
;
149 /* Statistics kept by update_ssa to use in the virtual mapping
150 heuristic. If the number of virtual mappings is beyond certain
151 threshold, the updater will switch from using the mappings into
152 renaming the virtual symbols from scratch. In some cases, the
153 large number of name mappings for virtual names causes significant
154 slowdowns in the PHI insertion code. */
155 struct update_ssa_stats_d
157 unsigned num_virtual_mappings
;
158 unsigned num_total_mappings
;
159 bitmap virtual_symbols
;
160 unsigned num_virtual_symbols
;
162 static struct update_ssa_stats_d update_ssa_stats
;
164 /* Global data to attach to the main dominator walk structure. */
165 struct mark_def_sites_global_data
167 /* This bitmap contains the variables which are set before they
168 are used in a basic block. */
173 /* Information stored for SSA names. */
176 /* The current reaching definition replacing this SSA name. */
179 /* This field indicates whether or not the variable may need PHI nodes.
180 See the enum's definition for more detailed information about the
182 ENUM_BITFIELD (need_phi_state
) need_phi_state
: 2;
184 /* Age of this record (so that info_for_ssa_name table can be cleared
185 quickly); if AGE < CURRENT_INFO_FOR_SSA_NAME_AGE, then the fields
186 are assumed to be null. */
190 /* The information associated with names. */
191 typedef struct ssa_name_info
*ssa_name_info_p
;
192 DEF_VEC_P (ssa_name_info_p
);
193 DEF_VEC_ALLOC_P (ssa_name_info_p
, heap
);
195 static VEC(ssa_name_info_p
, heap
) *info_for_ssa_name
;
196 static unsigned current_info_for_ssa_name_age
;
198 /* The set of blocks affected by update_ssa. */
199 static bitmap blocks_to_update
;
201 /* The main entry point to the SSA renamer (rewrite_blocks) may be
202 called several times to do different, but related, tasks.
203 Initially, we need it to rename the whole program into SSA form.
204 At other times, we may need it to only rename into SSA newly
205 exposed symbols. Finally, we can also call it to incrementally fix
206 an already built SSA web. */
208 /* Convert the whole function into SSA form. */
211 /* Incrementally update the SSA web by replacing existing SSA
212 names with new ones. See update_ssa for details. */
219 /* Prototypes for debugging functions. */
220 extern void dump_tree_ssa (FILE *);
221 extern void debug_tree_ssa (void);
222 extern void debug_def_blocks (void);
223 extern void dump_tree_ssa_stats (FILE *);
224 extern void debug_tree_ssa_stats (void);
225 extern void dump_update_ssa (FILE *);
226 extern void debug_update_ssa (void);
227 extern void dump_names_replaced_by (FILE *, tree
);
228 extern void debug_names_replaced_by (tree
);
229 extern void dump_def_blocks (FILE *);
230 extern void debug_def_blocks (void);
231 extern void dump_defs_stack (FILE *, int);
232 extern void debug_defs_stack (int);
233 extern void dump_currdefs (FILE *);
234 extern void debug_currdefs (void);
236 /* Return true if STMT needs to be rewritten. When renaming a subset
237 of the variables, not all statements will be processed. This is
238 decided in mark_def_sites. */
241 rewrite_uses_p (gimple stmt
)
243 return gimple_visited_p (stmt
);
247 /* Set the rewrite marker on STMT to the value given by REWRITE_P. */
250 set_rewrite_uses (gimple stmt
, bool rewrite_p
)
252 gimple_set_visited (stmt
, rewrite_p
);
256 /* Return true if the DEFs created by statement STMT should be
257 registered when marking new definition sites. This is slightly
258 different than rewrite_uses_p: it's used by update_ssa to
259 distinguish statements that need to have both uses and defs
260 processed from those that only need to have their defs processed.
261 Statements that define new SSA names only need to have their defs
262 registered, but they don't need to have their uses renamed. */
265 register_defs_p (gimple stmt
)
267 return gimple_plf (stmt
, GF_PLF_1
) != 0;
271 /* If REGISTER_DEFS_P is true, mark STMT to have its DEFs registered. */
274 set_register_defs (gimple stmt
, bool register_defs_p
)
276 gimple_set_plf (stmt
, GF_PLF_1
, register_defs_p
);
280 /* Get the information associated with NAME. */
282 static inline ssa_name_info_p
283 get_ssa_name_ann (tree name
)
285 unsigned ver
= SSA_NAME_VERSION (name
);
286 unsigned len
= VEC_length (ssa_name_info_p
, info_for_ssa_name
);
287 struct ssa_name_info
*info
;
291 unsigned new_len
= num_ssa_names
;
293 VEC_reserve (ssa_name_info_p
, heap
, info_for_ssa_name
, new_len
);
294 while (len
++ < new_len
)
296 struct ssa_name_info
*info
= XCNEW (struct ssa_name_info
);
297 info
->age
= current_info_for_ssa_name_age
;
298 VEC_quick_push (ssa_name_info_p
, info_for_ssa_name
, info
);
302 info
= VEC_index (ssa_name_info_p
, info_for_ssa_name
, ver
);
303 if (info
->age
< current_info_for_ssa_name_age
)
305 info
->need_phi_state
= NEED_PHI_STATE_UNKNOWN
;
306 info
->current_def
= NULL_TREE
;
307 info
->age
= current_info_for_ssa_name_age
;
314 /* Clears info for SSA names. */
317 clear_ssa_name_info (void)
319 current_info_for_ssa_name_age
++;
323 /* Get phi_state field for VAR. */
325 static inline enum need_phi_state
326 get_phi_state (tree var
)
328 if (TREE_CODE (var
) == SSA_NAME
)
329 return get_ssa_name_ann (var
)->need_phi_state
;
331 return var_ann (var
)->need_phi_state
;
335 /* Sets phi_state field for VAR to STATE. */
338 set_phi_state (tree var
, enum need_phi_state state
)
340 if (TREE_CODE (var
) == SSA_NAME
)
341 get_ssa_name_ann (var
)->need_phi_state
= state
;
343 var_ann (var
)->need_phi_state
= state
;
347 /* Return the current definition for VAR. */
350 get_current_def (tree var
)
352 if (TREE_CODE (var
) == SSA_NAME
)
353 return get_ssa_name_ann (var
)->current_def
;
355 return var_ann (var
)->current_def
;
359 /* Sets current definition of VAR to DEF. */
362 set_current_def (tree var
, tree def
)
364 if (TREE_CODE (var
) == SSA_NAME
)
365 get_ssa_name_ann (var
)->current_def
= def
;
367 var_ann (var
)->current_def
= def
;
371 /* Compute global livein information given the set of blocks where
372 an object is locally live at the start of the block (LIVEIN)
373 and the set of blocks where the object is defined (DEF_BLOCKS).
375 Note: This routine augments the existing local livein information
376 to include global livein (i.e., it modifies the underlying bitmap
380 compute_global_livein (bitmap livein ATTRIBUTE_UNUSED
, bitmap def_blocks ATTRIBUTE_UNUSED
)
382 basic_block bb
, *worklist
, *tos
;
387 = (basic_block
*) xmalloc (sizeof (basic_block
) * (last_basic_block
+ 1));
389 EXECUTE_IF_SET_IN_BITMAP (livein
, 0, i
, bi
)
390 *tos
++ = BASIC_BLOCK (i
);
392 /* Iterate until the worklist is empty. */
393 while (tos
!= worklist
)
398 /* Pull a block off the worklist. */
401 /* For each predecessor block. */
402 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
404 basic_block pred
= e
->src
;
405 int pred_index
= pred
->index
;
407 /* None of this is necessary for the entry block. */
408 if (pred
!= ENTRY_BLOCK_PTR
409 && ! bitmap_bit_p (livein
, pred_index
)
410 && ! bitmap_bit_p (def_blocks
, pred_index
))
413 bitmap_set_bit (livein
, pred_index
);
422 /* Cleans up the REWRITE_THIS_STMT and REGISTER_DEFS_IN_THIS_STMT flags for
423 all statements in basic block BB. */
426 initialize_flags_in_bb (basic_block bb
)
429 gimple_stmt_iterator gsi
;
431 for (gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
433 gimple phi
= gsi_stmt (gsi
);
434 set_rewrite_uses (phi
, false);
435 set_register_defs (phi
, false);
438 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
440 stmt
= gsi_stmt (gsi
);
442 /* We are going to use the operand cache API, such as
443 SET_USE, SET_DEF, and FOR_EACH_IMM_USE_FAST. The operand
444 cache for each statement should be up-to-date. */
445 gcc_assert (!gimple_modified_p (stmt
));
446 set_rewrite_uses (stmt
, false);
447 set_register_defs (stmt
, false);
451 /* Mark block BB as interesting for update_ssa. */
454 mark_block_for_update (basic_block bb
)
456 gcc_assert (blocks_to_update
!= NULL
);
457 if (bitmap_bit_p (blocks_to_update
, bb
->index
))
459 bitmap_set_bit (blocks_to_update
, bb
->index
);
460 initialize_flags_in_bb (bb
);
463 /* Return the set of blocks where variable VAR is defined and the blocks
464 where VAR is live on entry (livein). If no entry is found in
465 DEF_BLOCKS, a new one is created and returned. */
467 static inline struct def_blocks_d
*
468 get_def_blocks_for (tree var
)
470 struct def_blocks_d db
, *db_p
;
474 slot
= htab_find_slot (def_blocks
, (void *) &db
, INSERT
);
477 db_p
= XNEW (struct def_blocks_d
);
479 db_p
->def_blocks
= BITMAP_ALLOC (NULL
);
480 db_p
->phi_blocks
= BITMAP_ALLOC (NULL
);
481 db_p
->livein_blocks
= BITMAP_ALLOC (NULL
);
482 *slot
= (void *) db_p
;
485 db_p
= (struct def_blocks_d
*) *slot
;
491 /* Mark block BB as the definition site for variable VAR. PHI_P is true if
492 VAR is defined by a PHI node. */
495 set_def_block (tree var
, basic_block bb
, bool phi_p
)
497 struct def_blocks_d
*db_p
;
498 enum need_phi_state state
;
500 state
= get_phi_state (var
);
501 db_p
= get_def_blocks_for (var
);
503 /* Set the bit corresponding to the block where VAR is defined. */
504 bitmap_set_bit (db_p
->def_blocks
, bb
->index
);
506 bitmap_set_bit (db_p
->phi_blocks
, bb
->index
);
508 /* Keep track of whether or not we may need to insert PHI nodes.
510 If we are in the UNKNOWN state, then this is the first definition
511 of VAR. Additionally, we have not seen any uses of VAR yet, so
512 we do not need a PHI node for this variable at this time (i.e.,
513 transition to NEED_PHI_STATE_NO).
515 If we are in any other state, then we either have multiple definitions
516 of this variable occurring in different blocks or we saw a use of the
517 variable which was not dominated by the block containing the
518 definition(s). In this case we may need a PHI node, so enter
519 state NEED_PHI_STATE_MAYBE. */
520 if (state
== NEED_PHI_STATE_UNKNOWN
)
521 set_phi_state (var
, NEED_PHI_STATE_NO
);
523 set_phi_state (var
, NEED_PHI_STATE_MAYBE
);
527 /* Mark block BB as having VAR live at the entry to BB. */
530 set_livein_block (tree var
, basic_block bb
)
532 struct def_blocks_d
*db_p
;
533 enum need_phi_state state
= get_phi_state (var
);
535 db_p
= get_def_blocks_for (var
);
537 /* Set the bit corresponding to the block where VAR is live in. */
538 bitmap_set_bit (db_p
->livein_blocks
, bb
->index
);
540 /* Keep track of whether or not we may need to insert PHI nodes.
542 If we reach here in NEED_PHI_STATE_NO, see if this use is dominated
543 by the single block containing the definition(s) of this variable. If
544 it is, then we remain in NEED_PHI_STATE_NO, otherwise we transition to
545 NEED_PHI_STATE_MAYBE. */
546 if (state
== NEED_PHI_STATE_NO
)
548 int def_block_index
= bitmap_first_set_bit (db_p
->def_blocks
);
550 if (def_block_index
== -1
551 || ! dominated_by_p (CDI_DOMINATORS
, bb
,
552 BASIC_BLOCK (def_block_index
)))
553 set_phi_state (var
, NEED_PHI_STATE_MAYBE
);
556 set_phi_state (var
, NEED_PHI_STATE_MAYBE
);
560 /* Return true if symbol SYM is marked for renaming. */
563 symbol_marked_for_renaming (tree sym
)
565 return bitmap_bit_p (SYMS_TO_RENAME (cfun
), DECL_UID (sym
));
569 /* Return true if NAME is in OLD_SSA_NAMES. */
572 is_old_name (tree name
)
574 unsigned ver
= SSA_NAME_VERSION (name
);
577 return ver
< new_ssa_names
->n_bits
&& TEST_BIT (old_ssa_names
, ver
);
581 /* Return true if NAME is in NEW_SSA_NAMES. */
584 is_new_name (tree name
)
586 unsigned ver
= SSA_NAME_VERSION (name
);
589 return ver
< new_ssa_names
->n_bits
&& TEST_BIT (new_ssa_names
, ver
);
593 /* Hashing and equality functions for REPL_TBL. */
596 repl_map_hash (const void *p
)
598 return htab_hash_pointer ((const void *)((const struct repl_map_d
*)p
)->name
);
602 repl_map_eq (const void *p1
, const void *p2
)
604 return ((const struct repl_map_d
*)p1
)->name
605 == ((const struct repl_map_d
*)p2
)->name
;
609 repl_map_free (void *p
)
611 BITMAP_FREE (((struct repl_map_d
*)p
)->set
);
616 /* Return the names replaced by NEW_TREE (i.e., REPL_TBL[NEW_TREE].SET). */
619 names_replaced_by (tree new_tree
)
625 slot
= htab_find_slot (repl_tbl
, (void *) &m
, NO_INSERT
);
627 /* If N was not registered in the replacement table, return NULL. */
628 if (slot
== NULL
|| *slot
== NULL
)
631 return ((struct repl_map_d
*) *slot
)->set
;
635 /* Add OLD to REPL_TBL[NEW_TREE].SET. */
638 add_to_repl_tbl (tree new_tree
, tree old
)
640 struct repl_map_d m
, *mp
;
644 slot
= htab_find_slot (repl_tbl
, (void *) &m
, INSERT
);
647 mp
= XNEW (struct repl_map_d
);
649 mp
->set
= BITMAP_ALLOC (NULL
);
653 mp
= (struct repl_map_d
*) *slot
;
655 bitmap_set_bit (mp
->set
, SSA_NAME_VERSION (old
));
659 /* Add a new mapping NEW_TREE -> OLD REPL_TBL. Every entry N_i in REPL_TBL
660 represents the set of names O_1 ... O_j replaced by N_i. This is
661 used by update_ssa and its helpers to introduce new SSA names in an
662 already formed SSA web. */
665 add_new_name_mapping (tree new_tree
, tree old
)
667 timevar_push (TV_TREE_SSA_INCREMENTAL
);
669 /* OLD and NEW_TREE must be different SSA names for the same symbol. */
670 gcc_assert (new_tree
!= old
&& SSA_NAME_VAR (new_tree
) == SSA_NAME_VAR (old
));
672 /* If this mapping is for virtual names, we will need to update
673 virtual operands. If this is a mapping for .MEM, then we gather
674 the symbols associated with each name. */
675 if (!is_gimple_reg (new_tree
))
679 update_ssa_stats
.num_virtual_mappings
++;
680 update_ssa_stats
.num_virtual_symbols
++;
682 /* Keep counts of virtual mappings and symbols to use in the
683 virtual mapping heuristic. If we have large numbers of
684 virtual mappings for a relatively low number of symbols, it
685 will make more sense to rename the symbols from scratch.
686 Otherwise, the insertion of PHI nodes for each of the old
687 names in these mappings will be very slow. */
688 sym
= SSA_NAME_VAR (new_tree
);
689 bitmap_set_bit (update_ssa_stats
.virtual_symbols
, DECL_UID (sym
));
692 /* We may need to grow NEW_SSA_NAMES and OLD_SSA_NAMES because our
693 caller may have created new names since the set was created. */
694 if (new_ssa_names
->n_bits
<= num_ssa_names
- 1)
696 unsigned int new_sz
= num_ssa_names
+ NAME_SETS_GROWTH_FACTOR
;
697 new_ssa_names
= sbitmap_resize (new_ssa_names
, new_sz
, 0);
698 old_ssa_names
= sbitmap_resize (old_ssa_names
, new_sz
, 0);
701 /* Update the REPL_TBL table. */
702 add_to_repl_tbl (new_tree
, old
);
704 /* If OLD had already been registered as a new name, then all the
705 names that OLD replaces should also be replaced by NEW_TREE. */
706 if (is_new_name (old
))
707 bitmap_ior_into (names_replaced_by (new_tree
), names_replaced_by (old
));
709 /* Register NEW_TREE and OLD in NEW_SSA_NAMES and OLD_SSA_NAMES,
711 SET_BIT (new_ssa_names
, SSA_NAME_VERSION (new_tree
));
712 SET_BIT (old_ssa_names
, SSA_NAME_VERSION (old
));
714 /* Update mapping counter to use in the virtual mapping heuristic. */
715 update_ssa_stats
.num_total_mappings
++;
717 timevar_pop (TV_TREE_SSA_INCREMENTAL
);
721 /* Call back for walk_dominator_tree used to collect definition sites
722 for every variable in the function. For every statement S in block
725 1- Variables defined by S in the DEFS of S are marked in the bitmap
728 2- If S uses a variable VAR and there is no preceding kill of VAR,
729 then it is marked in the LIVEIN_BLOCKS bitmap associated with VAR.
731 This information is used to determine which variables are live
732 across block boundaries to reduce the number of PHI nodes
736 mark_def_sites (basic_block bb
, gimple stmt
, bitmap kills
)
742 /* Since this is the first time that we rewrite the program into SSA
743 form, force an operand scan on every statement. */
746 gcc_assert (blocks_to_update
== NULL
);
747 set_register_defs (stmt
, false);
748 set_rewrite_uses (stmt
, false);
750 if (is_gimple_debug (stmt
))
753 /* If a variable is used before being set, then the variable is live
754 across a block boundary, so mark it live-on-entry to BB. */
755 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
757 tree sym
= USE_FROM_PTR (use_p
);
758 gcc_assert (DECL_P (sym
));
759 if (!bitmap_bit_p (kills
, DECL_UID (sym
)))
760 set_livein_block (sym
, bb
);
761 set_rewrite_uses (stmt
, true);
764 /* Now process the defs. Mark BB as the definition block and add
765 each def to the set of killed symbols. */
766 FOR_EACH_SSA_TREE_OPERAND (def
, stmt
, iter
, SSA_OP_DEF
)
768 gcc_assert (DECL_P (def
));
769 set_def_block (def
, bb
, false);
770 bitmap_set_bit (kills
, DECL_UID (def
));
771 set_register_defs (stmt
, true);
774 /* If we found the statement interesting then also mark the block BB
776 if (rewrite_uses_p (stmt
) || register_defs_p (stmt
))
777 SET_BIT (interesting_blocks
, bb
->index
);
780 /* Structure used by prune_unused_phi_nodes to record bounds of the intervals
781 in the dfs numbering of the dominance tree. */
785 /* Basic block whose index this entry corresponds to. */
788 /* The dfs number of this node. */
792 /* Compares two entries of type struct dom_dfsnum by dfs_num field. Callback
796 cmp_dfsnum (const void *a
, const void *b
)
798 const struct dom_dfsnum
*const da
= (const struct dom_dfsnum
*) a
;
799 const struct dom_dfsnum
*const db
= (const struct dom_dfsnum
*) b
;
801 return (int) da
->dfs_num
- (int) db
->dfs_num
;
804 /* Among the intervals starting at the N points specified in DEFS, find
805 the one that contains S, and return its bb_index. */
808 find_dfsnum_interval (struct dom_dfsnum
*defs
, unsigned n
, unsigned s
)
810 unsigned f
= 0, t
= n
, m
;
815 if (defs
[m
].dfs_num
<= s
)
821 return defs
[f
].bb_index
;
824 /* Clean bits from PHIS for phi nodes whose value cannot be used in USES.
825 KILLS is a bitmap of blocks where the value is defined before any use. */
828 prune_unused_phi_nodes (bitmap phis
, bitmap kills
, bitmap uses
)
830 VEC(int, heap
) *worklist
;
832 unsigned i
, b
, p
, u
, top
;
834 basic_block def_bb
, use_bb
;
838 struct dom_dfsnum
*defs
;
839 unsigned n_defs
, adef
;
841 if (bitmap_empty_p (uses
))
847 /* The phi must dominate a use, or an argument of a live phi. Also, we
848 do not create any phi nodes in def blocks, unless they are also livein. */
849 to_remove
= BITMAP_ALLOC (NULL
);
850 bitmap_and_compl (to_remove
, kills
, uses
);
851 bitmap_and_compl_into (phis
, to_remove
);
852 if (bitmap_empty_p (phis
))
854 BITMAP_FREE (to_remove
);
858 /* We want to remove the unnecessary phi nodes, but we do not want to compute
859 liveness information, as that may be linear in the size of CFG, and if
860 there are lot of different variables to rewrite, this may lead to quadratic
863 Instead, we basically emulate standard dce. We put all uses to worklist,
864 then for each of them find the nearest def that dominates them. If this
865 def is a phi node, we mark it live, and if it was not live before, we
866 add the predecessors of its basic block to the worklist.
868 To quickly locate the nearest def that dominates use, we use dfs numbering
869 of the dominance tree (that is already available in order to speed up
870 queries). For each def, we have the interval given by the dfs number on
871 entry to and on exit from the corresponding subtree in the dominance tree.
872 The nearest dominator for a given use is the smallest of these intervals
873 that contains entry and exit dfs numbers for the basic block with the use.
874 If we store the bounds for all the uses to an array and sort it, we can
875 locate the nearest dominating def in logarithmic time by binary search.*/
876 bitmap_ior (to_remove
, kills
, phis
);
877 n_defs
= bitmap_count_bits (to_remove
);
878 defs
= XNEWVEC (struct dom_dfsnum
, 2 * n_defs
+ 1);
879 defs
[0].bb_index
= 1;
882 EXECUTE_IF_SET_IN_BITMAP (to_remove
, 0, i
, bi
)
884 def_bb
= BASIC_BLOCK (i
);
885 defs
[adef
].bb_index
= i
;
886 defs
[adef
].dfs_num
= bb_dom_dfs_in (CDI_DOMINATORS
, def_bb
);
887 defs
[adef
+ 1].bb_index
= i
;
888 defs
[adef
+ 1].dfs_num
= bb_dom_dfs_out (CDI_DOMINATORS
, def_bb
);
891 BITMAP_FREE (to_remove
);
892 gcc_assert (adef
== 2 * n_defs
+ 1);
893 qsort (defs
, adef
, sizeof (struct dom_dfsnum
), cmp_dfsnum
);
894 gcc_assert (defs
[0].bb_index
== 1);
896 /* Now each DEFS entry contains the number of the basic block to that the
897 dfs number corresponds. Change them to the number of basic block that
898 corresponds to the interval following the dfs number. Also, for the
899 dfs_out numbers, increase the dfs number by one (so that it corresponds
900 to the start of the following interval, not to the end of the current
901 one). We use WORKLIST as a stack. */
902 worklist
= VEC_alloc (int, heap
, n_defs
+ 1);
903 VEC_quick_push (int, worklist
, 1);
906 for (i
= 1; i
< adef
; i
++)
908 b
= defs
[i
].bb_index
;
911 /* This is a closing element. Interval corresponding to the top
912 of the stack after removing it follows. */
913 VEC_pop (int, worklist
);
914 top
= VEC_index (int, worklist
, VEC_length (int, worklist
) - 1);
915 defs
[n_defs
].bb_index
= top
;
916 defs
[n_defs
].dfs_num
= defs
[i
].dfs_num
+ 1;
920 /* Opening element. Nothing to do, just push it to the stack and move
921 it to the correct position. */
922 defs
[n_defs
].bb_index
= defs
[i
].bb_index
;
923 defs
[n_defs
].dfs_num
= defs
[i
].dfs_num
;
924 VEC_quick_push (int, worklist
, b
);
928 /* If this interval starts at the same point as the previous one, cancel
930 if (defs
[n_defs
].dfs_num
== defs
[n_defs
- 1].dfs_num
)
931 defs
[n_defs
- 1].bb_index
= defs
[n_defs
].bb_index
;
935 VEC_pop (int, worklist
);
936 gcc_assert (VEC_empty (int, worklist
));
938 /* Now process the uses. */
939 live_phis
= BITMAP_ALLOC (NULL
);
940 EXECUTE_IF_SET_IN_BITMAP (uses
, 0, i
, bi
)
942 VEC_safe_push (int, heap
, worklist
, i
);
945 while (!VEC_empty (int, worklist
))
947 b
= VEC_pop (int, worklist
);
948 if (b
== ENTRY_BLOCK
)
951 /* If there is a phi node in USE_BB, it is made live. Otherwise,
952 find the def that dominates the immediate dominator of USE_BB
953 (the kill in USE_BB does not dominate the use). */
954 if (bitmap_bit_p (phis
, b
))
958 use_bb
= get_immediate_dominator (CDI_DOMINATORS
, BASIC_BLOCK (b
));
959 p
= find_dfsnum_interval (defs
, n_defs
,
960 bb_dom_dfs_in (CDI_DOMINATORS
, use_bb
));
961 if (!bitmap_bit_p (phis
, p
))
965 /* If the phi node is already live, there is nothing to do. */
966 if (bitmap_bit_p (live_phis
, p
))
969 /* Mark the phi as live, and add the new uses to the worklist. */
970 bitmap_set_bit (live_phis
, p
);
971 def_bb
= BASIC_BLOCK (p
);
972 FOR_EACH_EDGE (e
, ei
, def_bb
->preds
)
975 if (bitmap_bit_p (uses
, u
))
978 /* In case there is a kill directly in the use block, do not record
979 the use (this is also necessary for correctness, as we assume that
980 uses dominated by a def directly in their block have been filtered
982 if (bitmap_bit_p (kills
, u
))
985 bitmap_set_bit (uses
, u
);
986 VEC_safe_push (int, heap
, worklist
, u
);
990 VEC_free (int, heap
, worklist
);
991 bitmap_copy (phis
, live_phis
);
992 BITMAP_FREE (live_phis
);
996 /* Return the set of blocks where variable VAR is defined and the blocks
997 where VAR is live on entry (livein). Return NULL, if no entry is
998 found in DEF_BLOCKS. */
1000 static inline struct def_blocks_d
*
1001 find_def_blocks_for (tree var
)
1003 struct def_blocks_d dm
;
1005 return (struct def_blocks_d
*) htab_find (def_blocks
, &dm
);
1009 /* Retrieve or create a default definition for symbol SYM. */
1012 get_default_def_for (tree sym
)
1014 tree ddef
= gimple_default_def (cfun
, sym
);
1016 if (ddef
== NULL_TREE
)
1018 ddef
= make_ssa_name (sym
, gimple_build_nop ());
1019 set_default_def (sym
, ddef
);
1026 /* Marks phi node PHI in basic block BB for rewrite. */
1029 mark_phi_for_rewrite (basic_block bb
, gimple phi
)
1032 unsigned i
, idx
= bb
->index
;
1034 if (rewrite_uses_p (phi
))
1037 set_rewrite_uses (phi
, true);
1039 if (!blocks_with_phis_to_rewrite
)
1042 bitmap_set_bit (blocks_with_phis_to_rewrite
, idx
);
1043 VEC_reserve (gimple_vec
, heap
, phis_to_rewrite
, last_basic_block
+ 1);
1044 for (i
= VEC_length (gimple_vec
, phis_to_rewrite
); i
<= idx
; i
++)
1045 VEC_quick_push (gimple_vec
, phis_to_rewrite
, NULL
);
1047 phis
= VEC_index (gimple_vec
, phis_to_rewrite
, idx
);
1049 phis
= VEC_alloc (gimple
, heap
, 10);
1051 VEC_safe_push (gimple
, heap
, phis
, phi
);
1052 VEC_replace (gimple_vec
, phis_to_rewrite
, idx
, phis
);
1055 /* Insert PHI nodes for variable VAR using the iterated dominance
1056 frontier given in PHI_INSERTION_POINTS. If UPDATE_P is true, this
1057 function assumes that the caller is incrementally updating the
1058 existing SSA form, in which case VAR may be an SSA name instead of
1061 PHI_INSERTION_POINTS is updated to reflect nodes that already had a
1062 PHI node for VAR. On exit, only the nodes that received a PHI node
1063 for VAR will be present in PHI_INSERTION_POINTS. */
1066 insert_phi_nodes_for (tree var
, bitmap phi_insertion_points
, bool update_p
)
1073 struct def_blocks_d
*def_map
;
1075 def_map
= find_def_blocks_for (var
);
1076 gcc_assert (def_map
);
1078 /* Remove the blocks where we already have PHI nodes for VAR. */
1079 bitmap_and_compl_into (phi_insertion_points
, def_map
->phi_blocks
);
1081 /* Remove obviously useless phi nodes. */
1082 prune_unused_phi_nodes (phi_insertion_points
, def_map
->def_blocks
,
1083 def_map
->livein_blocks
);
1085 /* And insert the PHI nodes. */
1086 EXECUTE_IF_SET_IN_BITMAP (phi_insertion_points
, 0, bb_index
, bi
)
1088 bb
= BASIC_BLOCK (bb_index
);
1090 mark_block_for_update (bb
);
1094 if (TREE_CODE (var
) == SSA_NAME
)
1096 /* If we are rewriting SSA names, create the LHS of the PHI
1097 node by duplicating VAR. This is useful in the case of
1098 pointers, to also duplicate pointer attributes (alias
1099 information, in particular). */
1103 gcc_assert (update_p
);
1104 phi
= create_phi_node (var
, bb
);
1106 new_lhs
= duplicate_ssa_name (var
, phi
);
1107 gimple_phi_set_result (phi
, new_lhs
);
1108 add_new_name_mapping (new_lhs
, var
);
1110 /* Add VAR to every argument slot of PHI. We need VAR in
1111 every argument so that rewrite_update_phi_arguments knows
1112 which name is this PHI node replacing. If VAR is a
1113 symbol marked for renaming, this is not necessary, the
1114 renamer will use the symbol on the LHS to get its
1115 reaching definition. */
1116 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
1117 add_phi_arg (phi
, var
, e
, UNKNOWN_LOCATION
);
1123 gcc_assert (DECL_P (var
));
1124 phi
= create_phi_node (var
, bb
);
1126 tracked_var
= target_for_debug_bind (var
);
1129 gimple note
= gimple_build_debug_bind (tracked_var
,
1132 gimple_stmt_iterator si
= gsi_after_labels (bb
);
1133 gsi_insert_before (&si
, note
, GSI_SAME_STMT
);
1137 /* Mark this PHI node as interesting for update_ssa. */
1138 set_register_defs (phi
, true);
1139 mark_phi_for_rewrite (bb
, phi
);
1144 /* Insert PHI nodes at the dominance frontier of blocks with variable
1145 definitions. DFS contains the dominance frontier information for
1149 insert_phi_nodes (bitmap
*dfs
)
1151 referenced_var_iterator rvi
;
1157 timevar_push (TV_TREE_INSERT_PHI_NODES
);
1159 /* Do two stages to avoid code generation differences for UID
1160 differences but no UID ordering differences. */
1162 vars
= BITMAP_ALLOC (NULL
);
1163 FOR_EACH_REFERENCED_VAR (var
, rvi
)
1165 struct def_blocks_d
*def_map
;
1167 def_map
= find_def_blocks_for (var
);
1168 if (def_map
== NULL
)
1171 if (get_phi_state (var
) != NEED_PHI_STATE_NO
)
1172 bitmap_set_bit (vars
, DECL_UID (var
));
1175 EXECUTE_IF_SET_IN_BITMAP (vars
, 0, uid
, bi
)
1177 tree var
= referenced_var (uid
);
1178 struct def_blocks_d
*def_map
;
1181 def_map
= find_def_blocks_for (var
);
1182 idf
= compute_idf (def_map
->def_blocks
, dfs
);
1183 insert_phi_nodes_for (var
, idf
, false);
1189 timevar_pop (TV_TREE_INSERT_PHI_NODES
);
1193 /* Push SYM's current reaching definition into BLOCK_DEFS_STACK and
1194 register DEF (an SSA_NAME) to be a new definition for SYM. */
1197 register_new_def (tree def
, tree sym
)
1201 /* If this variable is set in a single basic block and all uses are
1202 dominated by the set(s) in that single basic block, then there is
1203 no reason to record anything for this variable in the block local
1204 definition stacks. Doing so just wastes time and memory.
1206 This is the same test to prune the set of variables which may
1207 need PHI nodes. So we just use that information since it's already
1208 computed and available for us to use. */
1209 if (get_phi_state (sym
) == NEED_PHI_STATE_NO
)
1211 set_current_def (sym
, def
);
1215 currdef
= get_current_def (sym
);
1217 /* If SYM is not a GIMPLE register, then CURRDEF may be a name whose
1218 SSA_NAME_VAR is not necessarily SYM. In this case, also push SYM
1219 in the stack so that we know which symbol is being defined by
1220 this SSA name when we unwind the stack. */
1221 if (currdef
&& !is_gimple_reg (sym
))
1222 VEC_safe_push (tree
, heap
, block_defs_stack
, sym
);
1224 /* Push the current reaching definition into BLOCK_DEFS_STACK. This
1225 stack is later used by the dominator tree callbacks to restore
1226 the reaching definitions for all the variables defined in the
1227 block after a recursive visit to all its immediately dominated
1228 blocks. If there is no current reaching definition, then just
1229 record the underlying _DECL node. */
1230 VEC_safe_push (tree
, heap
, block_defs_stack
, currdef
? currdef
: sym
);
1232 /* Set the current reaching definition for SYM to be DEF. */
1233 set_current_def (sym
, def
);
1237 /* Perform a depth-first traversal of the dominator tree looking for
1238 variables to rename. BB is the block where to start searching.
1239 Renaming is a five step process:
1241 1- Every definition made by PHI nodes at the start of the blocks is
1242 registered as the current definition for the corresponding variable.
1244 2- Every statement in BB is rewritten. USE and VUSE operands are
1245 rewritten with their corresponding reaching definition. DEF and
1246 VDEF targets are registered as new definitions.
1248 3- All the PHI nodes in successor blocks of BB are visited. The
1249 argument corresponding to BB is replaced with its current reaching
1252 4- Recursively rewrite every dominator child block of BB.
1254 5- Restore (in reverse order) the current reaching definition for every
1255 new definition introduced in this block. This is done so that when
1256 we return from the recursive call, all the current reaching
1257 definitions are restored to the names that were valid in the
1258 dominator parent of BB. */
1260 /* Return the current definition for variable VAR. If none is found,
1261 create a new SSA name to act as the zeroth definition for VAR. */
1264 get_reaching_def (tree var
)
1268 /* Lookup the current reaching definition for VAR. */
1269 currdef
= get_current_def (var
);
1271 /* If there is no reaching definition for VAR, create and register a
1272 default definition for it (if needed). */
1273 if (currdef
== NULL_TREE
)
1275 tree sym
= DECL_P (var
) ? var
: SSA_NAME_VAR (var
);
1276 currdef
= get_default_def_for (sym
);
1277 set_current_def (var
, currdef
);
1280 /* Return the current reaching definition for VAR, or the default
1281 definition, if we had to create one. */
1286 /* SSA Rewriting Step 2. Rewrite every variable used in each statement in
1287 the block with its immediate reaching definitions. Update the current
1288 definition of a variable when a new real or virtual definition is found. */
1291 rewrite_stmt (gimple_stmt_iterator si
)
1293 use_operand_p use_p
;
1294 def_operand_p def_p
;
1296 gimple stmt
= gsi_stmt (si
);
1298 /* If mark_def_sites decided that we don't need to rewrite this
1299 statement, ignore it. */
1300 gcc_assert (blocks_to_update
== NULL
);
1301 if (!rewrite_uses_p (stmt
) && !register_defs_p (stmt
))
1304 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1306 fprintf (dump_file
, "Renaming statement ");
1307 print_gimple_stmt (dump_file
, stmt
, 0, TDF_SLIM
);
1308 fprintf (dump_file
, "\n");
1311 /* Step 1. Rewrite USES in the statement. */
1312 if (rewrite_uses_p (stmt
))
1313 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
1315 tree var
= USE_FROM_PTR (use_p
);
1316 gcc_assert (DECL_P (var
));
1317 SET_USE (use_p
, get_reaching_def (var
));
1320 /* Step 2. Register the statement's DEF operands. */
1321 if (register_defs_p (stmt
))
1322 FOR_EACH_SSA_DEF_OPERAND (def_p
, stmt
, iter
, SSA_OP_DEF
)
1324 tree var
= DEF_FROM_PTR (def_p
);
1325 tree name
= make_ssa_name (var
, stmt
);
1327 gcc_assert (DECL_P (var
));
1328 SET_DEF (def_p
, name
);
1329 register_new_def (DEF_FROM_PTR (def_p
), var
);
1331 tracked_var
= target_for_debug_bind (var
);
1334 gimple note
= gimple_build_debug_bind (tracked_var
, name
, stmt
);
1335 gsi_insert_after (&si
, note
, GSI_SAME_STMT
);
1341 /* SSA Rewriting Step 3. Visit all the successor blocks of BB looking for
1342 PHI nodes. For every PHI node found, add a new argument containing the
1343 current reaching definition for the variable and the edge through which
1344 that definition is reaching the PHI node. */
1347 rewrite_add_phi_arguments (basic_block bb
)
1352 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1355 gimple_stmt_iterator gsi
;
1357 for (gsi
= gsi_start_phis (e
->dest
); !gsi_end_p (gsi
);
1363 phi
= gsi_stmt (gsi
);
1364 currdef
= get_reaching_def (SSA_NAME_VAR (gimple_phi_result (phi
)));
1365 stmt
= SSA_NAME_DEF_STMT (currdef
);
1366 add_phi_arg (phi
, currdef
, e
, gimple_location (stmt
));
1371 /* SSA Rewriting Step 1. Initialization, create a block local stack
1372 of reaching definitions for new SSA names produced in this block
1373 (BLOCK_DEFS). Register new definitions for every PHI node in the
1377 rewrite_enter_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
1381 gimple_stmt_iterator gsi
;
1383 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1384 fprintf (dump_file
, "\n\nRenaming block #%d\n\n", bb
->index
);
1386 /* Mark the unwind point for this block. */
1387 VEC_safe_push (tree
, heap
, block_defs_stack
, NULL_TREE
);
1389 /* Step 1. Register new definitions for every PHI node in the block.
1390 Conceptually, all the PHI nodes are executed in parallel and each PHI
1391 node introduces a new version for the associated variable. */
1392 for (gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
1396 phi
= gsi_stmt (gsi
);
1397 result
= gimple_phi_result (phi
);
1398 gcc_assert (is_gimple_reg (result
));
1399 register_new_def (result
, SSA_NAME_VAR (result
));
1402 /* Step 2. Rewrite every variable used in each statement in the block
1403 with its immediate reaching definitions. Update the current definition
1404 of a variable when a new real or virtual definition is found. */
1405 if (TEST_BIT (interesting_blocks
, bb
->index
))
1406 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
1409 /* Step 3. Visit all the successor blocks of BB looking for PHI nodes.
1410 For every PHI node found, add a new argument containing the current
1411 reaching definition for the variable and the edge through which that
1412 definition is reaching the PHI node. */
1413 rewrite_add_phi_arguments (bb
);
1418 /* Called after visiting all the statements in basic block BB and all
1419 of its dominator children. Restore CURRDEFS to its original value. */
1422 rewrite_leave_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
1423 basic_block bb ATTRIBUTE_UNUSED
)
1425 /* Restore CURRDEFS to its original state. */
1426 while (VEC_length (tree
, block_defs_stack
) > 0)
1428 tree tmp
= VEC_pop (tree
, block_defs_stack
);
1429 tree saved_def
, var
;
1431 if (tmp
== NULL_TREE
)
1434 if (TREE_CODE (tmp
) == SSA_NAME
)
1436 /* If we recorded an SSA_NAME, then make the SSA_NAME the
1437 current definition of its underlying variable. Note that
1438 if the SSA_NAME is not for a GIMPLE register, the symbol
1439 being defined is stored in the next slot in the stack.
1440 This mechanism is needed because an SSA name for a
1441 non-register symbol may be the definition for more than
1442 one symbol (e.g., SFTs, aliased variables, etc). */
1444 var
= SSA_NAME_VAR (saved_def
);
1445 if (!is_gimple_reg (var
))
1446 var
= VEC_pop (tree
, block_defs_stack
);
1450 /* If we recorded anything else, it must have been a _DECL
1451 node and its current reaching definition must have been
1457 set_current_def (var
, saved_def
);
1462 /* Dump bitmap SET (assumed to contain VAR_DECLs) to FILE. */
1465 dump_decl_set (FILE *file
, bitmap set
)
1472 fprintf (file
, "{ ");
1474 EXECUTE_IF_SET_IN_BITMAP (set
, 0, i
, bi
)
1476 struct tree_decl_minimal in
;
1479 var
= (tree
) htab_find_with_hash (gimple_referenced_vars (cfun
),
1482 print_generic_expr (file
, var
, 0);
1484 fprintf (file
, "D.%u", i
);
1485 fprintf (file
, " ");
1488 fprintf (file
, "}");
1491 fprintf (file
, "NIL");
1495 /* Dump bitmap SET (assumed to contain VAR_DECLs) to FILE. */
1498 debug_decl_set (bitmap set
)
1500 dump_decl_set (stderr
, set
);
1501 fprintf (stderr
, "\n");
1505 /* Dump the renaming stack (block_defs_stack) to FILE. Traverse the
1506 stack up to a maximum of N levels. If N is -1, the whole stack is
1507 dumped. New levels are created when the dominator tree traversal
1508 used for renaming enters a new sub-tree. */
1511 dump_defs_stack (FILE *file
, int n
)
1515 fprintf (file
, "\n\nRenaming stack");
1517 fprintf (file
, " (up to %d levels)", n
);
1518 fprintf (file
, "\n\n");
1521 fprintf (file
, "Level %d (current level)\n", i
);
1522 for (j
= (int) VEC_length (tree
, block_defs_stack
) - 1; j
>= 0; j
--)
1526 name
= VEC_index (tree
, block_defs_stack
, j
);
1527 if (name
== NULL_TREE
)
1532 fprintf (file
, "\nLevel %d\n", i
);
1543 var
= SSA_NAME_VAR (name
);
1544 if (!is_gimple_reg (var
))
1547 var
= VEC_index (tree
, block_defs_stack
, j
);
1551 fprintf (file
, " Previous CURRDEF (");
1552 print_generic_expr (file
, var
, 0);
1553 fprintf (file
, ") = ");
1555 print_generic_expr (file
, name
, 0);
1557 fprintf (file
, "<NIL>");
1558 fprintf (file
, "\n");
1563 /* Dump the renaming stack (block_defs_stack) to stderr. Traverse the
1564 stack up to a maximum of N levels. If N is -1, the whole stack is
1565 dumped. New levels are created when the dominator tree traversal
1566 used for renaming enters a new sub-tree. */
1569 debug_defs_stack (int n
)
1571 dump_defs_stack (stderr
, n
);
1575 /* Dump the current reaching definition of every symbol to FILE. */
1578 dump_currdefs (FILE *file
)
1580 referenced_var_iterator i
;
1583 fprintf (file
, "\n\nCurrent reaching definitions\n\n");
1584 FOR_EACH_REFERENCED_VAR (var
, i
)
1585 if (SYMS_TO_RENAME (cfun
) == NULL
1586 || bitmap_bit_p (SYMS_TO_RENAME (cfun
), DECL_UID (var
)))
1588 fprintf (file
, "CURRDEF (");
1589 print_generic_expr (file
, var
, 0);
1590 fprintf (file
, ") = ");
1591 if (get_current_def (var
))
1592 print_generic_expr (file
, get_current_def (var
), 0);
1594 fprintf (file
, "<NIL>");
1595 fprintf (file
, "\n");
1600 /* Dump the current reaching definition of every symbol to stderr. */
1603 debug_currdefs (void)
1605 dump_currdefs (stderr
);
1609 /* Dump SSA information to FILE. */
1612 dump_tree_ssa (FILE *file
)
1614 const char *funcname
1615 = lang_hooks
.decl_printable_name (current_function_decl
, 2);
1617 fprintf (file
, "SSA renaming information for %s\n\n", funcname
);
1619 dump_def_blocks (file
);
1620 dump_defs_stack (file
, -1);
1621 dump_currdefs (file
);
1622 dump_tree_ssa_stats (file
);
1626 /* Dump SSA information to stderr. */
1629 debug_tree_ssa (void)
1631 dump_tree_ssa (stderr
);
1635 /* Dump statistics for the hash table HTAB. */
1638 htab_statistics (FILE *file
, htab_t htab
)
1640 fprintf (file
, "size %ld, %ld elements, %f collision/search ratio\n",
1641 (long) htab_size (htab
),
1642 (long) htab_elements (htab
),
1643 htab_collisions (htab
));
1647 /* Dump SSA statistics on FILE. */
1650 dump_tree_ssa_stats (FILE *file
)
1652 if (def_blocks
|| repl_tbl
)
1653 fprintf (file
, "\nHash table statistics:\n");
1657 fprintf (file
, " def_blocks: ");
1658 htab_statistics (file
, def_blocks
);
1663 fprintf (file
, " repl_tbl: ");
1664 htab_statistics (file
, repl_tbl
);
1667 if (def_blocks
|| repl_tbl
)
1668 fprintf (file
, "\n");
1672 /* Dump SSA statistics on stderr. */
1675 debug_tree_ssa_stats (void)
1677 dump_tree_ssa_stats (stderr
);
1681 /* Hashing and equality functions for DEF_BLOCKS. */
1684 def_blocks_hash (const void *p
)
1686 return htab_hash_pointer
1687 ((const void *)((const struct def_blocks_d
*)p
)->var
);
1691 def_blocks_eq (const void *p1
, const void *p2
)
1693 return ((const struct def_blocks_d
*)p1
)->var
1694 == ((const struct def_blocks_d
*)p2
)->var
;
1698 /* Free memory allocated by one entry in DEF_BLOCKS. */
1701 def_blocks_free (void *p
)
1703 struct def_blocks_d
*entry
= (struct def_blocks_d
*) p
;
1704 BITMAP_FREE (entry
->def_blocks
);
1705 BITMAP_FREE (entry
->phi_blocks
);
1706 BITMAP_FREE (entry
->livein_blocks
);
1711 /* Callback for htab_traverse to dump the DEF_BLOCKS hash table. */
1714 debug_def_blocks_r (void **slot
, void *data
)
1716 FILE *file
= (FILE *) data
;
1717 struct def_blocks_d
*db_p
= (struct def_blocks_d
*) *slot
;
1719 fprintf (file
, "VAR: ");
1720 print_generic_expr (file
, db_p
->var
, dump_flags
);
1721 bitmap_print (file
, db_p
->def_blocks
, ", DEF_BLOCKS: { ", "}");
1722 bitmap_print (file
, db_p
->livein_blocks
, ", LIVEIN_BLOCKS: { ", "}");
1723 bitmap_print (file
, db_p
->phi_blocks
, ", PHI_BLOCKS: { ", "}\n");
1729 /* Dump the DEF_BLOCKS hash table on FILE. */
1732 dump_def_blocks (FILE *file
)
1734 fprintf (file
, "\n\nDefinition and live-in blocks:\n\n");
1736 htab_traverse (def_blocks
, debug_def_blocks_r
, file
);
1740 /* Dump the DEF_BLOCKS hash table on stderr. */
1743 debug_def_blocks (void)
1745 dump_def_blocks (stderr
);
1749 /* Register NEW_NAME to be the new reaching definition for OLD_NAME. */
1752 register_new_update_single (tree new_name
, tree old_name
)
1754 tree currdef
= get_current_def (old_name
);
1756 /* Push the current reaching definition into BLOCK_DEFS_STACK.
1757 This stack is later used by the dominator tree callbacks to
1758 restore the reaching definitions for all the variables
1759 defined in the block after a recursive visit to all its
1760 immediately dominated blocks. */
1761 VEC_reserve (tree
, heap
, block_defs_stack
, 2);
1762 VEC_quick_push (tree
, block_defs_stack
, currdef
);
1763 VEC_quick_push (tree
, block_defs_stack
, old_name
);
1765 /* Set the current reaching definition for OLD_NAME to be
1767 set_current_def (old_name
, new_name
);
1771 /* Register NEW_NAME to be the new reaching definition for all the
1772 names in OLD_NAMES. Used by the incremental SSA update routines to
1773 replace old SSA names with new ones. */
1776 register_new_update_set (tree new_name
, bitmap old_names
)
1781 EXECUTE_IF_SET_IN_BITMAP (old_names
, 0, i
, bi
)
1782 register_new_update_single (new_name
, ssa_name (i
));
1787 /* If the operand pointed to by USE_P is a name in OLD_SSA_NAMES or
1788 it is a symbol marked for renaming, replace it with USE_P's current
1789 reaching definition. */
1792 maybe_replace_use (use_operand_p use_p
)
1794 tree rdef
= NULL_TREE
;
1795 tree use
= USE_FROM_PTR (use_p
);
1796 tree sym
= DECL_P (use
) ? use
: SSA_NAME_VAR (use
);
1798 if (symbol_marked_for_renaming (sym
))
1799 rdef
= get_reaching_def (sym
);
1800 else if (is_old_name (use
))
1801 rdef
= get_reaching_def (use
);
1803 if (rdef
&& rdef
!= use
)
1804 SET_USE (use_p
, rdef
);
1808 /* Same as maybe_replace_use, but without introducing default stmts,
1809 returning false to indicate a need to do so. */
1812 maybe_replace_use_in_debug_stmt (use_operand_p use_p
)
1814 tree rdef
= NULL_TREE
;
1815 tree use
= USE_FROM_PTR (use_p
);
1816 tree sym
= DECL_P (use
) ? use
: SSA_NAME_VAR (use
);
1818 if (symbol_marked_for_renaming (sym
))
1819 rdef
= get_current_def (sym
);
1820 else if (is_old_name (use
))
1822 rdef
= get_current_def (use
);
1823 /* We can't assume that, if there's no current definition, the
1824 default one should be used. It could be the case that we've
1825 rearranged blocks so that the earlier definition no longer
1826 dominates the use. */
1827 if (!rdef
&& SSA_NAME_IS_DEFAULT_DEF (use
))
1833 if (rdef
&& rdef
!= use
)
1834 SET_USE (use_p
, rdef
);
1836 return rdef
!= NULL_TREE
;
1840 /* If the operand pointed to by DEF_P is an SSA name in NEW_SSA_NAMES
1841 or OLD_SSA_NAMES, or if it is a symbol marked for renaming,
1842 register it as the current definition for the names replaced by
1846 maybe_register_def (def_operand_p def_p
, gimple stmt
,
1847 gimple_stmt_iterator gsi
)
1849 tree def
= DEF_FROM_PTR (def_p
);
1850 tree sym
= DECL_P (def
) ? def
: SSA_NAME_VAR (def
);
1852 /* If DEF is a naked symbol that needs renaming, create a new
1854 if (symbol_marked_for_renaming (sym
))
1860 def
= make_ssa_name (def
, stmt
);
1861 SET_DEF (def_p
, def
);
1863 tracked_var
= target_for_debug_bind (sym
);
1866 gimple note
= gimple_build_debug_bind (tracked_var
, def
, stmt
);
1867 /* If stmt ends the bb, insert the debug stmt on the single
1868 non-EH edge from the stmt. */
1869 if (gsi_one_before_end_p (gsi
) && stmt_ends_bb_p (stmt
))
1871 basic_block bb
= gsi_bb (gsi
);
1874 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1875 if (!(e
->flags
& EDGE_EH
))
1881 && single_pred_p (ef
->dest
)
1882 && !phi_nodes (ef
->dest
)
1883 && ef
->dest
!= EXIT_BLOCK_PTR
);
1884 gsi_insert_on_edge_immediate (ef
, note
);
1887 gsi_insert_after (&gsi
, note
, GSI_SAME_STMT
);
1891 register_new_update_single (def
, sym
);
1895 /* If DEF is a new name, register it as a new definition
1896 for all the names replaced by DEF. */
1897 if (is_new_name (def
))
1898 register_new_update_set (def
, names_replaced_by (def
));
1900 /* If DEF is an old name, register DEF as a new
1901 definition for itself. */
1902 if (is_old_name (def
))
1903 register_new_update_single (def
, def
);
1908 /* Update every variable used in the statement pointed-to by SI. The
1909 statement is assumed to be in SSA form already. Names in
1910 OLD_SSA_NAMES used by SI will be updated to their current reaching
1911 definition. Names in OLD_SSA_NAMES or NEW_SSA_NAMES defined by SI
1912 will be registered as a new definition for their corresponding name
1913 in OLD_SSA_NAMES. */
1916 rewrite_update_stmt (gimple stmt
, gimple_stmt_iterator gsi
)
1918 use_operand_p use_p
;
1919 def_operand_p def_p
;
1922 /* Only update marked statements. */
1923 if (!rewrite_uses_p (stmt
) && !register_defs_p (stmt
))
1926 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
1928 fprintf (dump_file
, "Updating SSA information for statement ");
1929 print_gimple_stmt (dump_file
, stmt
, 0, TDF_SLIM
);
1930 fprintf (dump_file
, "\n");
1933 /* Rewrite USES included in OLD_SSA_NAMES and USES whose underlying
1934 symbol is marked for renaming. */
1935 if (rewrite_uses_p (stmt
))
1937 if (is_gimple_debug (stmt
))
1939 bool failed
= false;
1941 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_USE
)
1942 if (!maybe_replace_use_in_debug_stmt (use_p
))
1950 /* DOM sometimes threads jumps in such a way that a
1951 debug stmt ends up referencing a SSA variable that no
1952 longer dominates the debug stmt, but such that all
1953 incoming definitions refer to the same definition in
1954 an earlier dominator. We could try to recover that
1955 definition somehow, but this will have to do for now.
1957 Introducing a default definition, which is what
1958 maybe_replace_use() would do in such cases, may
1959 modify code generation, for the otherwise-unused
1960 default definition would never go away, modifying SSA
1961 version numbers all over. */
1962 gimple_debug_bind_reset_value (stmt
);
1968 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, iter
, SSA_OP_ALL_USES
)
1969 maybe_replace_use (use_p
);
1973 /* Register definitions of names in NEW_SSA_NAMES and OLD_SSA_NAMES.
1974 Also register definitions for names whose underlying symbol is
1975 marked for renaming. */
1976 if (register_defs_p (stmt
))
1977 FOR_EACH_SSA_DEF_OPERAND (def_p
, stmt
, iter
, SSA_OP_ALL_DEFS
)
1978 maybe_register_def (def_p
, stmt
, gsi
);
1982 /* Visit all the successor blocks of BB looking for PHI nodes. For
1983 every PHI node found, check if any of its arguments is in
1984 OLD_SSA_NAMES. If so, and if the argument has a current reaching
1985 definition, replace it. */
1988 rewrite_update_phi_arguments (basic_block bb
)
1994 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1999 if (!bitmap_bit_p (blocks_with_phis_to_rewrite
, e
->dest
->index
))
2002 phis
= VEC_index (gimple_vec
, phis_to_rewrite
, e
->dest
->index
);
2003 for (i
= 0; VEC_iterate (gimple
, phis
, i
, phi
); i
++)
2005 tree arg
, lhs_sym
, reaching_def
= NULL
;
2006 use_operand_p arg_p
;
2008 gcc_assert (rewrite_uses_p (phi
));
2010 arg_p
= PHI_ARG_DEF_PTR_FROM_EDGE (phi
, e
);
2011 arg
= USE_FROM_PTR (arg_p
);
2013 if (arg
&& !DECL_P (arg
) && TREE_CODE (arg
) != SSA_NAME
)
2016 lhs_sym
= SSA_NAME_VAR (gimple_phi_result (phi
));
2018 if (arg
== NULL_TREE
)
2020 /* When updating a PHI node for a recently introduced
2021 symbol we may find NULL arguments. That's why we
2022 take the symbol from the LHS of the PHI node. */
2023 reaching_def
= get_reaching_def (lhs_sym
);
2028 tree sym
= DECL_P (arg
) ? arg
: SSA_NAME_VAR (arg
);
2030 if (symbol_marked_for_renaming (sym
))
2031 reaching_def
= get_reaching_def (sym
);
2032 else if (is_old_name (arg
))
2033 reaching_def
= get_reaching_def (arg
);
2036 /* Update the argument if there is a reaching def. */
2040 source_location locus
;
2041 int arg_i
= PHI_ARG_INDEX_FROM_USE (arg_p
);
2043 SET_USE (arg_p
, reaching_def
);
2044 stmt
= SSA_NAME_DEF_STMT (reaching_def
);
2046 /* Single element PHI nodes behave like copies, so get the
2047 location from the phi argument. */
2048 if (gimple_code (stmt
) == GIMPLE_PHI
&&
2049 gimple_phi_num_args (stmt
) == 1)
2050 locus
= gimple_phi_arg_location (stmt
, 0);
2052 locus
= gimple_location (stmt
);
2054 gimple_phi_arg_set_location (phi
, arg_i
, locus
);
2058 if (e
->flags
& EDGE_ABNORMAL
)
2059 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (USE_FROM_PTR (arg_p
)) = 1;
2065 /* Initialization of block data structures for the incremental SSA
2066 update pass. Create a block local stack of reaching definitions
2067 for new SSA names produced in this block (BLOCK_DEFS). Register
2068 new definitions for every PHI node in the block. */
2071 rewrite_update_enter_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
2076 bool is_abnormal_phi
;
2077 gimple_stmt_iterator gsi
;
2079 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
2080 fprintf (dump_file
, "\n\nRegistering new PHI nodes in block #%d\n\n",
2083 /* Mark the unwind point for this block. */
2084 VEC_safe_push (tree
, heap
, block_defs_stack
, NULL_TREE
);
2086 if (!bitmap_bit_p (blocks_to_update
, bb
->index
))
2089 /* Mark the LHS if any of the arguments flows through an abnormal
2091 is_abnormal_phi
= false;
2092 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
2093 if (e
->flags
& EDGE_ABNORMAL
)
2095 is_abnormal_phi
= true;
2099 /* If any of the PHI nodes is a replacement for a name in
2100 OLD_SSA_NAMES or it's one of the names in NEW_SSA_NAMES, then
2101 register it as a new definition for its corresponding name. Also
2102 register definitions for names whose underlying symbols are
2103 marked for renaming. */
2104 for (gsi
= gsi_start_phis (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
2107 gimple phi
= gsi_stmt (gsi
);
2109 if (!register_defs_p (phi
))
2112 lhs
= gimple_phi_result (phi
);
2113 lhs_sym
= SSA_NAME_VAR (lhs
);
2115 if (symbol_marked_for_renaming (lhs_sym
))
2116 register_new_update_single (lhs
, lhs_sym
);
2120 /* If LHS is a new name, register a new definition for all
2121 the names replaced by LHS. */
2122 if (is_new_name (lhs
))
2123 register_new_update_set (lhs
, names_replaced_by (lhs
));
2125 /* If LHS is an OLD name, register it as a new definition
2127 if (is_old_name (lhs
))
2128 register_new_update_single (lhs
, lhs
);
2131 if (is_abnormal_phi
)
2132 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs
) = 1;
2135 /* Step 2. Rewrite every variable used in each statement in the block. */
2136 if (TEST_BIT (interesting_blocks
, bb
->index
))
2138 gcc_assert (bitmap_bit_p (blocks_to_update
, bb
->index
));
2139 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
2140 rewrite_update_stmt (gsi_stmt (gsi
), gsi
);
2143 /* Step 3. Update PHI nodes. */
2144 rewrite_update_phi_arguments (bb
);
2147 /* Called after visiting block BB. Unwind BLOCK_DEFS_STACK to restore
2148 the current reaching definition of every name re-written in BB to
2149 the original reaching definition before visiting BB. This
2150 unwinding must be done in the opposite order to what is done in
2151 register_new_update_set. */
2154 rewrite_update_leave_block (struct dom_walk_data
*walk_data ATTRIBUTE_UNUSED
,
2155 basic_block bb ATTRIBUTE_UNUSED
)
2157 while (VEC_length (tree
, block_defs_stack
) > 0)
2159 tree var
= VEC_pop (tree
, block_defs_stack
);
2162 /* NULL indicates the unwind stop point for this block (see
2163 rewrite_update_enter_block). */
2167 saved_def
= VEC_pop (tree
, block_defs_stack
);
2168 set_current_def (var
, saved_def
);
2173 /* Rewrite the actual blocks, statements, and PHI arguments, to be in SSA
2176 ENTRY indicates the block where to start. Every block dominated by
2177 ENTRY will be rewritten.
2179 WHAT indicates what actions will be taken by the renamer (see enum
2182 BLOCKS are the set of interesting blocks for the dominator walker
2183 to process. If this set is NULL, then all the nodes dominated
2184 by ENTRY are walked. Otherwise, blocks dominated by ENTRY that
2185 are not present in BLOCKS are ignored. */
2188 rewrite_blocks (basic_block entry
, enum rewrite_mode what
)
2190 struct dom_walk_data walk_data
;
2192 /* Rewrite all the basic blocks in the program. */
2193 timevar_push (TV_TREE_SSA_REWRITE_BLOCKS
);
2195 /* Setup callbacks for the generic dominator tree walker. */
2196 memset (&walk_data
, 0, sizeof (walk_data
));
2198 walk_data
.dom_direction
= CDI_DOMINATORS
;
2200 if (what
== REWRITE_ALL
)
2202 walk_data
.before_dom_children
= rewrite_enter_block
;
2203 walk_data
.after_dom_children
= rewrite_leave_block
;
2205 else if (what
== REWRITE_UPDATE
)
2207 walk_data
.before_dom_children
= rewrite_update_enter_block
;
2208 walk_data
.after_dom_children
= rewrite_update_leave_block
;
2213 block_defs_stack
= VEC_alloc (tree
, heap
, 10);
2215 /* Initialize the dominator walker. */
2216 init_walk_dominator_tree (&walk_data
);
2218 /* Recursively walk the dominator tree rewriting each statement in
2219 each basic block. */
2220 walk_dominator_tree (&walk_data
, entry
);
2222 /* Finalize the dominator walker. */
2223 fini_walk_dominator_tree (&walk_data
);
2225 /* Debugging dumps. */
2226 if (dump_file
&& (dump_flags
& TDF_STATS
))
2228 dump_dfa_stats (dump_file
);
2230 dump_tree_ssa_stats (dump_file
);
2233 VEC_free (tree
, heap
, block_defs_stack
);
2235 timevar_pop (TV_TREE_SSA_REWRITE_BLOCKS
);
2239 /* Block processing routine for mark_def_sites. Clear the KILLS bitmap
2240 at the start of each block, and call mark_def_sites for each statement. */
2243 mark_def_sites_block (struct dom_walk_data
*walk_data
, basic_block bb
)
2245 struct mark_def_sites_global_data
*gd
;
2247 gimple_stmt_iterator gsi
;
2249 gd
= (struct mark_def_sites_global_data
*) walk_data
->global_data
;
2252 bitmap_clear (kills
);
2253 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
2254 mark_def_sites (bb
, gsi_stmt (gsi
), kills
);
2258 /* Mark the definition site blocks for each variable, so that we know
2259 where the variable is actually live.
2261 The INTERESTING_BLOCKS global will be filled in with all the blocks
2262 that should be processed by the renamer. It is assumed that the
2263 caller has already initialized and zeroed it. */
2266 mark_def_site_blocks (void)
2268 struct dom_walk_data walk_data
;
2269 struct mark_def_sites_global_data mark_def_sites_global_data
;
2271 /* Setup callbacks for the generic dominator tree walker to find and
2272 mark definition sites. */
2273 walk_data
.dom_direction
= CDI_DOMINATORS
;
2274 walk_data
.initialize_block_local_data
= NULL
;
2275 walk_data
.before_dom_children
= mark_def_sites_block
;
2276 walk_data
.after_dom_children
= NULL
;
2278 /* Notice that this bitmap is indexed using variable UIDs, so it must be
2279 large enough to accommodate all the variables referenced in the
2280 function, not just the ones we are renaming. */
2281 mark_def_sites_global_data
.kills
= BITMAP_ALLOC (NULL
);
2282 walk_data
.global_data
= &mark_def_sites_global_data
;
2284 /* We do not have any local data. */
2285 walk_data
.block_local_data_size
= 0;
2287 /* Initialize the dominator walker. */
2288 init_walk_dominator_tree (&walk_data
);
2290 /* Recursively walk the dominator tree. */
2291 walk_dominator_tree (&walk_data
, ENTRY_BLOCK_PTR
);
2293 /* Finalize the dominator walker. */
2294 fini_walk_dominator_tree (&walk_data
);
2296 /* We no longer need this bitmap, clear and free it. */
2297 BITMAP_FREE (mark_def_sites_global_data
.kills
);
2301 /* Initialize internal data needed during renaming. */
2304 init_ssa_renamer (void)
2307 referenced_var_iterator rvi
;
2309 cfun
->gimple_df
->in_ssa_p
= false;
2311 /* Allocate memory for the DEF_BLOCKS hash table. */
2312 gcc_assert (def_blocks
== NULL
);
2313 def_blocks
= htab_create (num_referenced_vars
, def_blocks_hash
,
2314 def_blocks_eq
, def_blocks_free
);
2316 FOR_EACH_REFERENCED_VAR(var
, rvi
)
2317 set_current_def (var
, NULL_TREE
);
2321 /* Deallocate internal data structures used by the renamer. */
2324 fini_ssa_renamer (void)
2328 htab_delete (def_blocks
);
2332 cfun
->gimple_df
->in_ssa_p
= true;
2335 /* Main entry point into the SSA builder. The renaming process
2336 proceeds in four main phases:
2338 1- Compute dominance frontier and immediate dominators, needed to
2339 insert PHI nodes and rename the function in dominator tree
2342 2- Find and mark all the blocks that define variables
2343 (mark_def_site_blocks).
2345 3- Insert PHI nodes at dominance frontiers (insert_phi_nodes).
2347 4- Rename all the blocks (rewrite_blocks) and statements in the program.
2349 Steps 3 and 4 are done using the dominator tree walker
2350 (walk_dominator_tree). */
2353 rewrite_into_ssa (void)
2358 timevar_push (TV_TREE_SSA_OTHER
);
2360 /* Initialize operand data structures. */
2361 init_ssa_operands ();
2363 /* Initialize internal data needed by the renamer. */
2364 init_ssa_renamer ();
2366 /* Initialize the set of interesting blocks. The callback
2367 mark_def_sites will add to this set those blocks that the renamer
2369 interesting_blocks
= sbitmap_alloc (last_basic_block
);
2370 sbitmap_zero (interesting_blocks
);
2372 /* Initialize dominance frontier. */
2373 dfs
= XNEWVEC (bitmap
, last_basic_block
);
2375 dfs
[bb
->index
] = BITMAP_ALLOC (NULL
);
2377 /* 1- Compute dominance frontiers. */
2378 calculate_dominance_info (CDI_DOMINATORS
);
2379 compute_dominance_frontiers (dfs
);
2381 /* 2- Find and mark definition sites. */
2382 mark_def_site_blocks ();
2384 /* 3- Insert PHI nodes at dominance frontiers of definition blocks. */
2385 insert_phi_nodes (dfs
);
2387 /* 4- Rename all the blocks. */
2388 rewrite_blocks (ENTRY_BLOCK_PTR
, REWRITE_ALL
);
2390 /* Free allocated memory. */
2392 BITMAP_FREE (dfs
[bb
->index
]);
2395 sbitmap_free (interesting_blocks
);
2397 fini_ssa_renamer ();
2399 timevar_pop (TV_TREE_SSA_OTHER
);
2404 struct gimple_opt_pass pass_build_ssa
=
2410 rewrite_into_ssa
, /* execute */
2413 0, /* static_pass_number */
2414 TV_NONE
, /* tv_id */
2415 PROP_cfg
| PROP_referenced_vars
, /* properties_required */
2416 PROP_ssa
, /* properties_provided */
2417 0, /* properties_destroyed */
2418 0, /* todo_flags_start */
2420 | TODO_update_ssa_only_virtuals
2422 | TODO_remove_unused_locals
/* todo_flags_finish */
2427 /* Mark the definition of VAR at STMT and BB as interesting for the
2428 renamer. BLOCKS is the set of blocks that need updating. */
2431 mark_def_interesting (tree var
, gimple stmt
, basic_block bb
, bool insert_phi_p
)
2433 gcc_assert (bitmap_bit_p (blocks_to_update
, bb
->index
));
2434 set_register_defs (stmt
, true);
2438 bool is_phi_p
= gimple_code (stmt
) == GIMPLE_PHI
;
2440 set_def_block (var
, bb
, is_phi_p
);
2442 /* If VAR is an SSA name in NEW_SSA_NAMES, this is a definition
2443 site for both itself and all the old names replaced by it. */
2444 if (TREE_CODE (var
) == SSA_NAME
&& is_new_name (var
))
2448 bitmap set
= names_replaced_by (var
);
2450 EXECUTE_IF_SET_IN_BITMAP (set
, 0, i
, bi
)
2451 set_def_block (ssa_name (i
), bb
, is_phi_p
);
2457 /* Mark the use of VAR at STMT and BB as interesting for the
2458 renamer. INSERT_PHI_P is true if we are going to insert new PHI
2462 mark_use_interesting (tree var
, gimple stmt
, basic_block bb
, bool insert_phi_p
)
2464 basic_block def_bb
= gimple_bb (stmt
);
2466 mark_block_for_update (def_bb
);
2467 mark_block_for_update (bb
);
2469 if (gimple_code (stmt
) == GIMPLE_PHI
)
2470 mark_phi_for_rewrite (def_bb
, stmt
);
2473 set_rewrite_uses (stmt
, true);
2475 if (is_gimple_debug (stmt
))
2479 /* If VAR has not been defined in BB, then it is live-on-entry
2480 to BB. Note that we cannot just use the block holding VAR's
2481 definition because if VAR is one of the names in OLD_SSA_NAMES,
2482 it will have several definitions (itself and all the names that
2486 struct def_blocks_d
*db_p
= get_def_blocks_for (var
);
2487 if (!bitmap_bit_p (db_p
->def_blocks
, bb
->index
))
2488 set_livein_block (var
, bb
);
2493 /* Do a dominator walk starting at BB processing statements that
2494 reference symbols in SYMS_TO_RENAME. This is very similar to
2495 mark_def_sites, but the scan handles statements whose operands may
2496 already be SSA names.
2498 If INSERT_PHI_P is true, mark those uses as live in the
2499 corresponding block. This is later used by the PHI placement
2500 algorithm to make PHI pruning decisions.
2502 FIXME. Most of this would be unnecessary if we could associate a
2503 symbol to all the SSA names that reference it. But that
2504 sounds like it would be expensive to maintain. Still, it
2505 would be interesting to see if it makes better sense to do
2509 prepare_block_for_update (basic_block bb
, bool insert_phi_p
)
2512 gimple_stmt_iterator si
;
2516 mark_block_for_update (bb
);
2518 /* Process PHI nodes marking interesting those that define or use
2519 the symbols that we are interested in. */
2520 for (si
= gsi_start_phis (bb
); !gsi_end_p (si
); gsi_next (&si
))
2522 gimple phi
= gsi_stmt (si
);
2523 tree lhs_sym
, lhs
= gimple_phi_result (phi
);
2525 lhs_sym
= DECL_P (lhs
) ? lhs
: SSA_NAME_VAR (lhs
);
2527 if (!symbol_marked_for_renaming (lhs_sym
))
2530 mark_def_interesting (lhs_sym
, phi
, bb
, insert_phi_p
);
2532 /* Mark the uses in phi nodes as interesting. It would be more correct
2533 to process the arguments of the phi nodes of the successor edges of
2534 BB at the end of prepare_block_for_update, however, that turns out
2535 to be significantly more expensive. Doing it here is conservatively
2536 correct -- it may only cause us to believe a value to be live in a
2537 block that also contains its definition, and thus insert a few more
2538 phi nodes for it. */
2539 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
2540 mark_use_interesting (lhs_sym
, phi
, e
->src
, insert_phi_p
);
2543 /* Process the statements. */
2544 for (si
= gsi_start_bb (bb
); !gsi_end_p (si
); gsi_next (&si
))
2548 use_operand_p use_p
;
2549 def_operand_p def_p
;
2551 stmt
= gsi_stmt (si
);
2553 FOR_EACH_SSA_USE_OPERAND (use_p
, stmt
, i
, SSA_OP_ALL_USES
)
2555 tree use
= USE_FROM_PTR (use_p
);
2556 tree sym
= DECL_P (use
) ? use
: SSA_NAME_VAR (use
);
2557 if (symbol_marked_for_renaming (sym
))
2558 mark_use_interesting (sym
, stmt
, bb
, insert_phi_p
);
2561 FOR_EACH_SSA_DEF_OPERAND (def_p
, stmt
, i
, SSA_OP_ALL_DEFS
)
2563 tree def
= DEF_FROM_PTR (def_p
);
2564 tree sym
= DECL_P (def
) ? def
: SSA_NAME_VAR (def
);
2565 if (symbol_marked_for_renaming (sym
))
2566 mark_def_interesting (sym
, stmt
, bb
, insert_phi_p
);
2570 /* Now visit all the blocks dominated by BB. */
2571 for (son
= first_dom_son (CDI_DOMINATORS
, bb
);
2573 son
= next_dom_son (CDI_DOMINATORS
, son
))
2574 prepare_block_for_update (son
, insert_phi_p
);
2578 /* Helper for prepare_names_to_update. Mark all the use sites for
2579 NAME as interesting. BLOCKS and INSERT_PHI_P are as in
2580 prepare_names_to_update. */
2583 prepare_use_sites_for (tree name
, bool insert_phi_p
)
2585 use_operand_p use_p
;
2586 imm_use_iterator iter
;
2588 FOR_EACH_IMM_USE_FAST (use_p
, iter
, name
)
2590 gimple stmt
= USE_STMT (use_p
);
2591 basic_block bb
= gimple_bb (stmt
);
2593 if (gimple_code (stmt
) == GIMPLE_PHI
)
2595 int ix
= PHI_ARG_INDEX_FROM_USE (use_p
);
2596 edge e
= gimple_phi_arg_edge (stmt
, ix
);
2597 mark_use_interesting (name
, stmt
, e
->src
, insert_phi_p
);
2601 /* For regular statements, mark this as an interesting use
2603 mark_use_interesting (name
, stmt
, bb
, insert_phi_p
);
2609 /* Helper for prepare_names_to_update. Mark the definition site for
2610 NAME as interesting. BLOCKS and INSERT_PHI_P are as in
2611 prepare_names_to_update. */
2614 prepare_def_site_for (tree name
, bool insert_phi_p
)
2619 gcc_assert (names_to_release
== NULL
2620 || !bitmap_bit_p (names_to_release
, SSA_NAME_VERSION (name
)));
2622 stmt
= SSA_NAME_DEF_STMT (name
);
2623 bb
= gimple_bb (stmt
);
2626 gcc_assert (bb
->index
< last_basic_block
);
2627 mark_block_for_update (bb
);
2628 mark_def_interesting (name
, stmt
, bb
, insert_phi_p
);
2633 /* Mark definition and use sites of names in NEW_SSA_NAMES and
2634 OLD_SSA_NAMES. INSERT_PHI_P is true if the caller wants to insert
2635 PHI nodes for newly created names. */
2638 prepare_names_to_update (bool insert_phi_p
)
2642 sbitmap_iterator sbi
;
2644 /* If a name N from NEW_SSA_NAMES is also marked to be released,
2645 remove it from NEW_SSA_NAMES so that we don't try to visit its
2646 defining basic block (which most likely doesn't exist). Notice
2647 that we cannot do the same with names in OLD_SSA_NAMES because we
2648 want to replace existing instances. */
2649 if (names_to_release
)
2650 EXECUTE_IF_SET_IN_BITMAP (names_to_release
, 0, i
, bi
)
2651 RESET_BIT (new_ssa_names
, i
);
2653 /* First process names in NEW_SSA_NAMES. Otherwise, uses of old
2654 names may be considered to be live-in on blocks that contain
2655 definitions for their replacements. */
2656 EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names
, 0, i
, sbi
)
2657 prepare_def_site_for (ssa_name (i
), insert_phi_p
);
2659 /* If an old name is in NAMES_TO_RELEASE, we cannot remove it from
2660 OLD_SSA_NAMES, but we have to ignore its definition site. */
2661 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
2663 if (names_to_release
== NULL
|| !bitmap_bit_p (names_to_release
, i
))
2664 prepare_def_site_for (ssa_name (i
), insert_phi_p
);
2665 prepare_use_sites_for (ssa_name (i
), insert_phi_p
);
2670 /* Dump all the names replaced by NAME to FILE. */
2673 dump_names_replaced_by (FILE *file
, tree name
)
2679 print_generic_expr (file
, name
, 0);
2680 fprintf (file
, " -> { ");
2682 old_set
= names_replaced_by (name
);
2683 EXECUTE_IF_SET_IN_BITMAP (old_set
, 0, i
, bi
)
2685 print_generic_expr (file
, ssa_name (i
), 0);
2686 fprintf (file
, " ");
2689 fprintf (file
, "}\n");
2693 /* Dump all the names replaced by NAME to stderr. */
2696 debug_names_replaced_by (tree name
)
2698 dump_names_replaced_by (stderr
, name
);
2702 /* Dump SSA update information to FILE. */
2705 dump_update_ssa (FILE *file
)
2710 if (!need_ssa_update_p (cfun
))
2713 if (new_ssa_names
&& sbitmap_first_set_bit (new_ssa_names
) >= 0)
2715 sbitmap_iterator sbi
;
2717 fprintf (file
, "\nSSA replacement table\n");
2718 fprintf (file
, "N_i -> { O_1 ... O_j } means that N_i replaces "
2719 "O_1, ..., O_j\n\n");
2721 EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names
, 0, i
, sbi
)
2722 dump_names_replaced_by (file
, ssa_name (i
));
2724 fprintf (file
, "\n");
2725 fprintf (file
, "Number of virtual NEW -> OLD mappings: %7u\n",
2726 update_ssa_stats
.num_virtual_mappings
);
2727 fprintf (file
, "Number of real NEW -> OLD mappings: %7u\n",
2728 update_ssa_stats
.num_total_mappings
2729 - update_ssa_stats
.num_virtual_mappings
);
2730 fprintf (file
, "Number of total NEW -> OLD mappings: %7u\n",
2731 update_ssa_stats
.num_total_mappings
);
2733 fprintf (file
, "\nNumber of virtual symbols: %u\n",
2734 update_ssa_stats
.num_virtual_symbols
);
2737 if (!bitmap_empty_p (SYMS_TO_RENAME (cfun
)))
2739 fprintf (file
, "\n\nSymbols to be put in SSA form\n\n");
2740 dump_decl_set (file
, SYMS_TO_RENAME (cfun
));
2741 fprintf (file
, "\n");
2744 if (names_to_release
&& !bitmap_empty_p (names_to_release
))
2746 fprintf (file
, "\n\nSSA names to release after updating the SSA web\n\n");
2747 EXECUTE_IF_SET_IN_BITMAP (names_to_release
, 0, i
, bi
)
2749 print_generic_expr (file
, ssa_name (i
), 0);
2750 fprintf (file
, " ");
2754 fprintf (file
, "\n\n");
2758 /* Dump SSA update information to stderr. */
2761 debug_update_ssa (void)
2763 dump_update_ssa (stderr
);
2767 /* Initialize data structures used for incremental SSA updates. */
2770 init_update_ssa (struct function
*fn
)
2772 /* Reserve more space than the current number of names. The calls to
2773 add_new_name_mapping are typically done after creating new SSA
2774 names, so we'll need to reallocate these arrays. */
2775 old_ssa_names
= sbitmap_alloc (num_ssa_names
+ NAME_SETS_GROWTH_FACTOR
);
2776 sbitmap_zero (old_ssa_names
);
2778 new_ssa_names
= sbitmap_alloc (num_ssa_names
+ NAME_SETS_GROWTH_FACTOR
);
2779 sbitmap_zero (new_ssa_names
);
2781 repl_tbl
= htab_create (20, repl_map_hash
, repl_map_eq
, repl_map_free
);
2782 names_to_release
= NULL
;
2783 memset (&update_ssa_stats
, 0, sizeof (update_ssa_stats
));
2784 update_ssa_stats
.virtual_symbols
= BITMAP_ALLOC (NULL
);
2785 update_ssa_initialized_fn
= fn
;
2789 /* Deallocate data structures used for incremental SSA updates. */
2792 delete_update_ssa (void)
2797 sbitmap_free (old_ssa_names
);
2798 old_ssa_names
= NULL
;
2800 sbitmap_free (new_ssa_names
);
2801 new_ssa_names
= NULL
;
2803 htab_delete (repl_tbl
);
2806 bitmap_clear (SYMS_TO_RENAME (update_ssa_initialized_fn
));
2807 BITMAP_FREE (update_ssa_stats
.virtual_symbols
);
2809 if (names_to_release
)
2811 EXECUTE_IF_SET_IN_BITMAP (names_to_release
, 0, i
, bi
)
2812 release_ssa_name (ssa_name (i
));
2813 BITMAP_FREE (names_to_release
);
2816 clear_ssa_name_info ();
2818 fini_ssa_renamer ();
2820 if (blocks_with_phis_to_rewrite
)
2821 EXECUTE_IF_SET_IN_BITMAP (blocks_with_phis_to_rewrite
, 0, i
, bi
)
2823 gimple_vec phis
= VEC_index (gimple_vec
, phis_to_rewrite
, i
);
2825 VEC_free (gimple
, heap
, phis
);
2826 VEC_replace (gimple_vec
, phis_to_rewrite
, i
, NULL
);
2829 BITMAP_FREE (blocks_with_phis_to_rewrite
);
2830 BITMAP_FREE (blocks_to_update
);
2831 update_ssa_initialized_fn
= NULL
;
2835 /* Create a new name for OLD_NAME in statement STMT and replace the
2836 operand pointed to by DEF_P with the newly created name. Return
2837 the new name and register the replacement mapping <NEW, OLD> in
2838 update_ssa's tables. */
2841 create_new_def_for (tree old_name
, gimple stmt
, def_operand_p def
)
2843 tree new_name
= duplicate_ssa_name (old_name
, stmt
);
2845 SET_DEF (def
, new_name
);
2847 if (gimple_code (stmt
) == GIMPLE_PHI
)
2851 basic_block bb
= gimple_bb (stmt
);
2853 /* If needed, mark NEW_NAME as occurring in an abnormal PHI node. */
2854 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
2855 if (e
->flags
& EDGE_ABNORMAL
)
2857 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_name
) = 1;
2862 register_new_name_mapping (new_name
, old_name
);
2864 /* For the benefit of passes that will be updating the SSA form on
2865 their own, set the current reaching definition of OLD_NAME to be
2867 set_current_def (old_name
, new_name
);
2873 /* Register name NEW to be a replacement for name OLD. This function
2874 must be called for every replacement that should be performed by
2878 register_new_name_mapping (tree new_tree
, tree old
)
2880 if (!update_ssa_initialized_fn
)
2881 init_update_ssa (cfun
);
2883 gcc_assert (update_ssa_initialized_fn
== cfun
);
2885 add_new_name_mapping (new_tree
, old
);
2889 /* Register symbol SYM to be renamed by update_ssa. */
2892 mark_sym_for_renaming (tree sym
)
2894 bitmap_set_bit (SYMS_TO_RENAME (cfun
), DECL_UID (sym
));
2898 /* Register all the symbols in SET to be renamed by update_ssa. */
2901 mark_set_for_renaming (bitmap set
)
2906 if (set
== NULL
|| bitmap_empty_p (set
))
2909 EXECUTE_IF_SET_IN_BITMAP (set
, 0, i
, bi
)
2910 mark_sym_for_renaming (referenced_var (i
));
2914 /* Return true if there is any work to be done by update_ssa
2918 need_ssa_update_p (struct function
*fn
)
2920 gcc_assert (fn
!= NULL
);
2921 return (update_ssa_initialized_fn
== fn
2923 && !bitmap_empty_p (SYMS_TO_RENAME (fn
))));
2926 /* Return true if SSA name mappings have been registered for SSA updating. */
2929 name_mappings_registered_p (void)
2931 if (!update_ssa_initialized_fn
)
2934 gcc_assert (update_ssa_initialized_fn
== cfun
);
2936 return repl_tbl
&& htab_elements (repl_tbl
) > 0;
2939 /* Return true if name N has been registered in the replacement table. */
2942 name_registered_for_update_p (tree n ATTRIBUTE_UNUSED
)
2944 if (!update_ssa_initialized_fn
)
2947 gcc_assert (update_ssa_initialized_fn
== cfun
);
2949 return is_new_name (n
) || is_old_name (n
);
2953 /* Return the set of all the SSA names marked to be replaced. */
2956 ssa_names_to_replace (void)
2960 sbitmap_iterator sbi
;
2962 gcc_assert (update_ssa_initialized_fn
== NULL
2963 || update_ssa_initialized_fn
== cfun
);
2965 ret
= BITMAP_ALLOC (NULL
);
2966 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
2967 bitmap_set_bit (ret
, i
);
2973 /* Mark NAME to be released after update_ssa has finished. */
2976 release_ssa_name_after_update_ssa (tree name
)
2978 gcc_assert (cfun
&& update_ssa_initialized_fn
== cfun
);
2980 if (names_to_release
== NULL
)
2981 names_to_release
= BITMAP_ALLOC (NULL
);
2983 bitmap_set_bit (names_to_release
, SSA_NAME_VERSION (name
));
2987 /* Insert new PHI nodes to replace VAR. DFS contains dominance
2988 frontier information. BLOCKS is the set of blocks to be updated.
2990 This is slightly different than the regular PHI insertion
2991 algorithm. The value of UPDATE_FLAGS controls how PHI nodes for
2992 real names (i.e., GIMPLE registers) are inserted:
2994 - If UPDATE_FLAGS == TODO_update_ssa, we are only interested in PHI
2995 nodes inside the region affected by the block that defines VAR
2996 and the blocks that define all its replacements. All these
2997 definition blocks are stored in DEF_BLOCKS[VAR]->DEF_BLOCKS.
2999 First, we compute the entry point to the region (ENTRY). This is
3000 given by the nearest common dominator to all the definition
3001 blocks. When computing the iterated dominance frontier (IDF), any
3002 block not strictly dominated by ENTRY is ignored.
3004 We then call the standard PHI insertion algorithm with the pruned
3007 - If UPDATE_FLAGS == TODO_update_ssa_full_phi, the IDF for real
3008 names is not pruned. PHI nodes are inserted at every IDF block. */
3011 insert_updated_phi_nodes_for (tree var
, bitmap
*dfs
, bitmap blocks
,
3012 unsigned update_flags
)
3015 struct def_blocks_d
*db
;
3016 bitmap idf
, pruned_idf
;
3020 #if defined ENABLE_CHECKING
3021 if (TREE_CODE (var
) == SSA_NAME
)
3022 gcc_assert (is_old_name (var
));
3024 gcc_assert (symbol_marked_for_renaming (var
));
3027 /* Get all the definition sites for VAR. */
3028 db
= find_def_blocks_for (var
);
3030 /* No need to do anything if there were no definitions to VAR. */
3031 if (db
== NULL
|| bitmap_empty_p (db
->def_blocks
))
3034 /* Compute the initial iterated dominance frontier. */
3035 idf
= compute_idf (db
->def_blocks
, dfs
);
3036 pruned_idf
= BITMAP_ALLOC (NULL
);
3038 if (TREE_CODE (var
) == SSA_NAME
)
3040 if (update_flags
== TODO_update_ssa
)
3042 /* If doing regular SSA updates for GIMPLE registers, we are
3043 only interested in IDF blocks dominated by the nearest
3044 common dominator of all the definition blocks. */
3045 entry
= nearest_common_dominator_for_set (CDI_DOMINATORS
,
3047 if (entry
!= ENTRY_BLOCK_PTR
)
3048 EXECUTE_IF_SET_IN_BITMAP (idf
, 0, i
, bi
)
3049 if (BASIC_BLOCK (i
) != entry
3050 && dominated_by_p (CDI_DOMINATORS
, BASIC_BLOCK (i
), entry
))
3051 bitmap_set_bit (pruned_idf
, i
);
3055 /* Otherwise, do not prune the IDF for VAR. */
3056 gcc_assert (update_flags
== TODO_update_ssa_full_phi
);
3057 bitmap_copy (pruned_idf
, idf
);
3062 /* Otherwise, VAR is a symbol that needs to be put into SSA form
3063 for the first time, so we need to compute the full IDF for
3065 bitmap_copy (pruned_idf
, idf
);
3068 if (!bitmap_empty_p (pruned_idf
))
3070 /* Make sure that PRUNED_IDF blocks and all their feeding blocks
3071 are included in the region to be updated. The feeding blocks
3072 are important to guarantee that the PHI arguments are renamed
3075 /* FIXME, this is not needed if we are updating symbols. We are
3076 already starting at the ENTRY block anyway. */
3077 bitmap_ior_into (blocks
, pruned_idf
);
3078 EXECUTE_IF_SET_IN_BITMAP (pruned_idf
, 0, i
, bi
)
3082 basic_block bb
= BASIC_BLOCK (i
);
3084 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
3085 if (e
->src
->index
>= 0)
3086 bitmap_set_bit (blocks
, e
->src
->index
);
3089 insert_phi_nodes_for (var
, pruned_idf
, true);
3092 BITMAP_FREE (pruned_idf
);
3097 /* Heuristic to determine whether SSA name mappings for virtual names
3098 should be discarded and their symbols rewritten from scratch. When
3099 there is a large number of mappings for virtual names, the
3100 insertion of PHI nodes for the old names in the mappings takes
3101 considerable more time than if we inserted PHI nodes for the
3104 Currently the heuristic takes these stats into account:
3106 - Number of mappings for virtual SSA names.
3107 - Number of distinct virtual symbols involved in those mappings.
3109 If the number of virtual mappings is much larger than the number of
3110 virtual symbols, then it will be faster to compute PHI insertion
3111 spots for the symbols. Even if this involves traversing the whole
3112 CFG, which is what happens when symbols are renamed from scratch. */
3115 switch_virtuals_to_full_rewrite_p (void)
3117 if (update_ssa_stats
.num_virtual_mappings
< (unsigned) MIN_VIRTUAL_MAPPINGS
)
3120 if (update_ssa_stats
.num_virtual_mappings
3121 > (unsigned) VIRTUAL_MAPPINGS_TO_SYMS_RATIO
3122 * update_ssa_stats
.num_virtual_symbols
)
3129 /* Remove every virtual mapping and mark all the affected virtual
3130 symbols for renaming. */
3133 switch_virtuals_to_full_rewrite (void)
3136 sbitmap_iterator sbi
;
3140 fprintf (dump_file
, "\nEnabled virtual name mapping heuristic.\n");
3141 fprintf (dump_file
, "\tNumber of virtual mappings: %7u\n",
3142 update_ssa_stats
.num_virtual_mappings
);
3143 fprintf (dump_file
, "\tNumber of unique virtual symbols: %7u\n",
3144 update_ssa_stats
.num_virtual_symbols
);
3145 fprintf (dump_file
, "Updating FUD-chains from top of CFG will be "
3146 "faster than processing\nthe name mappings.\n\n");
3149 /* Remove all virtual names from NEW_SSA_NAMES and OLD_SSA_NAMES.
3150 Note that it is not really necessary to remove the mappings from
3151 REPL_TBL, that would only waste time. */
3152 EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names
, 0, i
, sbi
)
3153 if (!is_gimple_reg (ssa_name (i
)))
3154 RESET_BIT (new_ssa_names
, i
);
3156 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
3157 if (!is_gimple_reg (ssa_name (i
)))
3158 RESET_BIT (old_ssa_names
, i
);
3160 mark_set_for_renaming (update_ssa_stats
.virtual_symbols
);
3164 /* Given a set of newly created SSA names (NEW_SSA_NAMES) and a set of
3165 existing SSA names (OLD_SSA_NAMES), update the SSA form so that:
3167 1- The names in OLD_SSA_NAMES dominated by the definitions of
3168 NEW_SSA_NAMES are all re-written to be reached by the
3169 appropriate definition from NEW_SSA_NAMES.
3171 2- If needed, new PHI nodes are added to the iterated dominance
3172 frontier of the blocks where each of NEW_SSA_NAMES are defined.
3174 The mapping between OLD_SSA_NAMES and NEW_SSA_NAMES is setup by
3175 calling register_new_name_mapping for every pair of names that the
3176 caller wants to replace.
3178 The caller identifies the new names that have been inserted and the
3179 names that need to be replaced by calling register_new_name_mapping
3180 for every pair <NEW, OLD>. Note that the function assumes that the
3181 new names have already been inserted in the IL.
3183 For instance, given the following code:
3186 2 x_1 = PHI (0, x_5)
3197 Suppose that we insert new names x_10 and x_11 (lines 4 and 8).
3200 2 x_1 = PHI (0, x_5)
3213 We want to replace all the uses of x_1 with the new definitions of
3214 x_10 and x_11. Note that the only uses that should be replaced are
3215 those at lines 5, 9 and 11. Also, the use of x_7 at line 9 should
3216 *not* be replaced (this is why we cannot just mark symbol 'x' for
3219 Additionally, we may need to insert a PHI node at line 11 because
3220 that is a merge point for x_10 and x_11. So the use of x_1 at line
3221 11 will be replaced with the new PHI node. The insertion of PHI
3222 nodes is optional. They are not strictly necessary to preserve the
3223 SSA form, and depending on what the caller inserted, they may not
3224 even be useful for the optimizers. UPDATE_FLAGS controls various
3225 aspects of how update_ssa operates, see the documentation for
3226 TODO_update_ssa*. */
3229 update_ssa (unsigned update_flags
)
3231 basic_block bb
, start_bb
;
3235 sbitmap_iterator sbi
;
3237 if (!need_ssa_update_p (cfun
))
3240 timevar_push (TV_TREE_SSA_INCREMENTAL
);
3242 if (!update_ssa_initialized_fn
)
3243 init_update_ssa (cfun
);
3244 gcc_assert (update_ssa_initialized_fn
== cfun
);
3246 blocks_with_phis_to_rewrite
= BITMAP_ALLOC (NULL
);
3247 if (!phis_to_rewrite
)
3248 phis_to_rewrite
= VEC_alloc (gimple_vec
, heap
, last_basic_block
);
3249 blocks_to_update
= BITMAP_ALLOC (NULL
);
3251 /* Ensure that the dominance information is up-to-date. */
3252 calculate_dominance_info (CDI_DOMINATORS
);
3254 /* Only one update flag should be set. */
3255 gcc_assert (update_flags
== TODO_update_ssa
3256 || update_flags
== TODO_update_ssa_no_phi
3257 || update_flags
== TODO_update_ssa_full_phi
3258 || update_flags
== TODO_update_ssa_only_virtuals
);
3260 /* If we only need to update virtuals, remove all the mappings for
3261 real names before proceeding. The caller is responsible for
3262 having dealt with the name mappings before calling update_ssa. */
3263 if (update_flags
== TODO_update_ssa_only_virtuals
)
3265 sbitmap_zero (old_ssa_names
);
3266 sbitmap_zero (new_ssa_names
);
3267 htab_empty (repl_tbl
);
3270 insert_phi_p
= (update_flags
!= TODO_update_ssa_no_phi
);
3274 /* If the caller requested PHI nodes to be added, initialize
3275 live-in information data structures (DEF_BLOCKS). */
3277 /* For each SSA name N, the DEF_BLOCKS table describes where the
3278 name is defined, which blocks have PHI nodes for N, and which
3279 blocks have uses of N (i.e., N is live-on-entry in those
3281 def_blocks
= htab_create (num_ssa_names
, def_blocks_hash
,
3282 def_blocks_eq
, def_blocks_free
);
3289 /* Heuristic to avoid massive slow downs when the replacement
3290 mappings include lots of virtual names. */
3291 if (insert_phi_p
&& switch_virtuals_to_full_rewrite_p ())
3292 switch_virtuals_to_full_rewrite ();
3294 /* If there are names defined in the replacement table, prepare
3295 definition and use sites for all the names in NEW_SSA_NAMES and
3297 if (sbitmap_first_set_bit (new_ssa_names
) >= 0)
3299 prepare_names_to_update (insert_phi_p
);
3301 /* If all the names in NEW_SSA_NAMES had been marked for
3302 removal, and there are no symbols to rename, then there's
3303 nothing else to do. */
3304 if (sbitmap_first_set_bit (new_ssa_names
) < 0
3305 && bitmap_empty_p (SYMS_TO_RENAME (cfun
)))
3309 /* Next, determine the block at which to start the renaming process. */
3310 if (!bitmap_empty_p (SYMS_TO_RENAME (cfun
)))
3312 /* If we have to rename some symbols from scratch, we need to
3313 start the process at the root of the CFG. FIXME, it should
3314 be possible to determine the nearest block that had a
3315 definition for each of the symbols that are marked for
3316 updating. For now this seems more work than it's worth. */
3317 start_bb
= ENTRY_BLOCK_PTR
;
3319 /* Traverse the CFG looking for existing definitions and uses of
3320 symbols in SYMS_TO_RENAME. Mark interesting blocks and
3321 statements and set local live-in information for the PHI
3322 placement heuristics. */
3323 prepare_block_for_update (start_bb
, insert_phi_p
);
3327 /* Otherwise, the entry block to the region is the nearest
3328 common dominator for the blocks in BLOCKS. */
3329 start_bb
= nearest_common_dominator_for_set (CDI_DOMINATORS
,
3333 /* If requested, insert PHI nodes at the iterated dominance frontier
3334 of every block, creating new definitions for names in OLD_SSA_NAMES
3335 and for symbols in SYMS_TO_RENAME. */
3340 /* If the caller requested PHI nodes to be added, compute
3341 dominance frontiers. */
3342 dfs
= XNEWVEC (bitmap
, last_basic_block
);
3344 dfs
[bb
->index
] = BITMAP_ALLOC (NULL
);
3345 compute_dominance_frontiers (dfs
);
3347 if (sbitmap_first_set_bit (old_ssa_names
) >= 0)
3349 sbitmap_iterator sbi
;
3351 /* insert_update_phi_nodes_for will call add_new_name_mapping
3352 when inserting new PHI nodes, so the set OLD_SSA_NAMES
3353 will grow while we are traversing it (but it will not
3354 gain any new members). Copy OLD_SSA_NAMES to a temporary
3356 sbitmap tmp
= sbitmap_alloc (old_ssa_names
->n_bits
);
3357 sbitmap_copy (tmp
, old_ssa_names
);
3358 EXECUTE_IF_SET_IN_SBITMAP (tmp
, 0, i
, sbi
)
3359 insert_updated_phi_nodes_for (ssa_name (i
), dfs
, blocks_to_update
,
3364 EXECUTE_IF_SET_IN_BITMAP (SYMS_TO_RENAME (cfun
), 0, i
, bi
)
3365 insert_updated_phi_nodes_for (referenced_var (i
), dfs
, blocks_to_update
,
3369 BITMAP_FREE (dfs
[bb
->index
]);
3372 /* Insertion of PHI nodes may have added blocks to the region.
3373 We need to re-compute START_BB to include the newly added
3375 if (start_bb
!= ENTRY_BLOCK_PTR
)
3376 start_bb
= nearest_common_dominator_for_set (CDI_DOMINATORS
,
3380 /* Reset the current definition for name and symbol before renaming
3382 EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names
, 0, i
, sbi
)
3383 set_current_def (ssa_name (i
), NULL_TREE
);
3385 EXECUTE_IF_SET_IN_BITMAP (SYMS_TO_RENAME (cfun
), 0, i
, bi
)
3386 set_current_def (referenced_var (i
), NULL_TREE
);
3388 /* Now start the renaming process at START_BB. */
3389 interesting_blocks
= sbitmap_alloc (last_basic_block
);
3390 sbitmap_zero (interesting_blocks
);
3391 EXECUTE_IF_SET_IN_BITMAP (blocks_to_update
, 0, i
, bi
)
3392 SET_BIT (interesting_blocks
, i
);
3394 rewrite_blocks (start_bb
, REWRITE_UPDATE
);
3396 sbitmap_free (interesting_blocks
);
3398 /* Debugging dumps. */
3404 dump_update_ssa (dump_file
);
3406 fprintf (dump_file
, "Incremental SSA update started at block: %d\n\n",
3410 EXECUTE_IF_SET_IN_BITMAP (blocks_to_update
, 0, i
, bi
)
3412 fprintf (dump_file
, "Number of blocks in CFG: %d\n", last_basic_block
);
3413 fprintf (dump_file
, "Number of blocks to update: %d (%3.0f%%)\n\n",
3414 c
, PERCENT (c
, last_basic_block
));
3416 if (dump_flags
& TDF_DETAILS
)
3418 fprintf (dump_file
, "Affected blocks: ");
3419 EXECUTE_IF_SET_IN_BITMAP (blocks_to_update
, 0, i
, bi
)
3420 fprintf (dump_file
, "%u ", i
);
3421 fprintf (dump_file
, "\n");
3424 fprintf (dump_file
, "\n\n");
3427 /* Free allocated memory. */
3429 delete_update_ssa ();
3431 timevar_pop (TV_TREE_SSA_INCREMENTAL
);