diff options
author | Jan Hubicka <jh@suse.cz> | 2006-07-24 13:23:21 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2006-07-24 11:23:21 +0000 |
commit | f10d1a747d57ce28acd2b83ce96c154af5e9a286 (patch) | |
tree | 67841a1143efb4b21f31e1e00e5a0a141b7f1b91 /gcc/ipa-inline.c | |
parent | 701ed479bf6e22040bd41d1046499771e857a17f (diff) | |
download | gcc-f10d1a747d57ce28acd2b83ce96c154af5e9a286.zip gcc-f10d1a747d57ce28acd2b83ce96c154af5e9a286.tar.gz gcc-f10d1a747d57ce28acd2b83ce96c154af5e9a286.tar.bz2 |
re PR middle-end/28071 (A file that can not be compiled in reasonable time/space)
PR rtl-optimization/28071
* ipa-inline.c (update_caller_keys): Remove edges that
are no longer inline candidates.
From-SVN: r115712
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 0ffbd12..d2cdce2 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -413,6 +413,7 @@ update_caller_keys (fibheap_t heap, struct cgraph_node *node, bitmap updated_nodes) { struct cgraph_edge *edge; + const char *failed_reason; if (!node->local.inlinable || node->local.disregard_inline_limits || node->global.inlined_to) @@ -422,6 +423,22 @@ update_caller_keys (fibheap_t heap, struct cgraph_node *node, bitmap_set_bit (updated_nodes, node->uid); node->global.estimated_growth = INT_MIN; + if (!node->local.inlinable) + return; + /* Prune out edges we won't inline into anymore. */ + if (!cgraph_default_inline_p (node, &failed_reason)) + { + for (edge = node->callers; edge; edge = edge->next_caller) + if (edge->aux) + { + fibheap_delete_node (heap, edge->aux); + edge->aux = NULL; + if (edge->inline_failed) + edge->inline_failed = failed_reason; + } + return; + } + for (edge = node->callers; edge; edge = edge->next_caller) if (edge->inline_failed) { |