From 30925d946aa6b2bf93cc9f090ca517f3622df1ff Mon Sep 17 00:00:00 2001 From: Alexandre Oliva <aoliva@redhat.com> Date: Tue, 15 Feb 2011 18:36:44 +0000 Subject: [PATCH] re PR debug/47106 (-fcompare-debug failure (length) with -fpartial-inlining -flto -fconserve-stack) PR debug/47106 PR debug/47402 * tree-inline.h (estimated_stack_frame_size): Take cgraph node rather than decl. * cfgexpand.c (estimated_stack_frame_size): Likewise. * ipa-inline.c (compute_inline_parameters): Adjust. From-SVN: r170187 --- gcc/ChangeLog | 9 +++++++++ gcc/cfgexpand.c | 21 +++++++++++---------- gcc/ipa-inline.c | 5 ++--- gcc/tree-inline.h | 2 +- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3eea0bcd9d6a..eae0e16c1bd4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-02-15 Alexandre Oliva <aoliva@redhat.com> + + PR debug/47106 + PR debug/47402 + * tree-inline.h (estimated_stack_frame_size): Take cgraph node + rather than decl. + * cfgexpand.c (estimated_stack_frame_size): Likewise. + * ipa-inline.c (compute_inline_parameters): Adjust. + 2011-02-15 Alexandre Oliva <aoliva@redhat.com> PR debug/47106 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 6fdb10d2507b..4772fea1ebb5 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1366,24 +1366,25 @@ fini_vars_expansion (void) stack_vars_alloc = stack_vars_num = 0; } -/* Make a fair guess for the size of the stack frame of the decl - passed. This doesn't have to be exact, the result is only used - in the inline heuristics. So we don't want to run the full stack - var packing algorithm (which is quadratic in the number of stack - vars). Instead, we calculate the total size of all stack vars. - This turns out to be a pretty fair estimate -- packing of stack - vars doesn't happen very often. */ +/* Make a fair guess for the size of the stack frame of the function + in NODE. This doesn't have to be exact, the result is only used in + the inline heuristics. So we don't want to run the full stack var + packing algorithm (which is quadratic in the number of stack vars). + Instead, we calculate the total size of all stack vars. This turns + out to be a pretty fair estimate -- packing of stack vars doesn't + happen very often. */ HOST_WIDE_INT -estimated_stack_frame_size (tree decl) +estimated_stack_frame_size (struct cgraph_node *node) { HOST_WIDE_INT size = 0; size_t i; tree var, outer_block = DECL_INITIAL (current_function_decl); unsigned ix; tree old_cur_fun_decl = current_function_decl; - current_function_decl = decl; - push_cfun (DECL_STRUCT_FUNCTION (decl)); + + current_function_decl = node->decl; + push_cfun (DECL_STRUCT_FUNCTION (node->decl)); init_vars_expansion (); diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index d611d11fe20f..595d4765da63 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -1982,9 +1982,8 @@ compute_inline_parameters (struct cgraph_node *node) gcc_assert (!node->global.inlined_to); - /* Estimate the stack size for the function. But not at -O0 - because estimated_stack_frame_size is a quadratic problem. */ - self_stack_size = optimize ? estimated_stack_frame_size (node->decl) : 0; + /* Estimate the stack size for the function if we're optimizing. */ + self_stack_size = optimize ? estimated_stack_frame_size (node) : 0; inline_summary (node)->estimated_self_stack_size = self_stack_size; node->global.estimated_stack_size = self_stack_size; node->global.stack_frame_offset = 0; diff --git a/gcc/tree-inline.h b/gcc/tree-inline.h index 738a8667a35a..66cc33484107 100644 --- a/gcc/tree-inline.h +++ b/gcc/tree-inline.h @@ -188,6 +188,6 @@ extern tree remap_decl (tree decl, copy_body_data *id); extern tree remap_type (tree type, copy_body_data *id); extern gimple_seq copy_gimple_seq_and_replace_locals (gimple_seq seq); -extern HOST_WIDE_INT estimated_stack_frame_size (tree); +extern HOST_WIDE_INT estimated_stack_frame_size (struct cgraph_node *); #endif /* GCC_TREE_INLINE_H */ -- GitLab