diff options
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 46 |
1 files changed, 3 insertions, 43 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index c8a48a3..7ec04f7 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -802,52 +802,9 @@ init_tree_ssa (struct function *fn) void delete_tree_ssa (void) { - size_t i; - basic_block bb; - gimple_stmt_iterator gsi; referenced_var_iterator rvi; tree var; - /* Release any ssa_names still in use. */ - for (i = 0; i < num_ssa_names; i++) - { - tree var = ssa_name (i); - if (var && TREE_CODE (var) == SSA_NAME) - { - SSA_NAME_IMM_USE_NODE (var).prev = &(SSA_NAME_IMM_USE_NODE (var)); - SSA_NAME_IMM_USE_NODE (var).next = &(SSA_NAME_IMM_USE_NODE (var)); - } - release_ssa_name (var); - } - - /* FIXME. This may not be necessary. We will release all this - memory en masse in free_ssa_operands. This clearing used to be - necessary to avoid problems with the inliner, but it may not be - needed anymore. */ - FOR_EACH_BB (bb) - { - for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) - { - gimple stmt = gsi_stmt (gsi); - - if (gimple_has_ops (stmt)) - { - gimple_set_def_ops (stmt, NULL); - gimple_set_use_ops (stmt, NULL); - } - - if (gimple_has_mem_ops (stmt)) - { - gimple_set_vdef (stmt, NULL_TREE); - gimple_set_vuse (stmt, NULL_TREE); - } - - gimple_set_modified (stmt, true); - } - if (!(bb->flags & BB_RTL)) - set_phi_nodes (bb, NULL); - } - /* Remove annotations from every referenced local variable. */ FOR_EACH_REFERENCED_VAR (var, rvi) { @@ -873,6 +830,9 @@ delete_tree_ssa (void) cfun->gimple_df->default_defs = NULL; pt_solution_reset (&cfun->gimple_df->escaped); pt_solution_reset (&cfun->gimple_df->callused); + if (cfun->gimple_df->decls_to_pointers != NULL) + pointer_map_destroy (cfun->gimple_df->decls_to_pointers); + cfun->gimple_df->decls_to_pointers = NULL; cfun->gimple_df->modified_noreturn_calls = NULL; cfun->gimple_df = NULL; |