diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-07-29 09:39:06 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-07-29 09:39:06 +0000 |
commit | 283c87508473e0e2710bf7851babf7c49c70ff4d (patch) | |
tree | 17a1672ffb371dd2e673d37baa24eda5b181647f /gcc/cgraph.c | |
parent | 722b598302cbaebca0283a57a29bc48043f18678 (diff) | |
download | gcc-283c87508473e0e2710bf7851babf7c49c70ff4d.tar.gz |
* cgraph.c (cgraph_node::create_indirect_edge): Copy speculative data.
* cgraph.h (cgraph_indirect_call_info): Add speculative data.
* gimple-fold.c (fold_gimple_assign): Fix check for virtual
call.
* ipa-devirt.c (ipa_dummy_polymorphic_call_context): Update
(contains_type_p): Forward declare.
(polymorphic_call_target_hasher::hash): Hash speculative info.
(polymorphic_call_target_hasher::equal): Compare speculative info.
(get_class_context): Handle speuclation.
(contains_type_p): Update.
(get_polymorphic_call_info_for_decl): Update.
(walk_ssa_copies): Break out from ...
(get_polymorphic_call_info): ... here; set speculative context
before giving up.
* ipa-prop.c (ipa_write_indirect_edge_info, ipa_read_indirect_edge_info):
Stream speculative context.
* ipa-utils.h (ipa_polymorphic_call_context): Add speculative info
(SPECULATIVE_OFFSET, SPECULATIVE_OUTER_TYPE,
SPECULATIVE_MAYBE_DERIVED_TYPE).
(possible_polymorphic_call_targets overriders): Update.
(dump_possible_polymorphic_call_targets overriders): Update.
(dump_possible_polymorphic_call_target_p overriders): Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213152 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index a5d07496f0a..52f9985694a 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -973,10 +973,15 @@ cgraph_node::create_indirect_edge (gimple call_stmt, int ecf_flags, edge->indirect_info->otr_token = otr_token; edge->indirect_info->otr_type = otr_type; edge->indirect_info->outer_type = context.outer_type; + edge->indirect_info->speculative_outer_type + = context.speculative_outer_type; edge->indirect_info->offset = context.offset; + edge->indirect_info->speculative_offset = context.speculative_offset; edge->indirect_info->maybe_in_construction = context.maybe_in_construction; edge->indirect_info->maybe_derived_type = context.maybe_derived_type; + edge->indirect_info->speculative_maybe_derived_type + = context.speculative_maybe_derived_type; } edge->next_callee = indirect_calls; @@ -3043,12 +3048,9 @@ cgraph_node::get_body (void) data = lto_get_section_data (file_data, LTO_section_function_body, name, &len); if (!data) - { - debug (); fatal_error ("%s: section %s is missing", file_data->file_name, name); - } gcc_assert (DECL_STRUCT_FUNCTION (decl) == NULL); |