diff options
Diffstat (limited to 'gcc/tree-ssa-threadupdate.c')
-rw-r--r-- | gcc/tree-ssa-threadupdate.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index fa31613d1ad..02cf42c0da0 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -311,7 +311,7 @@ create_block_for_threading (basic_block bb, /* Main data structure to hold information for duplicates of BB. */ -static hash_table <redirection_data> redirection_data; +static hash_table<redirection_data> *redirection_data; /* Given an outgoing edge E lookup and return its entry in our hash table. @@ -334,7 +334,7 @@ lookup_redirection_data (edge e, enum insert_option insert) elt->dup_blocks[1] = NULL; elt->incoming_edges = NULL; - slot = redirection_data.find_slot (elt, insert); + slot = redirection_data->find_slot (elt, insert); /* This will only happen if INSERT is false and the entry is not in the hash table. */ @@ -850,7 +850,8 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners) use a hash table. For normal code there should be no noticeable difference. However, if we have a block with a large number of incoming and outgoing edges such linear searches can get expensive. */ - redirection_data.create (EDGE_COUNT (bb->succs)); + redirection_data + = new hash_table<struct redirection_data> (EDGE_COUNT (bb->succs)); /* If we thread the latch of the loop to its exit, the loop ceases to exist. Make sure we do not restrict ourselves in order to preserve @@ -961,7 +962,7 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners) local_info.template_block = NULL; local_info.bb = bb; local_info.jumps_threaded = false; - redirection_data.traverse <ssa_local_info_t *, ssa_create_duplicates> + redirection_data->traverse <ssa_local_info_t *, ssa_create_duplicates> (&local_info); /* The template does not have an outgoing edge. Create that outgoing @@ -969,18 +970,19 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners) We do this after creating all the duplicates to avoid creating unnecessary edges. */ - redirection_data.traverse <ssa_local_info_t *, ssa_fixup_template_block> + redirection_data->traverse <ssa_local_info_t *, ssa_fixup_template_block> (&local_info); /* The hash table traversals above created the duplicate blocks (and the statements within the duplicate blocks). This loop creates PHI nodes for the duplicated blocks and redirects the incoming edges into BB to reach the duplicates of BB. */ - redirection_data.traverse <ssa_local_info_t *, ssa_redirect_edges> + redirection_data->traverse <ssa_local_info_t *, ssa_redirect_edges> (&local_info); /* Done with this block. Clear REDIRECTION_DATA. */ - redirection_data.dispose (); + delete redirection_data; + redirection_data = NULL; if (noloop_only && bb == bb->loop_father->header) |