static struct eh_catch_d * lto_input_eh_catch_list (struct lto_input_block *ib, struct data_in *data_in, eh_catch *last_p) { eh_catch first; enum LTO_tags tag; *last_p = first = __null; tag = streamer_read_record_start (ib); while (tag) { tree list; eh_catch n; n = ((struct eh_catch_d *)(ggc_internal_cleared_alloc_stat (sizeof (struct eh_catch_d) ))); n->type_list = streamer_hooks.read_tree(ib, data_in); n->filter_list = streamer_hooks.read_tree(ib, data_in); n->label = streamer_hooks.read_tree(ib, data_in); for (list = n->filter_list; list; list = ((contains_struct_check ((list), (TS_COMMON), "../../../gcc-4.8~svn195526/gcc/lto-streamer-in.c", 275, __FUNCTION__))->common.chain)) add_type_for_runtime (((tree_check ((list), "../../../gcc-4.8~svn195526/gcc/lto-streamer-in.c", 276, __FUNCTION__, (TREE_LIST)))->list.value)); if (*last_p) (*last_p)->next_catch = n; n->prev_catch = *last_p; *last_p = n; if (first == __null) first = n; tag = streamer_read_record_start (ib); } return first; }
void input_bb (struct lto_input_block *ib, enum LTO_tags tag, struct data_in *data_in, struct function *fn, int count_materialization_scale) { unsigned int index; basic_block bb; gimple_stmt_iterator bsi; /* This routine assumes that CFUN is set to FN, as it needs to call basic GIMPLE routines that use CFUN. */ gcc_assert (cfun == fn); index = streamer_read_uhwi (ib); bb = BASIC_BLOCK_FOR_FUNCTION (fn, index); bb->count = (streamer_read_hwi (ib) * count_materialization_scale + REG_BR_PROB_BASE / 2) / REG_BR_PROB_BASE; bb->loop_depth = streamer_read_hwi (ib); bb->frequency = streamer_read_hwi (ib); bb->flags = streamer_read_hwi (ib); /* LTO_bb1 has statements. LTO_bb0 does not. */ if (tag == LTO_bb0) return; bsi = gsi_start_bb (bb); tag = streamer_read_record_start (ib); while (tag) { gimple stmt = input_gimple_stmt (ib, data_in, fn, tag); if (!is_gimple_debug (stmt)) find_referenced_vars_in (stmt); gsi_insert_after (&bsi, stmt, GSI_NEW_STMT); /* After the statement, expect a 0 delimiter or the EH region that the previous statement belongs to. */ tag = streamer_read_record_start (ib); lto_tag_check_set (tag, 2, LTO_eh_region, LTO_null); if (tag == LTO_eh_region) { HOST_WIDE_INT region = streamer_read_hwi (ib); gcc_assert (region == (int) region); add_stmt_to_eh_lp (stmt, region); } tag = streamer_read_record_start (ib); } tag = streamer_read_record_start (ib); while (tag) { gimple phi = input_phi (ib, bb, data_in, fn); find_referenced_vars_in (phi); tag = streamer_read_record_start (ib); } }
static eh_region input_eh_region (struct lto_input_block *ib, struct data_in *data_in, int ix) { enum LTO_tags tag; eh_region r; tag = streamer_read_record_start (ib); if (tag == LTO_null) return __null; r = ((struct eh_region_d *)(ggc_internal_cleared_alloc_stat (sizeof (struct eh_region_d) ))); r->index = streamer_read_hwi (ib); r->outer = (eh_region) (intptr_t) streamer_read_hwi (ib); r->inner = (eh_region) (intptr_t) streamer_read_hwi (ib); switch (tag) { case LTO_ert_cleanup: { struct eh_catch_d *last_catch; r->u.eh_try.first_catch = lto_input_eh_catch_list (ib, data_in, &last_catch); } { tree l; add_type_for_runtime (((tree_check ((l), "../../../gcc-4.8~svn195526/gcc/lto-streamer-in.c", 346, __FUNCTION__, (TREE_LIST)))->list.value)); } } }
static void input_function (tree fn_decl, struct data_in *data_in, struct lto_input_block *ib) { struct function *fn; enum LTO_tags tag; fn = ((tree_check ((fn_decl), "../../../gcc-4.8~svn195526/gcc/lto-streamer-in.c", 807, __FUNCTION__, (FUNCTION_DECL)))->function_decl.f); tag = streamer_read_record_start (ib); input_struct_function_base (fn, data_in, ib); input_ssa_names (ib, data_in, fn); input_eh_regions (ib, data_in, fn); ((contains_struct_check ((fn_decl), (TS_DECL_COMMON), "../../../gcc-4.8~svn195526/gcc/lto-streamer-in.c", 823, __FUNCTION__))->decl_common.initial) = streamer_hooks.read_tree(ib, data_in); }
static void input_eh_regions (struct lto_input_block *ib, struct data_in *data_in, struct function *fn) { long long i, root_region, len; enum LTO_tags tag; tag = streamer_read_record_start (ib); if (tag == LTO_null) return; len = streamer_read_hwi (ib); if (len > 0) { for (i = 0; i < len; i++) { eh_region r = input_eh_region (ib, data_in, i); } } }