diff options
author | Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> | 2010-07-08 09:29:43 +0000 |
---|---|---|
committer | Ramana Radhakrishnan <ramana@gcc.gnu.org> | 2010-07-08 09:29:43 +0000 |
commit | 2e1ec94ff0b0a954d540332b400d5376498ee7f7 (patch) | |
tree | 01b97f48f60b6b26a33e36c02e9c0c36908cc106 /gcc | |
parent | a03a9774c1c1ec8e9eac9c0f06cd52868d9fc452 (diff) | |
download | gcc-2e1ec94ff0b0a954d540332b400d5376498ee7f7.zip gcc-2e1ec94ff0b0a954d540332b400d5376498ee7f7.tar.gz gcc-2e1ec94ff0b0a954d540332b400d5376498ee7f7.tar.bz2 |
Fix PR44768
From-SVN: r161947
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 12 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 2 | ||||
-rw-r--r-- | gcc/tree-inline.h | 2 |
4 files changed, 19 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 54f0f1d..21ac382 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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): diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 5b0596e..b39d4db 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -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; } diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 08f2ac3..201e04a 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -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; diff --git a/gcc/tree-inline.h b/gcc/tree-inline.h index 7f62ffc..a8a33aa 100644 --- a/gcc/tree-inline.h +++ b/gcc/tree-inline.h @@ -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 */ |