I have backported the following patches from trunk to google-4_7: r191494, r191510, r191614, r191669, r191680, r191706, r191747, r191759, r191779, r191810.
Combine location_t and block into an integer, so that these two building blocks of debug info are kept consistent during backend optimizations. The side product of this patch is memory footprint reduction, because the block field in both gimple and tree.exp are eliminated. 2012-09-27 Dehao Chen <de...@google.com> gcc: * toplev.c (toplev_main): Finalize block_locations. * tree.c (tree_set_block): New. (tree_block): Change to use LOCATION_BLOCK. (build1_stat): Remove block. * tree.h (TREE_SET_BLOCK): New. (tree_set_block): New. (tree_block): Change to return tree. (TREE_BLOCK): Likewise. (tree_exp): Remove block. (DECL_IS_BUILTIN): Compare LOCATION_LOCUS. (EXPR_HAS_LOCATION): Likewise. (inlined_function_outer_scope_p): Likewise. (OMP_CLAUSE_HAS_LOCATION): Likewise. * cfglayout.c (reemit_insn_block_notes): Change to use LOCATION_BLOCK. (fixup_reorder_chain): Likewise. (insn_discriminator): 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. * final.c (final_start_function): Likewise. * input.c (expand_location): Likewise. (location_with_discriminator): Likewise. (has_discriminator): Likewise. (map_discriminator_location): Likewise. (get_discriminator_from_locus): Likewise. * input.h (LOCATION_LOCUS): New. (LOCATION_BLOCK): New. * fold-const.c (expr_location_or): Change to use new location. * reorg.c (emit_delay_sequence): Likewise. (dbr_schedule): Likewise. * modulo-sched.c (loop_single_full_bb_p): Likewise. (dump_insn_location): Likewise. (loop_canon_p): Likewise. (sms_schedule): 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. (maybe_copy_prologue_epilogue_insn): 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_insn_after_setloc): Likewise. (emit_insn_after): Likewise. (emit_jump_insn_after_setloc): Likewise. (emit_jump_insn_after): Likewise. (emit_call_insn_after_setloc): Likewise. (emit_call_insn_after): Likewise. (emit_debug_insn_after_setloc): Likewise. (emit_debug_insn_after): Likewise. (emit_pattern_before_setloc): Likewise. (emit_pattern_before): Likewise. (emit_insn_before_setloc): Likewise. (emit_insn_before): Likewise. (emit_jump_insn_before_setloc): Likewise. (emit_jump_insn_before): Likewise. (emit_call_insn_before_setloc): Likewise. (emit_call_insn_before): Likewise. (emit_debug_insn_before_setloc): Likewise. (emit_debug_insn_before): Likewise. (emit_copy_of_insn_after): Likewise. * 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. (mark_all_vars_used): Likewise. (remove_unused_locals): Likewise. (clear_unused_block_pointer): New. (clear_unused_block_pointer_1): New. * 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_block): Likewise. (gimple_set_block): Likewise. (gimple_set_location): Likewise. (gimple_has_location): Likewise. * tree-cfg.c (make_cond_expr_edges): Likewise. (make_goto_expr_edges): Likewise. (gimple_can_merge_blocks_p): Likewise. (assign_discriminator): 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. (gen_block_redirect): Likewise. * config/ia64/ia64.c (ia64_output_mi_thunk): Likewise. * config/rs6000/rs6000.c (rs6000_output_mi_thunk): Likewise. (rs6000_final_prescan_insn): 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. (mips16_gp_pseudo_reg): Likewise. * config/s390/s390.c (s390_chunkify_start): Likewise. * config/spu/spu.c (emit_nop_for_insn): Likewise. (pad_bb): Likewise. (spu_emit_branch_hint): Likewise. (insert_hbrp_for_ilb_runout): Likewise. * config/mep/mep.c (mep_make_bundle): Likewise. (mep_bundle_insns): Likewise. * config/c6x/c6x.c (gen_one_bundle): Likewise. * config/picochip/picochip.c (picochip_reorg): Likewise. * config/arm/arm.c (require_pic_register): Likewise. * config/bfin/bfin.c (gen_one_bundle): Likewise. * cfgrtl.c (force_nonfallthru_and_redirect): Likewise. (cfg_layout_merge_blocks): Likewise. * stmt.c (emit_case_nodes): Likewise. * tree-eh.c (lower_try_finally_dup_block): Likewise. (honor_protect_cleanup_actions): Likewise. libcpp: * 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_fini): New. (rebuild_location_adhoc_htab): New. (linemap_init): Initialize location_adhoc_data. (linemap_line_start): Change to use new location. (linemap_position_for_line_and_column): Likewise. (linemap_lookup): Likewise. (linemap_ordinary_map_lookup): Likewise. (linemap_macro_map_lookup): 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_expand_location): Likewise. (linemap_dump_location): Likewise. gcc/c-family: * c-family/c-pch.c (c_common_read_pch): Rebuild the location_adhoc_data map when read in the pch. gcc/lto: * lto/lto.c (lto_fixup_prevailing_decls): Remove tree.exp.block field. Bootstrapped and passed all regression tests, and tested with crosstool. Dehao