summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-10 13:24:30 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-10 13:24:30 +0000
commitb21cfa647d9837cba70740878c595b78459ac2b2 (patch)
tree5a3afdf91d3d3953bbd03b79c2e0d857d968bf70
parent1dd91a19aa828fdf130d7aed2398c08ba77e854b (diff)
downloadgcc-b21cfa647d9837cba70740878c595b78459ac2b2.tar.gz
* ipa-cp.c (ipcp_process_devirtualization_opportunities):
Update call of gimple_get_virt_method_for_binfo. * gimple-fold.c (gimple_get_virt_method_for_binfo): Remove refuse_thunks parameter. (gimple_fold_call): Update. * ipa-prop.c (try_make_edge_direct_virtual_call): Update. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174905 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/gimple-fold.c17
-rw-r--r--gcc/gimple.h2
-rw-r--r--gcc/ipa-cp.c5
-rw-r--r--gcc/ipa-prop.c2
5 files changed, 15 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 14cc6d8541b..09d9d1c4872 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2011-06-10 Jan Hubicka <jh@suse.cz>
+ * ipa-cp.c (ipcp_process_devirtualization_opportunities):
+ Update call of gimple_get_virt_method_for_binfo.
+ * gimple-fold.c (gimple_get_virt_method_for_binfo): Remove
+ refuse_thunks parameter.
+ (gimple_fold_call): Update.
+ * ipa-prop.c (try_make_edge_direct_virtual_call): Update.
+
+2011-06-10 Jan Hubicka <jh@suse.cz>
+
* tree-sra.c (all_callers_have_enough_arguments_p): Rename to ...
(not_all_callers_have_enough_arguments_p): ... this one; turn into
worker for cgraph_for_node_and_aliases.
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 180a51e095a..6b3b275eeee 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -1373,11 +1373,10 @@ gimple_fold_builtin (gimple stmt)
tree
gimple_get_virt_method_for_binfo (HOST_WIDE_INT token, tree known_binfo,
- tree *delta, bool refuse_thunks)
+ tree *delta)
{
HOST_WIDE_INT i;
tree v, fndecl;
- struct cgraph_node *node;
v = BINFO_VIRTUALS (known_binfo);
/* If there is no virtual methods leave the OBJ_TYPE_REF alone. */
@@ -1396,18 +1395,6 @@ gimple_get_virt_method_for_binfo (HOST_WIDE_INT token, tree known_binfo,
return NULL_TREE;
fndecl = TREE_VALUE (v);
- node = cgraph_get_node_or_alias (fndecl);
- if (refuse_thunks
- && (!node
- /* Bail out if it is a thunk declaration. Since simple this_adjusting
- thunks are represented by a constant in TREE_PURPOSE of items in
- BINFO_VIRTUALS, this is a more complicate type which we cannot handle as
- yet.
-
- FIXME: Remove the following condition once we are able to represent
- thunk information on call graph edges. */
- || (node->same_body_alias && node->thunk.thunk_p)))
- return NULL_TREE;
/* When cgraph node is missing and function is not public, we cannot
devirtualize. This can happen in WHOPR when the actual method
@@ -1557,7 +1544,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace)
if (!binfo)
return false;
token = TREE_INT_CST_LOW (OBJ_TYPE_REF_TOKEN (callee));
- fndecl = gimple_get_virt_method_for_binfo (token, binfo, &delta, false);
+ fndecl = gimple_get_virt_method_for_binfo (token, binfo, &delta);
if (!fndecl)
return false;
gcc_assert (integer_zerop (delta));
diff --git a/gcc/gimple.h b/gcc/gimple.h
index c39eb574c87..7d97adbe7ad 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -904,7 +904,7 @@ unsigned get_gimple_rhs_num_ops (enum tree_code);
gimple gimple_alloc_stat (enum gimple_code, unsigned MEM_STAT_DECL);
const char *gimple_decl_printable_name (tree, int);
bool gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace);
-tree gimple_get_virt_method_for_binfo (HOST_WIDE_INT, tree, tree *, bool);
+tree gimple_get_virt_method_for_binfo (HOST_WIDE_INT, tree, tree *);
void gimple_adjust_this_by_delta (gimple_stmt_iterator *, tree);
tree gimple_extract_devirt_binfo_from_cst (tree);
/* Returns true iff T is a valid GIMPLE statement. */
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 18bfe90235d..992f1858983 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -1190,8 +1190,7 @@ ipcp_process_devirtualization_opportunities (struct cgraph_node *node)
binfo = get_binfo_at_offset (binfo, anc_offset, otr_type);
if (!binfo)
continue;
- target = gimple_get_virt_method_for_binfo (token, binfo, &delta,
- false);
+ target = gimple_get_virt_method_for_binfo (token, binfo, &delta);
}
else
{
@@ -1214,7 +1213,7 @@ ipcp_process_devirtualization_opportunities (struct cgraph_node *node)
break;
}
- t = gimple_get_virt_method_for_binfo (token, binfo, &d, true);
+ t = gimple_get_virt_method_for_binfo (token, binfo, &d);
if (!t)
{
target = NULL_TREE;
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 70622e5e435..7e74ac8b7d6 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -1771,7 +1771,7 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
type = ie->indirect_info->otr_type;
binfo = get_binfo_at_offset (binfo, ie->indirect_info->anc_offset, type);
if (binfo)
- target = gimple_get_virt_method_for_binfo (token, binfo, &delta, true);
+ target = gimple_get_virt_method_for_binfo (token, binfo, &delta);
else
return NULL;