Line
Link Here
|
0 |
-- a/gcc/ipa-prop.c |
0 |
++ b/gcc/ipa-prop.c |
Lines 3787-3797
update_indirect_edges_after_inlining (struct cgraph_edge *cs,
Link Here
|
3787 |
|
3787 |
|
3788 |
param_index = ici->param_index; |
3788 |
param_index = ici->param_index; |
3789 |
jfunc = ipa_get_ith_jump_func (top, param_index); |
3789 |
jfunc = ipa_get_ith_jump_func (top, param_index); |
3790 |
cgraph_node *spec_target = NULL; |
|
|
3791 |
|
3790 |
|
3792 |
/* FIXME: This may need updating for multiple calls. */ |
3791 |
auto_vec<cgraph_node *, 4> spec_targets; |
3793 |
if (ie->speculative) |
3792 |
for (cgraph_edge *direct = ie->first_speculative_call_target (); |
3794 |
spec_target = ie->first_speculative_call_target ()->callee; |
3793 |
direct; |
|
|
3794 |
direct = direct->next_speculative_call_target ()) |
3795 |
spec_targets.safe_push (direct->callee); |
3795 |
|
3796 |
|
3796 |
if (!opt_for_fn (node->decl, flag_indirect_inlining)) |
3797 |
if (!opt_for_fn (node->decl, flag_indirect_inlining)) |
3797 |
new_direct_edge = NULL; |
3798 |
new_direct_edge = NULL; |
Lines 3814-3820
update_indirect_edges_after_inlining (struct cgraph_edge *cs,
Link Here
|
3814 |
|
3815 |
|
3815 |
/* If speculation was removed, then we need to do nothing. */ |
3816 |
/* If speculation was removed, then we need to do nothing. */ |
3816 |
if (new_direct_edge && new_direct_edge != ie |
3817 |
if (new_direct_edge && new_direct_edge != ie |
3817 |
&& new_direct_edge->callee == spec_target) |
3818 |
&& spec_targets.contains (new_direct_edge->callee)) |
3818 |
{ |
3819 |
{ |
3819 |
new_direct_edge->indirect_inlining_edge = 1; |
3820 |
new_direct_edge->indirect_inlining_edge = 1; |
3820 |
top = IPA_EDGE_REF (cs); |
3821 |
top = IPA_EDGE_REF (cs); |