Fix PR44768

From-SVN: r161947
This commit is contained in:
Ramana Radhakrishnan 2010-07-08 09:29:43 +00:00 committed by Ramana Radhakrishnan
parent a03a9774c1
commit 2e1ec94ff0
4 changed files with 19 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2010-07-08 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR bootstrap/44768
* cfgexpand.c (estimated_stack_frame_size): Make self-contained
with respect to current_function_decl. Pass decl of the function.
* tree-inline.h (estimated_stack_frame_size): Adjust prototype.
* ipa-inline.c (compute_inline_parameters): Pass decl to
estimated_stack_frame_size.
2010-07-08 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address):

View File

@ -1252,8 +1252,8 @@ fini_vars_expansion (void)
stack_vars_alloc = stack_vars_num = 0;
}
/* Make a fair guess for the size of the stack frame of the current
function. This doesn't have to be exact, the result is only used
/* 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.
@ -1261,12 +1261,15 @@ fini_vars_expansion (void)
vars doesn't happen very often. */
HOST_WIDE_INT
estimated_stack_frame_size (void)
estimated_stack_frame_size (tree decl)
{
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));
init_vars_expansion ();
@ -1287,7 +1290,8 @@ estimated_stack_frame_size (void)
size += account_stack_vars ();
fini_vars_expansion ();
}
pop_cfun ();
current_function_decl = old_cur_fun_decl;
return size;
}

View File

@ -2019,7 +2019,7 @@ compute_inline_parameters (struct cgraph_node *node)
/* 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 () : 0;
self_stack_size = optimize ? estimated_stack_frame_size (node->decl) : 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;

View File

@ -185,6 +185,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 (void);
extern HOST_WIDE_INT estimated_stack_frame_size (tree);
#endif /* GCC_TREE_INLINE_H */