diff options
author | Martin Jambor <mjambor@suse.cz> | 2013-09-05 14:41:16 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2013-09-05 14:41:16 +0200 |
commit | 568cda29c5a4ffb086d8308745ae8b86427dab61 (patch) | |
tree | 90881c22dd3aedd23f522f30c644b2f07bc9ddb2 /gcc/cgraph.c | |
parent | 5a200acb0519af47612f0e92c86c07ec69a6ae81 (diff) | |
download | gcc-568cda29c5a4ffb086d8308745ae8b86427dab61.zip gcc-568cda29c5a4ffb086d8308745ae8b86427dab61.tar.gz gcc-568cda29c5a4ffb086d8308745ae8b86427dab61.tar.bz2 |
ipa-prop.c (remove_described_reference): Accept missing references, return false if that hppens, otherwise return true.
2013-09-05 Martin Jambor <mjambor@suse.cz>
* ipa-prop.c (remove_described_reference): Accept missing references,
return false if that hppens, otherwise return true.
(cgraph_node_for_jfunc): New function.
(try_decrement_rdesc_refcount): Likewise.
(try_make_edge_direct_simple_call): Use them.
(ipa_edge_removal_hook): Remove references from rdescs.
(ipa_edge_duplication_hook): Clone rdescs and their references
when the new edge has the same caller as the old one.
* cgraph.c (cgraph_resolve_speculation): Remove speculative
reference before removing any edges.
testsuite/
* g++.dg/ipa/remref-1.C: New test.
* g++.dg/ipa/remref-2.C: Likewise.
From-SVN: r202281
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 5fc87ae..f12bf1b 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1225,13 +1225,13 @@ cgraph_resolve_speculation (struct cgraph_edge *edge, tree callee_decl) edge->frequency = CGRAPH_FREQ_MAX; edge->speculative = false; e2->speculative = false; + ipa_remove_reference (ref); if (e2->indirect_unknown_callee || e2->inline_failed) cgraph_remove_edge (e2); else cgraph_remove_node_and_inline_clones (e2->callee, NULL); if (edge->caller->call_site_hash) cgraph_update_edge_in_call_site_hash (edge); - ipa_remove_reference (ref); return edge; } |