re PR tree-optimization/26830 (Repeated SSA update during loop header copying)

PR tree-optimization/26830
	* tree-into-ssa.c (struct ssa_name_info): Add age field.
	(info_for_ssa_name, current_info_for_ssa_name_age,
	blocks_to_update): New variables.
	(get_ssa_name_ann): Use info_for_ssa_name instead of SSA_NAME_AUX.
	(clear_ssa_name_info, initialize_flags_in_bb,
	mark_block_for_update): New functions.
	(mark_def_sites, rewrite_stmt): Assert that blocks_to_update is NULL.
	(insert_phi_nodes_for, mark_use_interesting, prepare_block_for_update,
	prepare_def_site_for): Use mark_block_for_update.
	(mark_def_interesting): Assert that the processed block is marked in
	blocks_to_update.  Do not take blocks argument.
	(prepare_use_sites_for, prepare_names_to_update): Do not take blocks
	argument.
	(rewrite_update_init_block, rewrite_update_stmt): Only process
	blocks with statements to rewrite.
	(delete_update_ssa): Do not clear SSA_NAME_AUX.
	(update_ssa): Initialize and free blocks_to_update.  Do not
	clear flags on statements.  Do not use blocks bitmap.
	* tree.h (SSA_NAME_AUX): Removed.
	(struct tree_ssa_name): Removed aux field.
	* print-tree.c (print_node): Do not print SSA_NAME_AUX.

From-SVN: r113799
This commit is contained in:
Zdenek Dvorak 2006-05-15 20:24:55 +02:00 committed by Zdenek Dvorak
parent f8f80cbb62
commit 95dd309793
4 changed files with 171 additions and 95 deletions

View File

@ -1,3 +1,28 @@
2006-05-15 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/26830
* tree-into-ssa.c (struct ssa_name_info): Add age field.
(info_for_ssa_name, current_info_for_ssa_name_age,
blocks_to_update): New variables.
(get_ssa_name_ann): Use info_for_ssa_name instead of SSA_NAME_AUX.
(clear_ssa_name_info, initialize_flags_in_bb,
mark_block_for_update): New functions.
(mark_def_sites, rewrite_stmt): Assert that blocks_to_update is NULL.
(insert_phi_nodes_for, mark_use_interesting, prepare_block_for_update,
prepare_def_site_for): Use mark_block_for_update.
(mark_def_interesting): Assert that the processed block is marked in
blocks_to_update. Do not take blocks argument.
(prepare_use_sites_for, prepare_names_to_update): Do not take blocks
argument.
(rewrite_update_init_block, rewrite_update_stmt): Only process
blocks with statements to rewrite.
(delete_update_ssa): Do not clear SSA_NAME_AUX.
(update_ssa): Initialize and free blocks_to_update. Do not
clear flags on statements. Do not use blocks bitmap.
* tree.h (SSA_NAME_AUX): Removed.
(struct tree_ssa_name): Removed aux field.
* print-tree.c (print_node): Do not print SSA_NAME_AUX.
2006-05-15 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27603

View File

@ -822,8 +822,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
fprintf (file, " in-free-list");
if (SSA_NAME_PTR_INFO (node)
|| SSA_NAME_VALUE (node)
|| SSA_NAME_AUX (node))
|| SSA_NAME_VALUE (node))
{
indent_to (file, indent + 3);
if (SSA_NAME_PTR_INFO (node))
@ -832,8 +831,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
if (SSA_NAME_VALUE (node))
fprintf (file, " value %p",
(void *) SSA_NAME_VALUE (node));
if (SSA_NAME_AUX (node))
fprintf (file, " aux %p", SSA_NAME_AUX (node));
}
break;

View File

