diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2014-10-05 07:02:19 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2014-10-05 05:02:19 +0000 |
commit | 0127c169d155ecdad955d1b27cbc9e34ea981d42 (patch) | |
tree | d2428ebac5861155cb99905a9e92c774a2f64be7 /gcc/ChangeLog | |
parent | 2add94cd4415d64ea2a075abfa1ce74a9ee39053 (diff) | |
download | gcc-0127c169d155ecdad955d1b27cbc9e34ea981d42.zip gcc-0127c169d155ecdad955d1b27cbc9e34ea981d42.tar.gz gcc-0127c169d155ecdad955d1b27cbc9e34ea981d42.tar.bz2 |
ipa-polymorphic-call.c (walk_ssa_copies): Recognize NULL pointer checks.
* ipa-polymorphic-call.c (walk_ssa_copies): Recognize
NULL pointer checks.
(ipa_polymorphic_call_context::get_dynamic_type): Return true
if type doesn't change.
* cgraph.h (cgraph_indirect_call_info): New flag.
* cgraph.c (cgraph_node::create_indirect_edge): Initialize it.
(cgraph_node::dump): Dump it.
* ipa-prop.c (ipa_analyze_call_uses): Ignore return valud
of context.get_dynamic_type.
(ipa_make_edge_direct_to_target): Do not speculate
edge that is already speuclative.
(try_make_edge_direct_virtual_call): Use VPTR_CHANGED; Do not
speculate to __builtin_unreachable
(ipa_write_indirect_edge_info, ipa_read_indirect_edge_info): Stream
vptr_changed.
* ipa-cp.c (ipa_get_indirect_edge_target_1): Use vptr_changed.
* g++.dg/ipa/devirt-47.C: New testcase.
From-SVN: r215898
Diffstat (limited to 'gcc/ChangeLog')
-rw-r--r-- | gcc/ChangeLog | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d338270..3bf6de1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,24 @@ 2014-10-04 Jan Hubicka <hubicka@ucw.cz> + * ipa-polymorphic-call.c (walk_ssa_copies): Recognize + NULL pointer checks. + (ipa_polymorphic_call_context::get_dynamic_type): Return true + if type doesn't change. + * cgraph.h (cgraph_indirect_call_info): New flag. + * cgraph.c (cgraph_node::create_indirect_edge): Initialize it. + (cgraph_node::dump): Dump it. + * ipa-prop.c (ipa_analyze_call_uses): Ignore return valud + of context.get_dynamic_type. + (ipa_make_edge_direct_to_target): Do not speculate + edge that is already speuclative. + (try_make_edge_direct_virtual_call): Use VPTR_CHANGED; Do not + speculate to __builtin_unreachable + (ipa_write_indirect_edge_info, ipa_read_indirect_edge_info): Stream + vptr_changed. + * ipa-cp.c (ipa_get_indirect_edge_target_1): Use vptr_changed. + +2014-10-04 Jan Hubicka <hubicka@ucw.cz> + * ipa-prop.c (ipa_compute_jump_functions_for_edge): Call get_dynamic_type; drop TODO. * ipa-polymorphic-call.c |