This corresponds to: [PATCH 56/89] Various gimple to gimple_call conversions in IPA https://gcc.gnu.org/ml/gcc-patches/2014-04/msg01179.html from the original 89-patch kit
That earlier patch was approved by Jeff: > OK once prereqs go in. in https://gcc.gnu.org/ml/gcc-patches/2014-05/msg00857.html gcc/ * ipa-prop.c (detect_type_change_from_memory_writes): Require a gimple_call rather than a plain gimple. (detect_type_change): Likewise. (detect_type_change_ssa): Likewise. (compute_complex_assign_jump_func): Likewise. (compute_complex_ancestor_jump_func): Likewise. (compute_known_type_jump_func): Likewise. (determine_locally_known_aggregate_parts): Likewise. (ipa_compute_jump_functions_for_edge): Strengthen local "call" to a gimple_call; add checked cast to gimple_phi. (ipa_note_param_call): Require a gimple_call rather than a plain gimple. (ipa_analyze_indirect_call_uses): Likewise. (ipa_analyze_virtual_call_uses): Likewise. (ipa_analyze_call_uses): Likewise. (ipa_analyze_stmt_uses):Add checked cast to gimple_call. * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Replace use of is_gimple_call with dyn_cast<gimple_call> and a new local "call_stmt". --- gcc/ChangeLog.gimple-classes | 25 +++++++++++++++++++++++++ gcc/ipa-prop.c | 33 +++++++++++++++++++-------------- gcc/tree-ssa-pre.c | 6 +++--- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes index 115f7ea..6fd5738 100644 --- a/gcc/ChangeLog.gimple-classes +++ b/gcc/ChangeLog.gimple-classes @@ -1,5 +1,30 @@ 2014-10-24 David Malcolm <dmalc...@redhat.com> + Various gimple to gimple_call conversions in IPA + + * ipa-prop.c (detect_type_change_from_memory_writes): Require a + gimple_call rather than a plain gimple. + (detect_type_change): Likewise. + (detect_type_change_ssa): Likewise. + (compute_complex_assign_jump_func): Likewise. + (compute_complex_ancestor_jump_func): Likewise. + (compute_known_type_jump_func): Likewise. + (determine_locally_known_aggregate_parts): Likewise. + (ipa_compute_jump_functions_for_edge): Strengthen local "call" to + a gimple_call; add checked cast to gimple_phi. + (ipa_note_param_call): Require a gimple_call rather than a plain + gimple. + (ipa_analyze_indirect_call_uses): Likewise. + (ipa_analyze_virtual_call_uses): Likewise. + (ipa_analyze_call_uses): Likewise. + (ipa_analyze_stmt_uses):Add checked cast to gimple_call. + + * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): + Replace use of is_gimple_call with dyn_cast<gimple_call> and a + new local "call_stmt". + +2014-10-24 David Malcolm <dmalc...@redhat.com> + Use gimple_call for callgraph edges * cgraph.h (cgraph_edge::call_stmt): Strengthen field from plain diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 45bfbc6..5a861f8 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -831,7 +831,7 @@ param_type_may_change_p (tree function, tree arg, gimple call) static bool detect_type_change_from_memory_writes (tree arg, tree base, tree comp_type, - gimple call, struct ipa_jump_func *jfunc, + gimple_call call, struct ipa_jump_func *jfunc, HOST_WIDE_INT offset) { struct prop_type_change_info tci; @@ -891,7 +891,7 @@ detect_type_change_from_memory_writes (tree arg, tree base, tree comp_type, returned by get_ref_base_and_extent, as is the offset. */ static bool -detect_type_change (tree arg, tree base, tree comp_type, gimple call, +detect_type_change (tree arg, tree base, tree comp_type, gimple_call call, struct ipa_jump_func *jfunc, HOST_WIDE_INT offset) { if (!flag_devirtualize) @@ -912,7 +912,7 @@ detect_type_change (tree arg, tree base, tree comp_type, gimple call, static bool detect_type_change_ssa (tree arg, tree comp_type, - gimple call, struct ipa_jump_func *jfunc) + gimple_call call, struct ipa_jump_func *jfunc) { gcc_checking_assert (TREE_CODE (arg) == SSA_NAME); if (!flag_devirtualize @@ -1289,7 +1289,7 @@ static void compute_complex_assign_jump_func (struct func_body_info *fbi, struct ipa_node_params *info, struct ipa_jump_func *jfunc, - gimple call, gimple stmt, tree name, + gimple_call call, gimple stmt, tree name, tree param_type) { HOST_WIDE_INT offset, size, max_size; @@ -1445,7 +1445,8 @@ static void compute_complex_ancestor_jump_func (struct func_body_info *fbi, struct ipa_node_params *info, struct ipa_jump_func *jfunc, - gimple call, gimple phi, tree param_type) + gimple_call call, gimple_phi phi, + tree param_type) { HOST_WIDE_INT offset; gimple assign, cond; @@ -1516,7 +1517,7 @@ compute_complex_ancestor_jump_func (struct func_body_info *fbi, static void compute_known_type_jump_func (tree op, struct ipa_jump_func *jfunc, - gimple call, tree expected_type) + gimple_call call, tree expected_type) { HOST_WIDE_INT offset, size, max_size; tree base; @@ -1680,7 +1681,8 @@ build_agg_jump_func_from_list (struct ipa_known_agg_contents_list *list, subsequently stored. */ static void -determine_locally_known_aggregate_parts (gimple call, tree arg, tree arg_type, +determine_locally_known_aggregate_parts (gimple_call call, tree arg, + tree arg_type, struct ipa_jump_func *jfunc) { struct ipa_known_agg_contents_list *list = NULL; @@ -1876,7 +1878,7 @@ ipa_compute_jump_functions_for_edge (struct func_body_info *fbi, { struct ipa_node_params *info = IPA_NODE_REF (cs->caller); struct ipa_edge_args *args = IPA_EDGE_REF (cs); - gimple call = cs->call_stmt; + gimple_call call = cs->call_stmt; int n, arg_num = gimple_call_num_args (call); bool useful_context = false; @@ -1952,7 +1954,9 @@ ipa_compute_jump_functions_for_edge (struct func_body_info *fbi, call, stmt, arg, param_type); else if (gimple_code (stmt) == GIMPLE_PHI) compute_complex_ancestor_jump_func (fbi, info, jfunc, - call, stmt, param_type); + call, + as_a <gimple_phi> (stmt), + param_type); } } else @@ -2078,7 +2082,8 @@ ipa_is_ssa_with_stmt_def (tree t) indirect call graph edge. */ static struct cgraph_edge * -ipa_note_param_call (struct cgraph_node *node, int param_index, gimple stmt) +ipa_note_param_call (struct cgraph_node *node, int param_index, + gimple_call stmt) { struct cgraph_edge *cs; @@ -2149,7 +2154,7 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, gimple stmt) passed by value or reference. */ static void -ipa_analyze_indirect_call_uses (struct func_body_info *fbi, gimple call, +ipa_analyze_indirect_call_uses (struct func_body_info *fbi, gimple_call call, tree target) { struct ipa_node_params *info = fbi->info; @@ -2288,7 +2293,7 @@ ipa_analyze_indirect_call_uses (struct func_body_info *fbi, gimple call, static void ipa_analyze_virtual_call_uses (struct func_body_info *fbi, - gimple call, tree target) + gimple_call call, tree target) { tree obj = OBJ_TYPE_REF_OBJECT (target); int index; @@ -2344,7 +2349,7 @@ ipa_analyze_virtual_call_uses (struct func_body_info *fbi, containing intermediate information about each formal parameter. */ static void -ipa_analyze_call_uses (struct func_body_info *fbi, gimple call) +ipa_analyze_call_uses (struct func_body_info *fbi, gimple_call call) { tree target = gimple_call_fn (call); @@ -2393,7 +2398,7 @@ static void ipa_analyze_stmt_uses (struct func_body_info *fbi, gimple stmt) { if (is_gimple_call (stmt)) - ipa_analyze_call_uses (fbi, stmt); + ipa_analyze_call_uses (fbi, as_a <gimple_call> (stmt)); } /* Callback of walk_stmt_load_store_addr_ops for the visit_load. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index a9bacff..189363a 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4298,9 +4298,9 @@ eliminate_dom_walker::before_dom_children (basic_block b) /* Visit indirect calls and turn them into direct calls if possible using the devirtualization machinery. */ - if (is_gimple_call (stmt)) + if (gimple_call call_stmt = dyn_cast <gimple_call> (stmt)) { - tree fn = gimple_call_fn (stmt); + tree fn = gimple_call_fn (call_stmt); if (fn && flag_devirtualize && virtual_method_call_p (fn)) @@ -4339,7 +4339,7 @@ eliminate_dom_walker::before_dom_children (basic_block b) "function %s\n", cgraph_node::get (fn)->name ()); } - gimple_call_set_fndecl (stmt, fn); + gimple_call_set_fndecl (call_stmt, fn); gimple_set_modified (stmt, true); } } -- 1.8.5.3