@ -194,15 +194,31 @@ struct mark_def_sites_global_data
/* Information stored for SSA names. */
struct ssa_name_info
{
/* The actual definition of the ssa name. */
tree current_def;
/* This field indicates whether or not the variable may need PHI nodes.
See the enum's definition for more detailed information about the
states. */
ENUM_BITFIELD (need_phi_state) need_phi_state : 2;
/* The actual definition of the ssa name. */
tree current_def;
/* Age of this record (so that info_for_ssa_name table can be cleared
quicky); if AGE < CURRENT_INFO_FOR_SSA_NAME_AGE, then the fields
are assumed to be null. */
unsigned age;
};
/* The information associated with names. */
typedef struct ssa_name_info *ssa_name_info_p;
DEF_VEC_P (ssa_name_info_p);
DEF_VEC_ALLOC_P (ssa_name_info_p, heap);
static VEC(ssa_name_info_p, heap) *info_for_ssa_name;
static unsigned current_info_for_ssa_name_age;
/* The set of blocks affected by update_ssa. */
static bitmap blocks_to_update;
/* The main entry point to the SSA renamer (rewrite_blocks) may be
called several times to do different, but related, tasks.
@ -251,12 +267,41 @@ void debug_names_replaced_by (tree);
static inline struct ssa_name_info *
get_ssa_name_ann (tree name)
{
if (!SSA_NAME_AUX (name))
SSA_NAME_AUX (name) = xcalloc (1, sizeof (struct ssa_name_info));
unsigned ver = SSA_NAME_VERSION (name);
unsigned len = VEC_length (ssa_name_info_p, info_for_ssa_name);
struct ssa_name_info *info;
return (struct ssa_name_info *) SSA_NAME_AUX (name);
if (ver >= len)
{
unsigned new_len = num_ssa_names;
VEC_reserve (ssa_name_info_p, heap, info_for_ssa_name, new_len);
while (len++ < new_len)
{
struct ssa_name_info *info = XCNEW (struct ssa_name_info);
info->age = current_info_for_ssa_name_age;
VEC_quick_push (ssa_name_info_p, info_for_ssa_name, info);
}
}
info = VEC_index (ssa_name_info_p, info_for_ssa_name, ver);
if (info->age < current_info_for_ssa_name_age)
{
info->need_phi_state = 0;
info->current_def = NULL_TREE;
info->age = current_info_for_ssa_name_age;
}
return info;
}
/* Clears info for ssa names. */
static void
clear_ssa_name_info (void)
{
current_info_for_ssa_name_age++;
}
/* Gets phi_state field for VAR. */
@ -359,6 +404,45 @@ compute_global_livein (bitmap livein, bitmap def_blocks)
}
/* Cleans up the REWRITE_THIS_STMT and REGISTER_DEFS_IN_THIS_STMT flags for
all statements in basic block BB. */
static void
initialize_flags_in_bb (basic_block bb)
{
tree phi, stmt;
block_stmt_iterator bsi;
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{
REWRITE_THIS_STMT (phi) = 0;
REGISTER_DEFS_IN_THIS_STMT (phi) = 0;
}
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
stmt = bsi_stmt (bsi);
/* We are going to use the operand cache API, such as
SET_USE, SET_DEF, and FOR_EACH_IMM_USE_FAST. The operand
cache for each statement should be up-to-date. */
gcc_assert (!stmt_modified_p (stmt));
REWRITE_THIS_STMT (stmt) = 0;
REGISTER_DEFS_IN_THIS_STMT (stmt) = 0;
}
}
/* Mark block BB as interesting for update_ssa. */
static void
mark_block_for_update (basic_block bb)
{
gcc_assert (blocks_to_update != NULL);
if (bitmap_bit_p (blocks_to_update, bb->index))
return;
bitmap_set_bit (blocks_to_update, bb->index);
initialize_flags_in_bb (bb);
}
/* Return the set of blocks where variable VAR is defined and the blocks
where VAR is live on entry (livein). If no entry is found in
DEF_BLOCKS, a new one is created and returned. */
@ -649,6 +733,7 @@ mark_def_sites (struct dom_walk_data *walk_data,
stmt = bsi_stmt (bsi);
update_stmt_if_modified (stmt);
gcc_assert (blocks_to_update == NULL);
REGISTER_DEFS_IN_THIS_STMT (stmt) = 0;
REWRITE_THIS_STMT (stmt) = 0;
@ -850,6 +935,8 @@ insert_phi_nodes_for (tree var, bitmap phi_insertion_points, bool update_p)
0, bb_index, bi)
{
bb = BASIC_BLOCK (bb_index);
if (update_p)
mark_block_for_update (bb);
if (update_p && TREE_CODE (var) == SSA_NAME)
{
@ -1059,6 +1146,7 @@ rewrite_stmt (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
/* If mark_def_sites decided that we don't need to rewrite this
statement, ignore it. */
gcc_assert (blocks_to_update == NULL);
if (!REWRITE_THIS_STMT (stmt) && !REGISTER_DEFS_IN_THIS_STMT (stmt))
return;
@ -1331,6 +1419,9 @@ rewrite_update_init_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
/* Mark the unwind point for this block. */
VEC_safe_push (tree, heap, block_defs_stack, NULL_TREE);
if (!bitmap_bit_p (blocks_to_update, bb->index))
return;
/* Mark the LHS if any of the arguments flows through an abnormal
edge. */
is_abnormal_phi = false;
@ -1346,6 +1437,7 @@ rewrite_update_init_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
register it as a new definition for its corresponding name. Also
register definitions for names whose underlying symbols are
marked for renaming. */
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{
tree lhs, lhs_sym;
@ -1483,6 +1575,8 @@ rewrite_update_stmt (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
stmt = bsi_stmt (si);
ann = stmt_ann (stmt);
gcc_assert (bitmap_bit_p (blocks_to_update, bb->index));
/* Only update marked statements. */
if (!REWRITE_THIS_STMT (stmt) && !REGISTER_DEFS_IN_THIS_STMT (stmt))
return;
@ -1843,11 +1937,10 @@ struct tree_opt_pass pass_build_ssa =
renamer. BLOCKS is the set of blocks that need updating. */
static void
mark_def_interesting (tree var, tree stmt, basic_block bb, bitmap blocks,
bool insert_phi_p)
mark_def_interesting (tree var, tree stmt, basic_block bb, bool insert_phi_p)
{
gcc_assert (bitmap_bit_p (blocks_to_update, bb->index));
REGISTER_DEFS_IN_THIS_STMT (stmt) = 1;
bitmap_set_bit (blocks, bb->index);
if (insert_phi_p)
{
@ -1872,19 +1965,20 @@ mark_def_interesting (tree var, tree stmt, basic_block bb, bitmap blocks,
/* Mark the use of VAR at STMT and BB as interesting for the
renamer. INSERT_PHI_P is true if we are going to insert new PHI
nodes. BLOCKS is the set of blocks that need updating. */
nodes. */
static inline void
mark_use_interesting (tree var, tree stmt, basic_block bb, bitmap blocks,
bool insert_phi_p)
mark_use_interesting (tree var, tree stmt, basic_block bb, bool insert_phi_p)
{
basic_block def_bb = bb_for_stmt (stmt);
mark_block_for_update (def_bb);
mark_block_for_update (bb);
if (TREE_CODE (stmt) == PHI_NODE)
mark_phi_for_rewrite (def_bb, stmt);
else
REWRITE_THIS_STMT (stmt) = 1;
bitmap_set_bit (blocks, bb->index);
/* If VAR has not been defined in BB, then it is live-on-entry
to BB. Note that we cannot just use the block holding VAR's
@ -1903,20 +1997,21 @@ mark_use_interesting (tree var, tree stmt, basic_block bb, bitmap blocks,
/* Do a dominator walk starting at BB processing statements that
reference symbols in SYMS_TO_RENAME. This is very similar to
mark_def_sites, but the scan handles statements whose operands may
already be SSA names. Blocks that contain defs or uses of symbols
in SYMS_TO_RENAME are added to BLOCKS.
already be SSA names.
If INSERT_PHI_P is true, mark those uses as live in the
corresponding block. This is later used by the PHI placement
algorithm to make PHI pruning decisions. */
static void
prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
prepare_block_for_update (basic_block bb, bool insert_phi_p)
{
basic_block son;
block_stmt_iterator si;
tree phi;
mark_block_for_update (bb);
/* Process PHI nodes marking interesting those that define or use
the symbols that we are interested in. */
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
@ -1927,8 +2022,8 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
if (symbol_marked_for_renaming (lhs_sym))
{
mark_use_interesting (lhs_sym, phi, bb, blocks, insert_phi_p);
mark_def_interesting (lhs_sym, phi, bb, blocks, insert_phi_p);
mark_use_interesting (lhs_sym, phi, bb, insert_phi_p);
mark_def_interesting (lhs_sym, phi, bb, insert_phi_p);
}
}
@ -1947,7 +2042,7 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
tree use = USE_FROM_PTR (use_p);
tree sym = DECL_P (use) ? use : SSA_NAME_VAR (use);
if (symbol_marked_for_renaming (sym))
mark_use_interesting (use, stmt, bb, blocks, insert_phi_p);
mark_use_interesting (use, stmt, bb, insert_phi_p);
}
FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, i, SSA_OP_DEF)
@ -1956,7 +2051,7 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
tree sym = DECL_P (def) ? def : SSA_NAME_VAR (def);
if (symbol_marked_for_renaming (sym))
mark_def_interesting (def, stmt, bb, blocks, insert_phi_p);
mark_def_interesting (def, stmt, bb, insert_phi_p);
}
FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, i, SSA_OP_VIRTUAL_DEFS)
@ -1966,8 +2061,8 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
if (symbol_marked_for_renaming (sym))
{
mark_use_interesting (sym, stmt, bb, blocks, insert_phi_p);
mark_def_interesting (sym, stmt, bb, blocks, insert_phi_p);
mark_use_interesting (sym, stmt, bb, insert_phi_p);
mark_def_interesting (sym, stmt, bb, insert_phi_p);
}
}
@ -1977,7 +2072,7 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
tree sym = DECL_P (use) ? use : SSA_NAME_VAR (use);
if (symbol_marked_for_renaming (sym))
mark_use_interesting (sym, stmt, bb, blocks, insert_phi_p);
mark_use_interesting (sym, stmt, bb, insert_phi_p);
}
}
@ -1985,7 +2080,7 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
for (son = first_dom_son (CDI_DOMINATORS, bb);
son;
son = next_dom_son (CDI_DOMINATORS, son))
prepare_block_for_update (son, blocks, insert_phi_p);
prepare_block_for_update (son, insert_phi_p);
}
@ -1994,7 +2089,7 @@ prepare_block_for_update (basic_block bb, bitmap blocks, bool insert_phi_p)
prepare_names_to_update. */
static void
prepare_use_sites_for (tree name, bitmap blocks, bool insert_phi_p)
prepare_use_sites_for (tree name, bool insert_phi_p)
{
use_operand_p use_p;
imm_use_iterator iter;
@ -2021,7 +2116,7 @@ prepare_use_sites_for (tree name, bitmap blocks, bool insert_phi_p)
placement algorithm may try to insert PHI nodes in blocks
that are not only unnecessary but also the renamer would
not know how to fill in. */
mark_use_interesting (name, stmt, bb, blocks, false);
mark_use_interesting (name, stmt, bb, false);
/* As discussed above, we only want to mark NAME live-in
through the edge corresponding to its slot inside the PHI
@ -2043,7 +2138,7 @@ prepare_use_sites_for (tree name, bitmap blocks, bool insert_phi_p)
{
/* For regular statements, mark this as an interesting use
for NAME. */
mark_use_interesting (name, stmt, bb, blocks, insert_phi_p);
mark_use_interesting (name, stmt, bb, insert_phi_p);
}
}
}
@ -2054,7 +2149,7 @@ prepare_use_sites_for (tree name, bitmap blocks, bool insert_phi_p)
prepare_names_to_update. */
static void
prepare_def_site_for (tree name, bitmap blocks, bool insert_phi_p)
prepare_def_site_for (tree name, bool insert_phi_p)
{
tree stmt;
basic_block bb;
@ -2067,18 +2162,18 @@ prepare_def_site_for (tree name, bitmap blocks, bool insert_phi_p)
if (bb)
{
gcc_assert (bb->index < last_basic_block);
mark_def_interesting (name, stmt, bb, blocks, insert_phi_p);
mark_block_for_update (bb);
mark_def_interesting (name, stmt, bb, insert_phi_p);
}
}
/* Mark definition and use sites of names in NEW_SSA_NAMES and
OLD_SSA_NAMES. Add each definition block to BLOCKS. INSERT_PHI_P
is true if the caller wants to insert PHI nodes for newly created
names. */
OLD_SSA_NAMES. INSERT_PHI_P is true if the caller wants to insert
PHI nodes for newly created names. */
static void
prepare_names_to_update (bitmap blocks, bool insert_phi_p)
prepare_names_to_update (bool insert_phi_p)
{
unsigned i = 0;
bitmap_iterator bi;
@ -2097,15 +2192,15 @@ prepare_names_to_update (bitmap blocks, bool insert_phi_p)
names may be considered to be live-in on blocks that contain
definitions for their replacements. */
EXECUTE_IF_SET_IN_SBITMAP (new_ssa_names, 0, i, sbi)
prepare_def_site_for (ssa_name (i), blocks, insert_phi_p);
prepare_def_site_for (ssa_name (i), insert_phi_p);
/* If an old name is in NAMES_TO_RELEASE, we cannot remove it from
OLD_SSA_NAMES, but we have to ignore its definition site. */
EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names, 0, i, sbi)
{
if (names_to_release == NULL || !bitmap_bit_p (names_to_release, i))
prepare_def_site_for (ssa_name (i), blocks, insert_phi_p);
prepare_use_sites_for (ssa_name (i), blocks, insert_phi_p);
prepare_def_site_for (ssa_name (i), insert_phi_p);
prepare_use_sites_for (ssa_name (i), insert_phi_p);
}
}
@ -2263,16 +2358,7 @@ delete_update_ssa (void)
BITMAP_FREE (names_to_release);
}
for (i = 1; i < num_ssa_names; i++)
{
tree n = ssa_name (i);
if (n)
{
free (SSA_NAME_AUX (n));
SSA_NAME_AUX (n) = NULL;
}
}
clear_ssa_name_info ();
}
@ -2664,7 +2750,6 @@ switch_virtuals_to_full_rewrite (void)
void
update_ssa (unsigned update_flags)
{
bitmap blocks;
basic_block bb, start_bb;
bitmap_iterator bi;
unsigned i = 0;
@ -2680,6 +2765,7 @@ update_ssa (unsigned update_flags)
blocks_with_phis_to_rewrite = BITMAP_ALLOC (NULL);
if (!phis_to_rewrite)
phis_to_rewrite = VEC_alloc (tree_vec, heap, last_basic_block);
blocks_to_update = BITMAP_ALLOC (NULL);
/* Ensure that the dominance information is up-to-date. */
calculate_dominance_info (CDI_DOMINATORS);
@ -2719,33 +2805,6 @@ update_ssa (unsigned update_flags)
def_blocks = NULL;
}
blocks = BITMAP_ALLOC (NULL);
/* Clear the REWRITE_THIS_STMT and REGISTER_DEFS_IN_THIS_STMT flags
for every statement and PHI node. */
FOR_EACH_BB (bb)
{
block_stmt_iterator si;
tree phi;
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{
REWRITE_THIS_STMT (phi) = 0;
REGISTER_DEFS_IN_THIS_STMT (phi) = 0;
}
for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
{
tree stmt = bsi_stmt (si);
/* We are going to use the operand cache API, such as
SET_USE, SET_DEF, and FOR_EACH_IMM_USE_FAST. The operand
cache for each statement should be up-to-date. */
gcc_assert (!stmt_modified_p (stmt));
REWRITE_THIS_STMT (stmt) = 0;
REGISTER_DEFS_IN_THIS_STMT (stmt) = 0;
}
}
/* Heuristic to avoid massive slow downs when the replacement
mappings include lots of virtual names. */
if (insert_phi_p && switch_virtuals_to_full_rewrite_p ())
@ -2756,7 +2815,7 @@ update_ssa (unsigned update_flags)
OLD_SSA_NAMES. */
if (sbitmap_first_set_bit (new_ssa_names) >= 0)
{
prepare_names_to_update (blocks, insert_phi_p);
prepare_names_to_update (insert_phi_p);
/* If all the names in NEW_SSA_NAMES had been marked for
removal, and there are no symbols to rename, then there's
@ -2780,13 +2839,14 @@ update_ssa (unsigned update_flags)
in SYMS_TO_RENAME. Mark interesting blocks and statements
and set local live-in information for the PHI placement
heuristics. */
prepare_block_for_update (start_bb, blocks, insert_phi_p);
prepare_block_for_update (start_bb, insert_phi_p);
}
else
{
/* Otherwise, the entry block to the region is the nearest
common dominator for the blocks in BLOCKS. */
start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS, blocks);
start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS,
blocks_to_update);
}
/* If requested, insert PHI nodes at the iterated dominance frontier
@ -2815,14 +2875,14 @@ update_ssa (unsigned update_flags)
sbitmap tmp = sbitmap_alloc (old_ssa_names->n_bits);
sbitmap_copy (tmp, old_ssa_names);
EXECUTE_IF_SET_IN_SBITMAP (tmp, 0, i, sbi)
insert_updated_phi_nodes_for (ssa_name (i), dfs, blocks,
insert_updated_phi_nodes_for (ssa_name (i), dfs, blocks_to_update,
update_flags);
sbitmap_free (tmp);
}
EXECUTE_IF_SET_IN_BITMAP (syms_to_rename, 0, i, bi)
insert_updated_phi_nodes_for (referenced_var (i), dfs, blocks,
update_flags);
insert_updated_phi_nodes_for (referenced_var (i), dfs,
blocks_to_update, update_flags);
FOR_EACH_BB (bb)
BITMAP_FREE (dfs[bb->index]);
@ -2832,7 +2892,8 @@ update_ssa (unsigned update_flags)
We need to re-compute START_BB to include the newly added
blocks. */
if (start_bb != ENTRY_BLOCK_PTR)
start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS, blocks);
start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS,
blocks_to_update);
}
/* Reset the current definition for name and symbol before renaming
@ -2846,7 +2907,7 @@ update_ssa (unsigned update_flags)
/* Now start the renaming process at START_BB. */
tmp = sbitmap_alloc (last_basic_block);
sbitmap_zero (tmp);
EXECUTE_IF_SET_IN_BITMAP (blocks, 0, i, bi)
EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
SET_BIT (tmp, i);
rewrite_blocks (start_bb, REWRITE_UPDATE, tmp);
@ -2865,7 +2926,7 @@ update_ssa (unsigned update_flags)
start_bb->index);
c = 0;
EXECUTE_IF_SET_IN_BITMAP (blocks, 0, i, bi)
EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
c++;
fprintf (dump_file, "Number of blocks in CFG: %d\n", last_basic_block);
fprintf (dump_file, "Number of blocks to update: %d (%3.0f%%)\n\n",
@ -2874,7 +2935,7 @@ update_ssa (unsigned update_flags)
if (dump_flags & TDF_DETAILS)
{
fprintf (dump_file, "Affected blocks: ");
EXECUTE_IF_SET_IN_BITMAP (blocks, 0, i, bi)
EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
fprintf (dump_file, "%u ", i);
fprintf (dump_file, "\n");
}
@ -2892,7 +2953,7 @@ done:
VEC_replace (tree_vec, phis_to_rewrite, i, NULL);
}
BITMAP_FREE (blocks_with_phis_to_rewrite);
BITMAP_FREE (blocks);
BITMAP_FREE (blocks_to_update);
delete_update_ssa ();
timevar_pop (TV_TREE_SSA_INCREMENTAL);

View File

@ -1678,10 +1678,6 @@ struct tree_exp GTY(())
#define SSA_NAME_VALUE(N) \
SSA_NAME_CHECK (N)->ssa_name.value_handle
/* Auxiliary pass-specific data. */
#define SSA_NAME_AUX(N) \
SSA_NAME_CHECK (N)->ssa_name.aux
#ifndef _TREE_FLOW_H
struct ptr_info_def;
#endif
@ -1721,9 +1717,6 @@ struct tree_ssa_name GTY(())
as well. */
tree value_handle;
/* Auxiliary information stored with the ssa name. */
PTR GTY((skip)) aux;
/* Immediate uses list for this SSA_NAME. */
struct ssa_use_operand_d imm_uses;
};