summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/ipa
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-19 10:05:54 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-19 10:05:54 +0000
commit3af5e0b77894f5348512dfd60c034da9e859ef11 (patch)
treec0b5c5a3a1faceb961648fb593887aa1fdf1fc1b /gcc/testsuite/g++.dg/ipa
parent41154724529c7bfde53ae2adf9ed88c3af6126df (diff)
downloadgcc-3af5e0b77894f5348512dfd60c034da9e859ef11.tar.gz
* cgraph.c (cgraph_create_indirect_edge): Use get_polymorphic_call_info.
* cgraph.h (cgraph_indirect_call_info): Add outer_type, maybe_in_construction and maybe_derived_type. * ipa-utils.h (ipa_polymorphic_call_context): New structure. (ipa_dummy_polymorphic_call_context): New global var. (possible_polymorphic_call_targets): Add context paramter. (dump_possible_polymorphic_call_targets): Likewise; update wrappers. (possible_polymorphic_call_target_p): Likewise. (get_polymorphic_call_info): New function. * ipa-devirt.c (ipa_dummy_polymorphic_call_context): New function. (add_type_duplicate): Remove forgotten debug output. (method_class_type): Add sanity check. (maybe_record_node): Add FINALP parameter. (record_binfo): Add OUTER_TYPE and OFFSET; walk the inner by info by get_binfo_at_offset. (possible_polymorphic_call_targets_1): Add OUTER_TYPE/OFFSET parameters; pass them to record-binfo. (polymorphic_call_target_d): Add context and FINAL. (polymorphic_call_target_hasher::hash): Hash context. (polymorphic_call_target_hasher::equal): Compare context. (free_polymorphic_call_targets_hash): (get_class_context): New function. (contains_type_p): New function. (get_polymorphic_call_info): New function. (walk_bases): New function. (possible_polymorphic_call_targets): Add context parameter; honnor it. (dump_possible_polymorphic_call_targets): Dump context. (possible_polymorphic_call_target_p): Add context. (update_type_inheritance_graph): Update comment.s (ipa_set_jf_known_type): Assert that compoentn type is known. (ipa_note_param_call): Do not tamper with offsets. (ipa_analyze_indirect_call_uses): When offset is being changed; clear outer type. (update_indirect_edges_after_inlining): Likewise. (ipa_write_indirect_edge_info): Stream new fields. (ipa_read_indirect_edge_info): Stream in new fields. * ipa/devirt9.C: Verify that the optimization happens already before. whole-program. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205019 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/ipa')
-rw-r--r--gcc/testsuite/g++.dg/ipa/devirt-9.C8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/testsuite/g++.dg/ipa/devirt-9.C b/gcc/testsuite/g++.dg/ipa/devirt-9.C
index 5be458cbb41..d828a8a1cfd 100644
--- a/gcc/testsuite/g++.dg/ipa/devirt-9.C
+++ b/gcc/testsuite/g++.dg/ipa/devirt-9.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-inline" } */
+/* { dg-options "-O2 -fdump-ipa-whole-program" } */
double foo ();
struct B
{
@@ -27,5 +27,7 @@ bar ()
static C c;
c.c1 (60, (int) foo ());
}
-/* { dg-final { scan-ipa-dump "Discovered a virtual call to a known target" "inline" } } */
-/* { dg-final { cleanup-ipa-dump "inline" } } */
+/* We optimize out this call just after early passes. Unfortunately
+ this unreachable removal is not logged in dump file. */
+/* { dg-final { scan-ipa-dump 1 "OBJ_TYPE_REF" "whole-program" } } */
+/* { dg-final { cleanup-ipa-dump "whole-program" } } */