diff options
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 21 | ||||
-rw-r--r-- | gcc/tree-core.h | 3 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
4 files changed, 17 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fae616144a5..13422ed8ae9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2015-05-27 Aldy Hernandez <aldyh@redhat.com> + + * dwarf2out.c: Remove block_map. + (gen_call_site_die): Replace block_map use with BLOCK_DIE. + (gen_lexical_block_die): Same. + (dwarf2out_function_decl): Remove block_map use. + (dwarf2out_c_finalize): Same. + * tree-core.h (struct tree_block): Add die field. + * tree.h (BLOCK_DIE): New. + 2015-05-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> PR target/65358 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index cc7ac84e48a..15c545e8e74 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2908,10 +2908,6 @@ static int call_site_count = -1; /* Number of tail call sites in the current function. */ static int tail_call_site_count = -1; -/* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine} - DIEs. */ -static vec<dw_die_ref> block_map; - /* A cached location list. */ struct GTY ((for_user)) cached_dw_loc_list_def { /* The DECL_UID of the decl that this entry describes. */ @@ -18368,8 +18364,7 @@ gen_call_site_die (tree decl, dw_die_ref subr_die, && block != DECL_INITIAL (decl) && TREE_CODE (block) == BLOCK) { - if (block_map.length () > BLOCK_NUMBER (block)) - stmt_die = block_map[BLOCK_NUMBER (block)]; + stmt_die = BLOCK_DIE (block); if (stmt_die) break; block = BLOCK_SUPERCONTEXT (block); @@ -19469,11 +19464,7 @@ gen_lexical_block_die (tree stmt, dw_die_ref context_die) dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt); if (call_arg_locations) - { - if (block_map.length () <= BLOCK_NUMBER (stmt)) - block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1); - block_map[BLOCK_NUMBER (stmt)] = stmt_die; - } + BLOCK_DIE (stmt) = stmt_die; if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt)) add_high_low_attributes (stmt, stmt_die); @@ -19506,11 +19497,7 @@ gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die) = new_die (DW_TAG_inlined_subroutine, context_die, stmt); if (call_arg_locations) - { - if (block_map.length () <= BLOCK_NUMBER (stmt)) - block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1); - block_map[BLOCK_NUMBER (stmt)] = subr_die; - } + BLOCK_DIE (stmt) = subr_die; add_abstract_origin_attribute (subr_die, decl); if (TREE_ASM_WRITTEN (stmt)) add_high_low_attributes (stmt, subr_die); @@ -21407,7 +21394,6 @@ dwarf2out_function_decl (tree decl) call_arg_loc_last = NULL; call_site_count = -1; tail_call_site_count = -1; - block_map.release (); decl_loc_table->empty (); cached_dw_loc_list_table->empty (); } @@ -25008,7 +24994,6 @@ dwarf2out_c_finalize (void) call_arg_loc_last = NULL; call_site_count = -1; tail_call_site_count = -1; - //block_map = NULL; cached_dw_loc_list_table = NULL; abbrev_die_table = NULL; abbrev_die_table_allocated = 0; diff --git a/gcc/tree-core.h b/gcc/tree-core.h index ad1bb231ebe..2a9f417bfb3 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -1334,6 +1334,9 @@ struct GTY(()) tree_block { tree abstract_origin; tree fragment_origin; tree fragment_chain; + + /* Pointer to the DWARF lexical block. */ + struct die_struct *die; }; struct GTY(()) tree_type_common { diff --git a/gcc/tree.h b/gcc/tree.h index 1957dc5645e..58d2e9b8858 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1589,6 +1589,7 @@ extern void protected_set_expr_location (tree, location_t); #define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain) #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin) #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag) +#define BLOCK_DIE(NODE) (BLOCK_CHECK (NODE)->block.die) /* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */ #define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.u.bits.nameless_flag) |