diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2011-02-15 18:36:44 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2011-02-15 18:36:44 +0000 |
commit | 30925d946aa6b2bf93cc9f090ca517f3622df1ff (patch) | |
tree | 9313ad3b545e7a4daed208b127cfbe5ded452723 /gcc | |
parent | 1b9a784a8988c08979949b85fcf9746574a72ae0 (diff) | |
download | gcc-30925d946aa6b2bf93cc9f090ca517f3622df1ff.zip gcc-30925d946aa6b2bf93cc9f090ca517f3622df1ff.tar.gz gcc-30925d946aa6b2bf93cc9f090ca517f3622df1ff.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 21 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 5 | ||||
-rw-r--r-- | gcc/tree-inline.h | 2 |
4 files changed, 23 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3eea0bc..eae0e16 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,6 +2,15 @@ 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 + PR debug/47402 * tree-flow.h (FOR_EACH_REFERENCED_VAR): Add FN argument. Adjust all users. Pass FN to... * tree-flow-inline.h (first_referenced_var): ... this. Add diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 6fdb10d..4772fea 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 d611d11..595d476 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 738a866..66cc334 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 */ |