aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2011-02-15 18:36:44 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2011-02-15 18:36:44 +0000
commit30925d946aa6b2bf93cc9f090ca517f3622df1ff (patch)
tree9313ad3b545e7a4daed208b127cfbe5ded452723 /gcc
parent1b9a784a8988c08979949b85fcf9746574a72ae0 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/cfgexpand.c21
-rw-r--r--gcc/ipa-inline.c5
-rw-r--r--gcc/tree-inline.h2
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 */