From 85942f45e92cf0d42196018892633944a234ab57 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 3 Feb 2014 21:41:30 +0100 Subject: re PR ipa/59831 (ice in cgraph_speculative_call_info with -O3) PR ipa/59831 * g++.dg/ipa/devirt-24.C: New testcase. * ipa-cp.c (ipa_get_indirect_edge_target_1): Give up on -fno-devirtualize; Try to devirtualize by the knowledge of virtual table pointer given by aggregate propagation. * ipa-prop.c (try_make_edge_direct_virtual_call): Likewise. ipa_print_node_jump_functions): Dump also offset that is relevant for polymorphic calls. (determine_known_aggregate_parts): Add arg_type parameter; use it instead of determining the type from pointer type. (ipa_compute_jump_functions_for_edge): Update call of determine_known_aggregate_parts. * gimple-fold.c (gimple_get_virt_method_for_vtable): Break out from ... (gimple_get_virt_method_for_binfo): ... here; simplify using vtable_pointer_value_to_vtable. * gimple-fold.h (gimple_get_virt_method_for_vtable): Declare. * ipa-devirt.c (subbinfo_with_vtable_at_offset): Turn OFFSET parameter to unsigned HOST_WIDE_INT; Use vtable_pointer_value_to_vtable. (vtable_pointer_value_to_vtable): Break out from ...; handle also POINTER_PLUS_EXPR. (vtable_pointer_value_to_binfo): ... here. * ipa-utils.h (vtable_pointer_value_to_vtable): Declare. From-SVN: r207439 --- gcc/ipa-utils.h | 1 + 1 file changed, 1 insertion(+) (limited to 'gcc/ipa-utils.h') diff --git a/gcc/ipa-utils.h b/gcc/ipa-utils.h index 3212f38..3f9be17 100644 --- a/gcc/ipa-utils.h +++ b/gcc/ipa-utils.h @@ -88,6 +88,7 @@ tree get_polymorphic_call_info (tree, tree, tree *, HOST_WIDE_INT *, ipa_polymorphic_call_context *); tree vtable_pointer_value_to_binfo (tree t); +bool vtable_pointer_value_to_vtable (tree, tree *, unsigned HOST_WIDE_INT *); /* Return vector containing possible targets of polymorphic call E. If FINALP is non-NULL, store true if the list is complette. -- cgit v1.1