diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14cc6d8541b..09d9d1c4872 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-06-10 Jan Hubicka + + * 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 * tree-sra.c (all_callers_have_enough_arguments_p): Rename to ... 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;