diff options
author | Dehao Chen <dehao@google.com> | 2012-09-19 19:56:42 +0000 |
---|---|---|
committer | Dehao Chen <dehao@gcc.gnu.org> | 2012-09-19 19:56:42 +0000 |
commit | 5368224f426c0dbe08a42e89d4cd18b0c8435834 (patch) | |
tree | cb527556784345ff0f9931444fd4e51652a67835 /gcc/cfgexpand.c | |
parent | 1a83e602a157b844ed98d0dab832c1240ed6bf4b (diff) | |
download | gcc-5368224f426c0dbe08a42e89d4cd18b0c8435834.tar.gz |
Integrate lexical block into source_location.
gcc:
2012-09-19 Dehao Chen <dehao@google.com>
* toplev.c (general_init): Init block_locations.
* tree.c (tree_set_block): New.
(tree_block): Change to use LOCATION_BLOCK.
* tree.h (TREE_SET_BLOCK): New.
* final.c (reemit_insn_block_notes): Change to use LOCATION_BLOCK.
(final_start_function): Likewise.
* input.c (expand_location_1): Likewise.
* input.h (LOCATION_LOCUS): New.
(LOCATION_BLOCK): New.
(IS_UNKNOWN_LOCATION): New.
* fold-const.c (expr_location_or): Change to use new location.
* reorg.c (emit_delay_sequence): Likewise.
(try_merge_delay_insns): Likewise.
* modulo-sched.c (dump_insn_location): Likewise.
* lto-streamer-out.c (lto_output_location_bitpack): Likewise.
* lto-cgraph.c (output_node_opt_summary): Likewise.
* jump.c (rtx_renumbered_equal_p): Likewise.
* ifcvt.c (noce_try_move): Likewise.
(noce_try_store_flag): Likewise.
(noce_try_store_flag_constants): Likewise.
(noce_try_addcc): Likewise.
(noce_try_store_flag_mask): Likewise.
(noce_try_cmove): Likewise.
(noce_try_cmove_arith): Likewise.
(noce_try_minmax): Likewise.
(noce_try_abs): Likewise.
(noce_try_sign_mask): Likewise.
(noce_try_bitop): Likewise.
(noce_process_if_block): Likewise.
(cond_move_process_if_block): Likewise.
(find_cond_trap): Likewise.
* ipa-prop.c (ipa_set_jf_constant): Likewise.
(ipa_write_jump_function): Likewise.
* dwarf2out.c (add_src_coords_attributes): Likewise.
* expr.c (expand_expr_real): Likewise.
* tree-parloops.c (create_loop_fn): Likewise.
* recog.c (peep2_attempt): Likewise.
* function.c (free_after_compilation): Likewise.
(expand_function_end): Likewise.
(set_insn_locations): Likewise.
(thread_prologue_and_epilogue_insns): Likewise.
* print-rtl.c (print_rtx): Likewise.
* profile.c (branch_prob): Likewise.
* trans-mem.c (ipa_tm_scan_irr_block): Likewise.
* gimplify.c (gimplify_call_expr): Likewise.
* except.c (duplicate_eh_regions_1): Likewise.
* emit-rtl.c (try_split): Likewise.
(make_insn_raw): Likewise.
(make_debug_insn_raw): Likewise.
(make_jump_insn_raw): Likewise.
(make_call_insn_raw): Likewise.
(emit_pattern_after_setloc): Likewise.
(emit_pattern_after): Likewise.
(emit_debug_insn_after): Likewise.
(emit_pattern_before): Likewise.
(emit_insn_before_setloc): Likewise.
(emit_jump_insn_before): Likewise.
(emit_call_insn_before_setloc): Likewise.
(emit_call_insn_before): Likeise.
(emit_debug_insn_before_setloc): Likewise.
(emit_copy_of_insn_after): Likewise.
(insn_locators_alloc): Remove.
(insn_locators_finalize): Remove.
(insn_locators_free): Remove.
(set_curr_insn_source_location): Remove.
(get_curr_insn_source_location): Remove.
(set_curr_insn_block): Remove.
(get_curr_insn_block): Remove.
(locator_scope): Remove.
(insn_scope): Change to use new location.
(locator_location): Remove.
(insn_line): Change to use new location.
(locator_file): Remove.
(insn_file): Change to use new location.
(locator_eq): Remove.
(insn_locations_init): New.
(insn_locations_finalize): New.
(set_curr_insn_location): New.
(curr_insn_location): New.
* cfgexpand.c (gimple_assign_rhs_to_tree): Change to use new location.
(expand_gimple_cond): Likewise.
(expand_call_stmt): Likewise.
(expand_gimple_stmt_1): Likewise.
(expand_gimple_basic_block): Likewise.
(construct_exit_block): Likewise.
(gimple_expand_cfg): Likewise.
* cfgcleanup.c (try_forward_edges): Likewise.
* tree-ssa-live.c (remove_unused_scope_block_p): Likewise.
(dump_scope_block): Likewise.
(remove_unused_locals): Likewise.
* rtl.c (rtx_equal_p_cb): Likewise.
(rtx_equal_p): Likewise.
* rtl.h (XUINT): New.
(INSN_LOCATOR): Remove.
(CURR_INSN_LOCATION): Remove.
(INSN_LOCATION): New.
(INSN_HAS_LOCATION): New.
* tree-inline.c (remap_gimple_op_r): Change to use new location.
(copy_tree_body_r): Likewise.
(copy_phis_for_bb): Likewise.
(expand_call_inline): Likewise.
* tree-streamer-in.c (lto_input_ts_exp_tree_pointers): Likewise.
* tree-streamer-out.c (write_ts_decl_minimal_tree_pointers): Likewise.
* gimple-streamer-out.c (output_gimple_stmt): Likewise.
* combine.c (try_combine): Likewise.
* tree-outof-ssa.c (set_location_for_edge): Likewise.
(insert_partition_copy_on_edge): Likewise.
(insert_value_copy_on_edge): Likewise.
(insert_rtx_to_part_on_edge): Likewise.
(insert_part_to_rtx_on_edge): Likewise.
* basic-block.h (edge_def): Remove field.
* gimple.h (gimple_statement_base): Remove field.
(gimple_bb): Change to use new location.
(gimple_set_block): Likewise.
(gimple_has_location): Likewise.
* tree-cfg.c (make_cond_expr_edges): Likewise.
(make_goto_expr_edges): Likewise.
(gimple_can_merge_blocks_p): Likewise.
(move_stmt_op): Likewise.
(move_block_to_fn): Likewise.
* config/alpha/alpha.c (alpha_output_mi_thunk_osf): Likewise.
* config/sparc/sparc.c (sparc_output_mi_thunk): Likewise.
* config/i386/i386.c (x86_output_mi_thunk): Likewise.
* config/tilegx/tilegx.c (tilegx_output_mi_thunk): Likewise.
* config/sh/sh.c (sh_output_mi_thunk): Likewise.
* config/ia64/ia64.c (ia64_output_mi_thunk): Likewise.
* config/rs6000/rs6000.c (rs6000_output_mi_thunk): Likewise.
* config/score/score.c (score_output_mi_thunk): Likewise.
* config/tilepro/tilepro.c (tilepro_asm_output_mi_thunk): Likewise.
* config/mips/mips.c (mips_output_mi_thunk): Likewise.
* cfgrtl.c (unique_locus_on_edge_between_p): Likewise.
(unique_locus_on_edge_between_p): Likewise.
(emit_nop_for_unique_locus_between): Likewise.
(force_nonfallthru_and_redirect): Likewise.
(fixup_reorder_chain): Likewise.
(cfg_layout_merge_blocks): Likewise.
* stmt.c (emit_case_nodes): Likewise.
gcc/lto:
2012-09-19 Dehao Chen <dehao@google.com>
* lto/lto.c (lto_fixup_prevailing_decls): Remove tree.exp.block field.
libcpp:
2012-09-19 Dehao Chen <dehao@google.com>
* include/line-map.h (MAX_SOURCE_LOCATION): New value.
(location_adhoc_data_fini): New.
(get_combined_adhoc_loc): New.
(get_data_from_adhoc_loc): New.
(get_location_from_adhoc_loc): New.
(location_adhoc_data_map): New.
(COMBINE_LOCATION_DATA): New.
(IS_ADHOC_LOC): New.
(expanded_location): New field.
(line_maps): New field.
* line-map.c (location_adhoc_data): New.
(location_adhoc_data_hash): New.
(location_adhoc_data_eq): New.
(location_adhoc_data_update): New.
(get_combined_adhoc_loc): New.
(get_data_from_adhoc_loc): New.
(get_location_from_adhoc_loc): New.
(location_adhoc_data_init): New.
(location_adhoc_data_fini): New.
(linemap_init): Initialize location_adhoc_data.
(linemap_lookup): Change to use new location.
(linemap_ordinary_map_lookup): Likewise.
(linemap_macro_map_lookup): Likewise.
(linemap_macro_map_loc_to_def_point): Likewise.
(linemap_macro_map_loc_unwind_toward_spel): Likewise.
(linemap_get_expansion_line): Likewise.
(linemap_get_expansion_filename): Likewise.
(linemap_location_in_system_header_p): Likewise.
(linemap_location_from_macro_expansion_p): Likewise.
(linemap_macro_loc_to_spelling_point): Likewise.
(linemap_macro_loc_to_def_point): Likewise.
(linemap_macro_loc_to_exp_point): Likewise.
(linemap_resolve_location): Likewise.
(linemap_unwind_toward_expansion): Likewise.
(linemap_unwind_to_first_non_reserved_loc): Likewise.
(linemap_expand_location): Likewise.
(linemap_dump_location): Likewise.
(linemap_line_start): Likewise.
From-SVN: r191494
Diffstat (limited to 'gcc/cfgexpand.c')
-rw-r--r-- | gcc/cfgexpand.c | 104 |
1 files changed, 31 insertions, 73 deletions
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 91457eb2455..6b580d7439c 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -92,8 +92,7 @@ gimple_assign_rhs_to_tree (gimple stmt) && gimple_location (stmt) != EXPR_LOCATION (t)) || (gimple_block (stmt) && currently_expanding_to_rtl - && EXPR_P (t) - && gimple_block (stmt) != TREE_BLOCK (t))) + && EXPR_P (t))) t = copy_node (t); } else @@ -101,8 +100,6 @@ gimple_assign_rhs_to_tree (gimple stmt) if (gimple_has_location (stmt) && CAN_HAVE_LOCATION_P (t)) SET_EXPR_LOCATION (t, gimple_location (stmt)); - if (gimple_block (stmt) && currently_expanding_to_rtl && EXPR_P (t)) - TREE_BLOCK (t) = gimple_block (stmt); return t; } @@ -1831,8 +1828,7 @@ expand_gimple_cond (basic_block bb, gimple stmt) last2 = last = get_last_insn (); extract_true_false_edges_from_block (bb, &true_edge, &false_edge); - set_curr_insn_source_location (gimple_location (stmt)); - set_curr_insn_block (gimple_block (stmt)); + set_curr_insn_location (gimple_location (stmt)); /* These flags have no purpose in RTL land. */ true_edge->flags &= ~EDGE_TRUE_VALUE; @@ -1845,13 +1841,8 @@ expand_gimple_cond (basic_block bb, gimple stmt) jumpif_1 (code, op0, op1, label_rtx_for_bb (true_edge->dest), true_edge->probability); maybe_dump_rtl_for_gimple_stmt (stmt, last); - if (true_edge->goto_locus) - { - set_curr_insn_source_location (true_edge->goto_locus); - set_curr_insn_block (true_edge->goto_block); - true_edge->goto_locus = curr_insn_locator (); - } - true_edge->goto_block = NULL; + if (!IS_UNKNOWN_LOCATION (true_edge->goto_locus)) + set_curr_insn_location (true_edge->goto_locus); false_edge->flags |= EDGE_FALLTHRU; maybe_cleanup_end_of_block (false_edge, last); return NULL; @@ -1861,13 +1852,8 @@ expand_gimple_cond (basic_block bb, gimple stmt) jumpifnot_1 (code, op0, op1, label_rtx_for_bb (false_edge->dest), false_edge->probability); maybe_dump_rtl_for_gimple_stmt (stmt, last); - if (false_edge->goto_locus) - { - set_curr_insn_source_location (false_edge->goto_locus); - set_curr_insn_block (false_edge->goto_block); - false_edge->goto_locus = curr_insn_locator (); - } - false_edge->goto_block = NULL; + if (!IS_UNKNOWN_LOCATION (false_edge->goto_locus)) + set_curr_insn_location (false_edge->goto_locus); true_edge->flags |= EDGE_FALLTHRU; maybe_cleanup_end_of_block (true_edge, last); return NULL; @@ -1876,13 +1862,8 @@ expand_gimple_cond (basic_block bb, gimple stmt) jumpif_1 (code, op0, op1, label_rtx_for_bb (true_edge->dest), true_edge->probability); last = get_last_insn (); - if (false_edge->goto_locus) - { - set_curr_insn_source_location (false_edge->goto_locus); - set_curr_insn_block (false_edge->goto_block); - false_edge->goto_locus = curr_insn_locator (); - } - false_edge->goto_block = NULL; + if (!IS_UNKNOWN_LOCATION (false_edge->goto_locus)) + set_curr_insn_location (false_edge->goto_locus); emit_jump (label_rtx_for_bb (false_edge->dest)); BB_END (bb) = last; @@ -1907,13 +1888,11 @@ expand_gimple_cond (basic_block bb, gimple stmt) maybe_dump_rtl_for_gimple_stmt (stmt, last2); - if (true_edge->goto_locus) + if (!IS_UNKNOWN_LOCATION (true_edge->goto_locus)) { - set_curr_insn_source_location (true_edge->goto_locus); - set_curr_insn_block (true_edge->goto_block); - true_edge->goto_locus = curr_insn_locator (); + set_curr_insn_location (true_edge->goto_locus); + true_edge->goto_locus = curr_insn_location (); } - true_edge->goto_block = NULL; return new_bb; } @@ -2013,7 +1992,6 @@ expand_call_stmt (gimple stmt) CALL_FROM_THUNK_P (exp) = gimple_call_from_thunk_p (stmt); CALL_EXPR_VA_ARG_PACK (exp) = gimple_call_va_arg_pack_p (stmt); SET_EXPR_LOCATION (exp, gimple_location (stmt)); - TREE_BLOCK (exp) = gimple_block (stmt); /* Ensure RTL is created for debug args. */ if (decl && DECL_HAS_DEBUG_ARGS_P (decl)) @@ -2048,8 +2026,7 @@ expand_gimple_stmt_1 (gimple stmt) { tree op0; - set_curr_insn_source_location (gimple_location (stmt)); - set_curr_insn_block (gimple_block (stmt)); + set_curr_insn_location (gimple_location (stmt)); switch (gimple_code (stmt)) { @@ -3793,8 +3770,7 @@ expand_gimple_basic_block (basic_block bb) tree op; gimple def; - location_t sloc = get_curr_insn_source_location (); - tree sblock = get_curr_insn_block (); + location_t sloc = curr_insn_location (); /* Look for SSA names that have their last use here (TERed names always have only one real use). */ @@ -3827,8 +3803,7 @@ expand_gimple_basic_block (basic_block bb) rtx val; enum machine_mode mode; - set_curr_insn_source_location (gimple_location (def)); - set_curr_insn_block (gimple_block (def)); + set_curr_insn_location (gimple_location (def)); DECL_ARTIFICIAL (vexpr) = 1; TREE_TYPE (vexpr) = TREE_TYPE (value); @@ -3855,8 +3830,7 @@ expand_gimple_basic_block (basic_block bb) } } } - set_curr_insn_source_location (sloc); - set_curr_insn_block (sblock); + set_curr_insn_location (sloc); } currently_expanding_gimple_stmt = stmt; @@ -3871,8 +3845,7 @@ expand_gimple_basic_block (basic_block bb) } else if (gimple_debug_bind_p (stmt)) { - location_t sloc = get_curr_insn_source_location (); - tree sblock = get_curr_insn_block (); + location_t sloc = curr_insn_location (); gimple_stmt_iterator nsi = gsi; for (;;) @@ -3894,8 +3867,7 @@ expand_gimple_basic_block (basic_block bb) last = get_last_insn (); - set_curr_insn_source_location (gimple_location (stmt)); - set_curr_insn_block (gimple_block (stmt)); + set_curr_insn_location (gimple_location (stmt)); if (DECL_P (var)) mode = DECL_MODE (var); @@ -3933,13 +3905,11 @@ expand_gimple_basic_block (basic_block bb) break; } - set_curr_insn_source_location (sloc); - set_curr_insn_block (sblock); + set_curr_insn_location (sloc); } else if (gimple_debug_source_bind_p (stmt)) { - location_t sloc = get_curr_insn_source_location (); - tree sblock = get_curr_insn_block (); + location_t sloc = curr_insn_location (); tree var = gimple_debug_source_bind_get_var (stmt); tree value = gimple_debug_source_bind_get_value (stmt); rtx val; @@ -3947,8 +3917,7 @@ expand_gimple_basic_block (basic_block bb) last = get_last_insn (); - set_curr_insn_source_location (gimple_location (stmt)); - set_curr_insn_block (gimple_block (stmt)); + set_curr_insn_location (gimple_location (stmt)); mode = DECL_MODE (var); @@ -3966,8 +3935,7 @@ expand_gimple_basic_block (basic_block bb) PAT_VAR_LOCATION_LOC (val) = (rtx)value; } - set_curr_insn_source_location (sloc); - set_curr_insn_block (sblock); + set_curr_insn_location (sloc); } else { @@ -4008,13 +3976,8 @@ expand_gimple_basic_block (basic_block bb) /* Expand implicit goto and convert goto_locus. */ FOR_EACH_EDGE (e, ei, bb->succs) { - if (e->goto_locus && e->goto_block) - { - set_curr_insn_source_location (e->goto_locus); - set_curr_insn_block (e->goto_block); - e->goto_locus = curr_insn_locator (); - } - e->goto_block = NULL; + if (!IS_UNKNOWN_LOCATION (e->goto_locus)) + set_curr_insn_location (e->goto_locus); if ((e->flags & EDGE_FALLTHRU) && e->dest != bb->next_bb) { emit_jump (label_rtx_for_bb (e->dest)); @@ -4134,12 +4097,9 @@ construct_exit_block (void) /* Make sure the locus is set to the end of the function, so that epilogue line numbers and warnings are set properly. */ - if (cfun->function_end_locus != UNKNOWN_LOCATION) + if (!IS_UNKNOWN_LOCATION (cfun->function_end_locus)) input_location = cfun->function_end_locus; - /* The following insns belong to the top scope. */ - set_curr_insn_block (DECL_INITIAL (current_function_decl)); - /* Generate rtl for function exit. */ expand_function_end (); @@ -4357,20 +4317,19 @@ gimple_expand_cfg (void) rtl_profile_for_bb (ENTRY_BLOCK_PTR); - insn_locators_alloc (); + insn_locations_init (); if (!DECL_IS_BUILTIN (current_function_decl)) { /* Eventually, all FEs should explicitly set function_start_locus. */ - if (cfun->function_start_locus == UNKNOWN_LOCATION) - set_curr_insn_source_location + if (IS_UNKNOWN_LOCATION (cfun->function_start_locus)) + set_curr_insn_location (DECL_SOURCE_LOCATION (current_function_decl)); else - set_curr_insn_source_location (cfun->function_start_locus); + set_curr_insn_location (cfun->function_start_locus); } else - set_curr_insn_source_location (UNKNOWN_LOCATION); - set_curr_insn_block (DECL_INITIAL (current_function_decl)); - prologue_locator = curr_insn_locator (); + set_curr_insn_location (UNKNOWN_LOCATION); + prologue_location = curr_insn_location (); #ifdef INSN_SCHEDULING init_sched_attrs (); @@ -4551,8 +4510,7 @@ gimple_expand_cfg (void) free_histograms (); construct_exit_block (); - set_curr_insn_block (DECL_INITIAL (current_function_decl)); - insn_locators_finalize (); + insn_locations_finalize (); /* Zap the tree EH table. */ set_eh_throw_stmt_table (cfun, NULL); |