These two patches clean up: - The streaming of token values. During PTH, we did not have a generic tree streamer, so we were implementing our own. Easier to just call pph_out_tree/pph_in_tree now.
- pph_out_tree_or_ref and pph_out_tree_or_ref_1 were misnamed. Renamed all references to them with pph_out_tree. Tested on x86_64. Committed to branch Diego. * pph-streamer.h (pph_out_tree_1): Rename from pph_out_tree_or_ref_1. Update all users. (pph_out_tree): Rename from pph_out_tree_or_ref. Update all users. * pph-streamer-in.c (pph_get_type_from_index): Remove. (pph_in_number): Remove. (pph_in_token_value): Handle all cases that read a tree with pph_in_tree. * pph-streamer-out.c (pph_out_number): Remove. (pph_get_index_from_type): Remove. (pph_out_token_value): Handle all cases that write a tree with pph_out_tree. --- gcc/cp/ChangeLog.pph | 6 ++ gcc/cp/name-lookup.c | 4 +- gcc/cp/pph-streamer-out.c | 146 ++++++++++++++++++++++---------------------- gcc/cp/pph-streamer.h | 15 +---- gcc/cp/pt.c | 6 +- 5 files changed, 87 insertions(+), 90 deletions(-) diff --git a/gcc/cp/ChangeLog.pph b/gcc/cp/ChangeLog.pph index edb3986..666033b 100644 --- a/gcc/cp/ChangeLog.pph +++ b/gcc/cp/ChangeLog.pph @@ -1,3 +1,9 @@ +2011-08-17 Diego Novillo <dnovi...@google.com> + + * pph-streamer.h (pph_out_tree_1): Rename from pph_out_tree_or_ref_1. + Update all users. + (pph_out_tree): Rename from pph_out_tree_or_ref. Update all users. + 2011-08-16 Gabriel Charette <gch...@google.com> * pph-streamer-in.c (pph_read_file_1): Set location of replayed diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 96d41f3..ac10d44 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -6012,8 +6012,8 @@ pph_out_binding_table (pph_stream *stream, binding_table bt) if (bt->chain[i]) { pph_out_record_marker (stream, PPH_RECORD_START); - pph_out_tree_or_ref (stream, bt->chain[i]->name); - pph_out_tree_or_ref (stream, bt->chain[i]->type); + pph_out_tree (stream, bt->chain[i]->name); + pph_out_tree (stream, bt->chain[i]->type); } else pph_out_record_marker (stream, PPH_RECORD_END); diff --git a/gcc/cp/pph-streamer-out.c b/gcc/cp/pph-streamer-out.c index 1c5c5d4..b631825 100644 --- a/gcc/cp/pph-streamer-out.c +++ b/gcc/cp/pph-streamer-out.c @@ -458,9 +458,9 @@ pph_out_ld_base (pph_stream *stream, struct lang_decl_base *ldb) static void pph_out_ld_min (pph_stream *stream, struct lang_decl_min *ldm) { - pph_out_tree_or_ref_1 (stream, ldm->template_info, 1); + pph_out_tree_1 (stream, ldm->template_info, 1); if (ldm->base.u2sel == 0) - pph_out_tree_or_ref_1 (stream, ldm->u2.access, 1); + pph_out_tree_1 (stream, ldm->u2.access, 1); else if (ldm->base.u2sel == 1) pph_out_uint (stream, ldm->u2.discriminator); else @@ -496,7 +496,7 @@ pph_out_tree_vec (pph_stream *stream, VEC(tree,gc) *v) pph_out_uint (stream, VEC_length (tree, v)); FOR_EACH_VEC_ELT (tree, v, i, t) - pph_out_tree_or_ref (stream, t); + pph_out_tree (stream, t); } @@ -539,8 +539,8 @@ pph_out_qual_use_vec (pph_stream *stream, VEC(qualified_typedef_usage_t,gc) *v) pph_out_uint (stream, VEC_length (qualified_typedef_usage_t, v)); FOR_EACH_VEC_ELT (qualified_typedef_usage_t, v, i, q) { - pph_out_tree_or_ref (stream, q->typedef_decl); - pph_out_tree_or_ref (stream, q->context); + pph_out_tree (stream, q->typedef_decl); + pph_out_tree (stream, q->context); /* FIXME pph: also write location. */ } } @@ -561,8 +561,8 @@ pph_out_cxx_binding_1 (pph_stream *stream, cxx_binding *cb) if (!pph_out_start_record (stream, cb)) return; - pph_out_tree_or_ref (stream, cb->value); - pph_out_tree_or_ref (stream, cb->type); + pph_out_tree (stream, cb->value); + pph_out_tree (stream, cb->type); pph_out_binding_level (stream, cb->scope, PPHF_NONE); bp = bitpack_create (stream->encoder.w.ob->main_stream); bp_pack_value (&bp, cb->value_is_inherited, 1); @@ -600,7 +600,7 @@ pph_out_class_binding (pph_stream *stream, cp_class_binding *cb) return; pph_out_cxx_binding (stream, cb->base); - pph_out_tree_or_ref (stream, cb->identifier); + pph_out_tree (stream, cb->identifier); } @@ -612,8 +612,8 @@ pph_out_label_binding (pph_stream *stream, cp_label_binding *lb) if (!pph_out_start_record (stream, lb)) return; - pph_out_tree_or_ref (stream, lb->label); - pph_out_tree_or_ref (stream, lb->prev_value); + pph_out_tree (stream, lb->label); + pph_out_tree (stream, lb->prev_value); } @@ -628,7 +628,7 @@ pph_out_chained_tree (pph_stream *stream, tree t) saved_chain = TREE_CHAIN (t); TREE_CHAIN (t) = NULL_TREE; - pph_out_tree_or_ref_1 (stream, t, 2); + pph_out_tree_1 (stream, t, 2); TREE_CHAIN (t) = saved_chain; } @@ -688,14 +688,14 @@ pph_out_binding_level_1 (pph_stream *stream, cp_binding_level *bl, FOR_EACH_VEC_ELT (cp_class_binding, bl->class_shadowed, i, cs) pph_out_class_binding (stream, cs); - pph_out_tree_or_ref (stream, bl->type_shadowed); + pph_out_tree (stream, bl->type_shadowed); pph_out_uint (stream, VEC_length (cp_label_binding, bl->shadowed_labels)); FOR_EACH_VEC_ELT (cp_label_binding, bl->shadowed_labels, i, sl) pph_out_label_binding (stream, sl); pph_out_chain (stream, bl->blocks); - pph_out_tree_or_ref (stream, bl->this_entity); + pph_out_tree (stream, bl->this_entity); pph_out_binding_level (stream, bl->level_chain, filter); pph_out_tree_vec (stream, bl->dead_vars_from_for); pph_out_chain (stream, bl->statement_list); @@ -730,7 +730,7 @@ static void pph_out_tree_common (pph_stream *stream, tree t) { /* The 'struct tree_typed typed' base class is handled in LTO. */ - pph_out_tree_or_ref (stream, TREE_CHAIN (t)); + pph_out_tree (stream, TREE_CHAIN (t)); } @@ -759,13 +759,13 @@ pph_out_language_function (pph_stream *stream, struct language_function *lf) return; pph_out_c_language_function (stream, &lf->base); - pph_out_tree_or_ref (stream, lf->x_cdtor_label); - pph_out_tree_or_ref (stream, lf->x_current_class_ptr); - pph_out_tree_or_ref (stream, lf->x_current_class_ref); - pph_out_tree_or_ref (stream, lf->x_eh_spec_block); - pph_out_tree_or_ref (stream, lf->x_in_charge_parm); - pph_out_tree_or_ref (stream, lf->x_vtt_parm); - pph_out_tree_or_ref (stream, lf->x_return_value); + pph_out_tree (stream, lf->x_cdtor_label); + pph_out_tree (stream, lf->x_current_class_ptr); + pph_out_tree (stream, lf->x_current_class_ref); + pph_out_tree (stream, lf->x_eh_spec_block); + pph_out_tree (stream, lf->x_in_charge_parm); + pph_out_tree (stream, lf->x_vtt_parm); + pph_out_tree (stream, lf->x_return_value); bp = bitpack_create (stream->encoder.w.ob->main_stream); bp_pack_value (&bp, lf->x_returns_value, 1); bp_pack_value (&bp, lf->x_returns_null, 1); @@ -813,11 +813,11 @@ pph_out_ld_fn (pph_stream *stream, struct lang_decl_fn *ldf) bp_pack_value (&bp, ldf->hidden_friend_p, 1); pph_out_bitpack (stream, &bp); - pph_out_tree_or_ref (stream, ldf->befriending_classes); - pph_out_tree_or_ref (stream, ldf->context); + pph_out_tree (stream, ldf->befriending_classes); + pph_out_tree (stream, ldf->context); if (ldf->thunk_p == 0) - pph_out_tree_or_ref (stream, ldf->u5.cloned_function); + pph_out_tree (stream, ldf->u5.cloned_function); else if (ldf->thunk_p == 1) pph_out_uint (stream, ldf->u5.fixed_offset); else @@ -841,7 +841,7 @@ static int pph_out_used_types_slot (void **slot, void *aux) { struct pph_tree_info *pti = (struct pph_tree_info *) aux; - pph_out_tree_or_ref (pti->stream, (tree) *slot); + pph_out_tree (pti->stream, (tree) *slot); return 1; } @@ -1001,8 +1001,8 @@ pph_out_tree_pair_vec (pph_stream *stream, VEC(tree_pair_s,gc) *v) pph_out_uint (stream, VEC_length (tree_pair_s, v)); FOR_EACH_VEC_ELT (tree_pair_s, v, i, p) { - pph_out_tree_or_ref (stream, p->purpose); - pph_out_tree_or_ref (stream, p->value); + pph_out_tree (stream, p->purpose); + pph_out_tree (stream, p->value); } } @@ -1019,7 +1019,7 @@ pph_out_sorted_fields_type (pph_stream *stream, struct sorted_fields_type *sft) pph_out_uint (stream, sft->len); for (i = 0; i < sft->len; i++) - pph_out_tree_or_ref (stream, sft->elts[i]); + pph_out_tree (stream, sft->elts[i]); } @@ -1078,24 +1078,24 @@ pph_out_lang_type_class (pph_stream *stream, struct lang_type_class *ltc) bp_pack_value (&bp, ltc->has_constexpr_ctor, 1); pph_out_bitpack (stream, &bp); - pph_out_tree_or_ref (stream, ltc->primary_base); + pph_out_tree (stream, ltc->primary_base); pph_out_tree_pair_vec (stream, ltc->vcall_indices); - pph_out_tree_or_ref (stream, ltc->vtables); - pph_out_tree_or_ref (stream, ltc->typeinfo_var); + pph_out_tree (stream, ltc->vtables); + pph_out_tree (stream, ltc->typeinfo_var); pph_out_tree_vec (stream, ltc->vbases); if (pph_out_start_record (stream, ltc->nested_udts)) pph_out_binding_table (stream, ltc->nested_udts); - pph_out_tree_or_ref (stream, ltc->as_base); + pph_out_tree (stream, ltc->as_base); pph_out_tree_vec (stream, ltc->pure_virtuals); - pph_out_tree_or_ref (stream, ltc->friend_classes); + pph_out_tree (stream, ltc->friend_classes); pph_out_tree_vec (stream, ltc->methods); - pph_out_tree_or_ref (stream, ltc->key_method); - pph_out_tree_or_ref (stream, ltc->decl_list); - pph_out_tree_or_ref (stream, ltc->template_info); - pph_out_tree_or_ref (stream, ltc->befriending_classes); - pph_out_tree_or_ref (stream, ltc->objc_info); + pph_out_tree (stream, ltc->key_method); + pph_out_tree (stream, ltc->decl_list); + pph_out_tree (stream, ltc->template_info); + pph_out_tree (stream, ltc->befriending_classes); + pph_out_tree (stream, ltc->objc_info); pph_out_sorted_fields_type (stream, ltc->sorted_fields); - pph_out_tree_or_ref (stream, ltc->lambda_expr); + pph_out_tree (stream, ltc->lambda_expr); } @@ -1104,7 +1104,7 @@ pph_out_lang_type_class (pph_stream *stream, struct lang_type_class *ltc) static void pph_out_lang_type_ptrmem (pph_stream *stream, struct lang_type_ptrmem *ltp) { - pph_out_tree_or_ref (stream, ltp->record); + pph_out_tree (stream, ltp->record); } @@ -1410,10 +1410,10 @@ pph_out_function_decl (pph_stream *stream, tree fndecl) order when reading the image (the allocation of DECL_STRUCT_FUNCTION has the side effect of generating function sequence numbers (function.funcdef_no). */ - pph_out_tree_or_ref_1 (stream, DECL_INITIAL (fndecl), 3); + pph_out_tree_1 (stream, DECL_INITIAL (fndecl), 3); pph_out_lang_specific (stream, fndecl); - pph_out_tree_or_ref_1 (stream, DECL_SAVED_TREE (fndecl), 3); - pph_out_tree_or_ref_1 (stream, DECL_CHAIN (fndecl), 3); + pph_out_tree_1 (stream, DECL_SAVED_TREE (fndecl), 3); + pph_out_tree_1 (stream, DECL_CHAIN (fndecl), 3); } @@ -1444,7 +1444,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) case IMPORTED_DECL: case LABEL_DECL: case RESULT_DECL: - pph_out_tree_or_ref_1 (stream, DECL_INITIAL (expr), 3); + pph_out_tree_1 (stream, DECL_INITIAL (expr), 3); break; case CONST_DECL: @@ -1454,11 +1454,11 @@ pph_write_tree_body (pph_stream *stream, tree expr) case USING_DECL: case VAR_DECL: /* FIXME pph: Should we merge DECL_INITIAL into lang_specific? */ - pph_out_tree_or_ref_1 (stream, DECL_INITIAL (expr), 3); + pph_out_tree_1 (stream, DECL_INITIAL (expr), 3); pph_out_lang_specific (stream, expr); /* DECL_CHAIN is handled by generic code, except for VAR_DECLs. */ if (TREE_CODE (expr) == VAR_DECL) - pph_out_tree_or_ref_1 (stream, DECL_CHAIN (expr), 3); + pph_out_tree_1 (stream, DECL_CHAIN (expr), 3); break; case FUNCTION_DECL: @@ -1466,17 +1466,17 @@ pph_write_tree_body (pph_stream *stream, tree expr) break; case TYPE_DECL: - pph_out_tree_or_ref_1 (stream, DECL_INITIAL (expr), 3); + pph_out_tree_1 (stream, DECL_INITIAL (expr), 3); pph_out_lang_specific (stream, expr); - pph_out_tree_or_ref_1 (stream, DECL_ORIGINAL_TYPE (expr), 3); + pph_out_tree_1 (stream, DECL_ORIGINAL_TYPE (expr), 3); break; case TEMPLATE_DECL: - pph_out_tree_or_ref_1 (stream, DECL_INITIAL (expr), 3); + pph_out_tree_1 (stream, DECL_INITIAL (expr), 3); pph_out_lang_specific (stream, expr); - pph_out_tree_or_ref_1 (stream, DECL_TEMPLATE_RESULT (expr), 3); - pph_out_tree_or_ref_1 (stream, DECL_TEMPLATE_PARMS (expr), 3); - pph_out_tree_or_ref_1 (stream, DECL_CONTEXT (expr), 3); + pph_out_tree_1 (stream, DECL_TEMPLATE_RESULT (expr), 3); + pph_out_tree_1 (stream, DECL_TEMPLATE_PARMS (expr), 3); + pph_out_tree_1 (stream, DECL_CONTEXT (expr), 3); break; /* tcc_type */ @@ -1504,7 +1504,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) case RECORD_TYPE: case UNION_TYPE: pph_out_lang_type (stream, expr); - pph_out_tree_or_ref_1 (stream, TYPE_BINFO (expr), 3); + pph_out_tree_1 (stream, TYPE_BINFO (expr), 3); break; case BOUND_TEMPLATE_TEMPLATE_PARM: @@ -1514,7 +1514,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) case TYPENAME_TYPE: case TYPEOF_TYPE: pph_out_lang_type (stream, expr); - pph_out_tree_or_ref_1 (stream, TYPE_CACHED_VALUES (expr), 3); + pph_out_tree_1 (stream, TYPE_CACHED_VALUES (expr), 3); /* Note that we are using TYPED_CACHED_VALUES for it access to the generic .values field of types. */ break; @@ -1534,7 +1534,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) /* Write the statements. */ for (i = tsi_start (expr); !tsi_end_p (i); tsi_next (&i)) - pph_out_tree_or_ref_1 (stream, tsi_stmt (i), 3); + pph_out_tree_1 (stream, tsi_stmt (i), 3); } break; @@ -1552,7 +1552,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) case OVERLOAD: pph_out_tree_common (stream, expr); - pph_out_tree_or_ref_1 (stream, OVL_CURRENT (expr), 3); + pph_out_tree_1 (stream, OVL_CURRENT (expr), 3); break; case IDENTIFIER_NODE: @@ -1560,17 +1560,17 @@ pph_write_tree_body (pph_stream *stream, tree expr) struct lang_identifier *id = LANG_IDENTIFIER_CAST (expr); pph_out_cxx_binding (stream, id->namespace_bindings); pph_out_cxx_binding (stream, id->bindings); - pph_out_tree_or_ref_1 (stream, id->class_template_info, 3); - pph_out_tree_or_ref_1 (stream, id->label_value, 3); - pph_out_tree_or_ref_1 (stream, TREE_TYPE (expr), 3); + pph_out_tree_1 (stream, id->class_template_info, 3); + pph_out_tree_1 (stream, id->label_value, 3); + pph_out_tree_1 (stream, TREE_TYPE (expr), 3); } break; case BASELINK: pph_out_tree_common (stream, expr); - pph_out_tree_or_ref_1 (stream, BASELINK_BINFO (expr), 3); - pph_out_tree_or_ref_1 (stream, BASELINK_FUNCTIONS (expr), 3); - pph_out_tree_or_ref_1 (stream, BASELINK_ACCESS_BINFO (expr), 3); + pph_out_tree_1 (stream, BASELINK_BINFO (expr), 3); + pph_out_tree_1 (stream, BASELINK_FUNCTIONS (expr), 3); + pph_out_tree_1 (stream, BASELINK_ACCESS_BINFO (expr), 3); break; case TEMPLATE_INFO: @@ -1587,7 +1587,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) pph_out_uint (stream, p->level); pph_out_uint (stream, p->orig_level); pph_out_uint (stream, p->num_siblings); - pph_out_tree_or_ref_1 (stream, p->decl, 3); + pph_out_tree_1 (stream, p->decl, 3); } break; @@ -1595,7 +1595,7 @@ pph_write_tree_body (pph_stream *stream, tree expr) case PTRMEM_CST: pph_out_tree_common (stream, expr); - pph_out_tree_or_ref_1 (stream, PTRMEM_CST_MEMBER (expr), 3); + pph_out_tree_1 (stream, PTRMEM_CST_MEMBER (expr), 3); break; /* tcc_exceptional */ @@ -1608,21 +1608,21 @@ pph_write_tree_body (pph_stream *stream, tree expr) case STATIC_ASSERT: pph_out_tree_common (stream, expr); - pph_out_tree_or_ref_1 (stream, STATIC_ASSERT_CONDITION (expr), 3); - pph_out_tree_or_ref_1 (stream, STATIC_ASSERT_MESSAGE (expr), 3); + pph_out_tree_1 (stream, STATIC_ASSERT_CONDITION (expr), 3); + pph_out_tree_1 (stream, STATIC_ASSERT_MESSAGE (expr), 3); pph_out_location (stream, STATIC_ASSERT_SOURCE_LOCATION (expr)); break; case ARGUMENT_PACK_SELECT: pph_out_tree_common (stream, expr); - pph_out_tree_or_ref_1 (stream, ARGUMENT_PACK_SELECT_FROM_PACK (expr), 3); + pph_out_tree_1 (stream, ARGUMENT_PACK_SELECT_FROM_PACK (expr), 3); pph_out_uint (stream, ARGUMENT_PACK_SELECT_INDEX (expr)); break; case TRAIT_EXPR: pph_out_tree_common (stream, expr); - pph_out_tree_or_ref_1 (stream, TRAIT_EXPR_TYPE1 (expr), 3); - pph_out_tree_or_ref_1 (stream, TRAIT_EXPR_TYPE2 (expr), 3); + pph_out_tree_1 (stream, TRAIT_EXPR_TYPE1 (expr), 3); + pph_out_tree_1 (stream, TRAIT_EXPR_TYPE2 (expr), 3); pph_out_uint (stream, TRAIT_EXPR_KIND (expr)); break; @@ -1632,10 +1632,10 @@ pph_write_tree_body (pph_stream *stream, tree expr) = (struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (expr); pph_out_tree_common (stream, expr); pph_out_location (stream, e->locus); - pph_out_tree_or_ref_1 (stream, e->capture_list, 3); - pph_out_tree_or_ref_1 (stream, e->this_capture, 3); - pph_out_tree_or_ref_1 (stream, e->return_type, 3); - pph_out_tree_or_ref_1 (stream, e->extra_scope, 3); + pph_out_tree_1 (stream, e->capture_list, 3); + pph_out_tree_1 (stream, e->this_capture, 3); + pph_out_tree_1 (stream, e->return_type, 3); + pph_out_tree_1 (stream, e->extra_scope, 3); pph_out_uint (stream, e->discriminator); } break; diff --git a/gcc/cp/pph-streamer.h b/gcc/cp/pph-streamer.h index 415995b..8c3298a 100644 --- a/gcc/cp/pph-streamer.h +++ b/gcc/cp/pph-streamer.h @@ -239,15 +239,6 @@ extern void pph_in_spec_entry_tables (pph_stream *stream); /* Inline functions. */ -/* Output AST T to STREAM. This function is the primary interface. */ -static inline void -pph_out_tree (pph_stream *stream, tree t) -{ - if (flag_pph_tracer >= 1) - pph_trace_tree (stream, t); - pph_write_tree (stream->encoder.w.ob, t, false); -} - /* Output array A of cardinality C of ASTs to STREAM. */ /* FIXME pph: hold for alternate routine. */ #if 0 @@ -267,7 +258,7 @@ pph_out_tree_array (pph_stream *stream, tree *a, size_t c) /* Output AST T to STREAM. If -fpph-tracer is set to TLEVEL or higher, T is sent to pph_trace_tree. */ static inline void -pph_out_tree_or_ref_1 (pph_stream *stream, tree t, int tlevel) +pph_out_tree_1 (pph_stream *stream, tree t, int tlevel) { if (flag_pph_tracer >= tlevel) pph_trace_tree (stream, t); @@ -276,9 +267,9 @@ pph_out_tree_or_ref_1 (pph_stream *stream, tree t, int tlevel) /* Output AST T to STREAM. Trigger tracing at -fpph-tracer=2. */ static inline void -pph_out_tree_or_ref (pph_stream *stream, tree t) +pph_out_tree (pph_stream *stream, tree t) { - pph_out_tree_or_ref_1 (stream, t, 2); + pph_out_tree_1 (stream, t, 2); } /* Write an unsigned int VALUE to STREAM. */ diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f4b3e8e..3af33a6 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -20213,9 +20213,9 @@ pph_out_spec_entry_slot (void **slot, void *aux) { pph_stream *stream = (pph_stream *)aux; struct spec_entry *entry = (struct spec_entry *) *slot; - pph_out_tree_or_ref (stream, entry->tmpl); - pph_out_tree_or_ref (stream, entry->args); - pph_out_tree_or_ref (stream, entry->spec); + pph_out_tree (stream, entry->tmpl); + pph_out_tree (stream, entry->args); + pph_out_tree (stream, entry->spec); return 1; } --- gcc/cp/ChangeLog.pph | 11 ++++ gcc/cp/pph-streamer-in.c | 86 ++--------------------------- gcc/cp/pph-streamer-out.c | 132 ++------------------------------------------ 3 files changed, 23 insertions(+), 206 deletions(-) diff --git a/gcc/cp/ChangeLog.pph b/gcc/cp/ChangeLog.pph index 666033b..7f4b200 100644 --- a/gcc/cp/ChangeLog.pph +++ b/gcc/cp/ChangeLog.pph @@ -1,5 +1,16 @@ 2011-08-17 Diego Novillo <dnovi...@google.com> + * pph-streamer-in.c (pph_get_type_from_index): Remove. + (pph_in_number): Remove. + (pph_in_token_value): Handle all cases that read a tree + with pph_in_tree. + * pph-streamer-out.c (pph_out_number): Remove. + (pph_get_index_from_type): Remove. + (pph_out_token_value): Handle all cases that write a tree + with pph_out_tree. + +2011-08-17 Diego Novillo <dnovi...@google.com> + * pph-streamer.h (pph_out_tree_1): Rename from pph_out_tree_or_ref_1. Update all users. (pph_out_tree): Rename from pph_out_tree_or_ref. Update all users. diff --git a/gcc/cp/pph-streamer-in.c b/gcc/cp/pph-streamer-in.c index 8d25de8..013f526 100644 --- a/gcc/cp/pph-streamer-in.c +++ b/gcc/cp/pph-streamer-in.c @@ -225,107 +225,33 @@ pph_read_location (struct lto_input_block *ib, } -/* Given a type index TYPE_IDX and TYPE_KIND specifying the kind of type, - return a type from integer_types or global_trees. */ - -static tree -pph_get_type_from_index (unsigned type_idx, unsigned type_kind) -{ - if (type_kind == CPP_N_INTEGER) - return integer_types[type_idx]; - else if (type_kind == CPP_N_FLOATING || type_kind == CPP_N_FRACT) - return global_trees[type_idx]; - else if (type_kind == CPP_N_IMAGINARY) - { - /* We don't need a type for the complex number. The type is - associated with the real and imaginary parts. */ - return NULL_TREE; - } - else - gcc_unreachable (); -} - - -/* Load a numeric value from file F. Return the corresponding tree. */ - -static tree -pph_in_number (pph_stream *f) -{ - unsigned type_idx, type_kind; - tree type, val; - - type_idx = pph_in_uint (f); - type_kind = pph_in_uint (f); - - type = pph_get_type_from_index (type_idx, type_kind); - - if (type_kind == CPP_N_INTEGER) - { - HOST_WIDE_INT v[2]; - pph_in_bytes (f, v, 2 * sizeof (HOST_WIDE_INT)); - val = build_int_cst_wide (type, v[0], v[1]); - } - else if (type_kind == CPP_N_FLOATING) - { - REAL_VALUE_TYPE r; - pph_in_bytes (f, &r, sizeof (REAL_VALUE_TYPE)); - val = build_real (type, r); - } - else if (type_kind == CPP_N_FRACT) - { - FIXED_VALUE_TYPE fv; - pph_in_bytes (f, &fv, sizeof (FIXED_VALUE_TYPE)); - val = build_fixed (type, fv); - } - else if (type_kind == CPP_N_IMAGINARY) - { - tree r = pph_in_number (f); - tree i = pph_in_number (f); - val = build_complex (NULL_TREE, r, i); - } - else - gcc_unreachable (); - - return val; -} - - -/* Load the tree value associated with TOKEN to file F. */ +/* Load the tree value associated with TOKEN from STREAM. */ static void -pph_in_token_value (pph_stream *f, cp_token *token) +pph_in_token_value (pph_stream *stream, cp_token *token) { - const char *str; - switch (token->type) { case CPP_TEMPLATE_ID: case CPP_NESTED_NAME_SPECIFIER: - break; - - case CPP_NAME: - str = pph_in_string (f); - token->u.value = get_identifier (str); + /* FIXME pph - Need to handle struct tree_check. */ break; case CPP_KEYWORD: token->u.value = ridpointers[token->keyword]; break; + case CPP_NAME: case CPP_CHAR: case CPP_WCHAR: case CPP_CHAR16: case CPP_CHAR32: case CPP_NUMBER: - token->u.value = pph_in_number (f); - break; - case CPP_STRING: case CPP_WSTRING: case CPP_STRING16: case CPP_STRING32: - str = pph_in_string (f); - token->u.value = build_string (strlen (str), str); + token->u.value = pph_in_tree (stream); break; case CPP_PRAGMA: @@ -333,7 +259,7 @@ pph_in_token_value (pph_stream *f, cp_token *token) break; default: - pph_in_bytes (f, &token->u.value, sizeof (token->u.value)); + pph_in_bytes (stream, &token->u.value, sizeof (token->u.value)); gcc_assert (token->u.value == NULL); } } diff --git a/gcc/cp/pph-streamer-out.c b/gcc/cp/pph-streamer-out.c index b631825..2099d4e 100644 --- a/gcc/cp/pph-streamer-out.c +++ b/gcc/cp/pph-streamer-out.c @@ -228,120 +228,11 @@ pph_out_start_record (pph_stream *stream, void *data) } -/* Compute an index value for TYPE suitable for restoring it later - from global_trees[] or integer_types. The index is saved - in TYPE_IX_P and the number category (one of CPP_N_INTEGER, - CPP_N_FLOATING, etc) is saved in CATEGORY_P. */ +/* Save the tree associated with TOKEN to STREAM. */ static void -pph_get_index_from_type (tree type, unsigned *type_ix_p, unsigned *category_p) +pph_out_token_value (pph_stream *stream, cp_token *token) { - void **val_p; - static struct pointer_map_t *type_cache = NULL; - - /* For complex types we will just use the type of the components. */ - if (TREE_CODE (type) == COMPLEX_TYPE) - { - *type_ix_p = 0; - *category_p = CPP_N_IMAGINARY; - return; - } - - if (type_cache == NULL) - type_cache = pointer_map_create (); - - val_p = pointer_map_contains (type_cache, type); - if (val_p) - *type_ix_p = *((unsigned *) val_p); - else - { - if (CP_INTEGRAL_TYPE_P (type)) - { - unsigned i; - for (i = itk_char; i < itk_none; i++) - if (type == integer_types[i]) - { - *type_ix_p = (unsigned) i; - break; - } - - gcc_assert (i != itk_none); - } - else if (FLOAT_TYPE_P (type) || FIXED_POINT_TYPE_P (type)) - { - unsigned i; - - for (i = TI_ERROR_MARK; i < TI_MAX; i++) - if (global_trees[i] == type) - { - *type_ix_p = (unsigned) i; - break; - } - - gcc_assert (i != TI_MAX); - } - else - gcc_unreachable (); - } - - if (CP_INTEGRAL_TYPE_P (type)) - *category_p = CPP_N_INTEGER; - else if (FLOAT_TYPE_P (type)) - *category_p = CPP_N_FLOATING; - else if (FIXED_POINT_TYPE_P (type)) - *category_p = CPP_N_FRACT; - else - gcc_unreachable (); -} - - -/* Save the number VAL to file F. */ - -static void -pph_out_number (pph_stream *f, tree val) -{ - unsigned type_idx, type_kind; - - pph_get_index_from_type (TREE_TYPE (val), &type_idx, &type_kind); - - pph_out_uint (f, type_idx); - pph_out_uint (f, type_kind); - - if (type_kind == CPP_N_INTEGER) - { - HOST_WIDE_INT v[2]; - - v[0] = TREE_INT_CST_LOW (val); - v[1] = TREE_INT_CST_HIGH (val); - pph_out_bytes (f, v, 2 * sizeof (HOST_WIDE_INT)); - } - else if (type_kind == CPP_N_FLOATING) - { - REAL_VALUE_TYPE r = TREE_REAL_CST (val); - pph_out_bytes (f, &r, sizeof (REAL_VALUE_TYPE)); - } - else if (type_kind == CPP_N_FRACT) - { - FIXED_VALUE_TYPE fv = TREE_FIXED_CST (val); - pph_out_bytes (f, &fv, sizeof (FIXED_VALUE_TYPE)); - } - else if (type_kind == CPP_N_IMAGINARY) - { - pph_out_number (f, TREE_REALPART (val)); - pph_out_number (f, TREE_IMAGPART (val)); - } - else - gcc_unreachable (); -} - - -/* Save the tree associated with TOKEN to file F. */ - -static void -pph_out_token_value (pph_stream *f, cp_token *token) -{ - const char *str; - unsigned len; tree val; val = token->u.value; @@ -349,13 +240,7 @@ pph_out_token_value (pph_stream *f, cp_token *token) { case CPP_TEMPLATE_ID: case CPP_NESTED_NAME_SPECIFIER: - break; - - case CPP_NAME: - /* FIXME pph. Hash the strings and emit a string table. */ - str = IDENTIFIER_POINTER (val); - len = IDENTIFIER_LENGTH (val); - pph_out_string_with_length (f, str, len); + /* FIXME pph - Need to handle struct tree_check. */ break; case CPP_KEYWORD: @@ -363,22 +248,17 @@ pph_out_token_value (pph_stream *f, cp_token *token) ridpointers[token->keyword] at load time. */ break; + case CPP_NAME: case CPP_CHAR: case CPP_WCHAR: case CPP_CHAR16: case CPP_CHAR32: case CPP_NUMBER: - pph_out_number (f, val); - break; - case CPP_STRING: case CPP_WSTRING: case CPP_STRING16: case CPP_STRING32: - /* FIXME pph. Need to represent the type. */ - str = TREE_STRING_POINTER (val); - len = TREE_STRING_LENGTH (val); - pph_out_string_with_length (f, str, len); + pph_out_tree (stream, val); break; case CPP_PRAGMA: @@ -387,7 +267,7 @@ pph_out_token_value (pph_stream *f, cp_token *token) default: gcc_assert (token->u.value == NULL); - pph_out_bytes (f, &token->u.value, sizeof (token->u.value)); + pph_out_bytes (stream, &token->u.value, sizeof (token->u.value)); } } -- 1.7.3.1 -- This patch is available for review at http://codereview.appspot.com/4908048