aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-inline.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2006-07-24 13:23:21 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2006-07-24 11:23:21 +0000
commitf10d1a747d57ce28acd2b83ce96c154af5e9a286 (patch)
tree67841a1143efb4b21f31e1e00e5a0a141b7f1b91 /gcc/ipa-inline.c
parent701ed479bf6e22040bd41d1046499771e857a17f (diff)
downloadgcc-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.c17
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)
{