diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-09-23 16:54:34 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-09-23 16:54:34 +0000 |
commit | 10fba9c02e052ec5274554138a6624e5576a15f2 (patch) | |
tree | aa313df8c645e4e1d249c3df18ae10900ad40a7e /gcc/ipa-utils.h | |
parent | ac8d08a3c98897e7a17f42910956c07fd14ea06e (diff) | |
download | gcc-10fba9c02e052ec5274554138a6624e5576a15f2.tar.gz |
* ipa-cp.c (ipa_get_indirect_edge_target_1): Add sanity check
for ipa-devirt.
* ipa-utils.h (possible_polymorphic_call_target_p): New function.
* ipa-devirt.c (possible_polymorphic_call_target_p): Be tolerant
of external calls
* gimple-fold.c: Include ipa-utils.h and gimple-pretty-print.h
(gimple_fold_call): Dump inconsistent devirtualizations; add
sanity check for type based devirtualizations.
* ipa-prop.c: Include ipa-utils.h
(ipa_intraprocedural_devirtualization): Add sanity check.
(try_make_edge_direct_virtual_call): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202837 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-utils.h')
-rw-r--r-- | gcc/ipa-utils.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ipa-utils.h b/gcc/ipa-utils.h index d6f390daf15..27949e19270 100644 --- a/gcc/ipa-utils.h +++ b/gcc/ipa-utils.h @@ -108,6 +108,19 @@ possible_polymorphic_call_target_p (struct cgraph_edge *e, return possible_polymorphic_call_target_p (e->indirect_info->otr_type, e->indirect_info->otr_token, n); } + +/* Return true if N can be possibly target of a polymorphic call of + OBJ_TYPE_REF expression CALL. */ + +inline bool +possible_polymorphic_call_target_p (tree call, + struct cgraph_node *n) +{ + return possible_polymorphic_call_target_p (obj_type_ref_class (call), + tree_low_cst + (OBJ_TYPE_REF_TOKEN (call), 1), + n); +} #endif /* GCC_IPA_UTILS_H */ |