diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-01-11 18:47:28 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2012-01-11 18:47:28 +0000 |
commit | 6cb0aa12bd0f0e6633a373b85fd7c4cd46a8deef (patch) | |
tree | f3e48a68df89c7419d086f7a678f0af82c975f18 /gcc/cgraphunit.c | |
parent | d08a556efcaca54614dbf8419365fdb0d780ee5e (diff) |
* tree.h (build_function_decl_skip_args): Add boolean parameter.
(build_function_type_skip_args): Delete.
* tree.c (build_function_type_skip_args): Make static and add
SKIP_RETURN parameter. Fix thinko in the handling of variants.
(build_function_decl_skip_args): Add SKIP_RETURN parameter and
pass it to build_function_type_skip_args.
* cgraph.h (cgraph_function_versioning): Add boolean parameter.
(tree_function_versioning): Likewise.
* cgraph.c (cgraph_create_virtual_clone): Adjust call to
build_function_decl_skip_args.
* cgraphunit.c (cgraph_function_versioning): Add SKIP_RETURN parameter
and pass it to build_function_decl_skip_args/tree_function_versioning.
(cgraph_materialize_clone): Adjust call to tree_function_versioning.
* ipa-inline-transform.c (save_inline_function_body): Likewise.
* trans-mem.c (ipa_tm_create_version): Likewise.
* tree-sra.c (modify_function): Ditto for cgraph_function_versioning.
* tree-inline.c (declare_return_variable): Remove always-true test.
(tree_function_versioning): Add SKIP_RETURN parameter. If the function
returns non-void and SKIP_RETURN, create a void-typed RESULT_DECL.
* ipa-split.c (split_function): Skip the return value for the split
part if it doesn't return.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@183102 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r-- | gcc/cgraphunit.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 2c9c8ddca5a..6ea40ce4e52 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -2333,17 +2333,21 @@ cgraph_copy_node_for_versioning (struct cgraph_node *old_version, TREE_MAP is a mapping of tree nodes we want to replace with new ones (according to results of prior analysis). OLD_VERSION_NODE is the node that is versioned. - It returns the new version's cgraph node. + If non-NULL ARGS_TO_SKIP determine function parameters to remove from new version. + If SKIP_RETURN is true, the new version will return void. If non-NULL BLOCK_TO_COPY determine what basic blocks to copy. - If non_NULL NEW_ENTRY determine new entry BB of the clone. */ + If non_NULL NEW_ENTRY determine new entry BB of the clone. + + Return the new version's cgraph node. */ struct cgraph_node * cgraph_function_versioning (struct cgraph_node *old_version_node, VEC(cgraph_edge_p,heap) *redirect_callers, VEC (ipa_replace_map_p,gc)* tree_map, bitmap args_to_skip, + bool skip_return, bitmap bbs_to_copy, basic_block new_entry_block, const char *clone_name) @@ -2357,12 +2361,12 @@ cgraph_function_versioning (struct cgraph_node *old_version_node, gcc_assert (old_version_node->local.can_change_signature || !args_to_skip); - /* Make a new FUNCTION_DECL tree node for the - new version. */ - if (!args_to_skip) + /* Make a new FUNCTION_DECL tree node for the new version. */ + if (!args_to_skip && !skip_return) new_decl = copy_node (old_decl); else - new_decl = build_function_decl_skip_args (old_decl, args_to_skip); + new_decl + = build_function_decl_skip_args (old_decl, args_to_skip, skip_return); /* Generate a new name for the new version. */ DECL_NAME (new_decl) = clone_function_name (old_decl, clone_name); @@ -2381,7 +2385,7 @@ cgraph_function_versioning (struct cgraph_node *old_version_node, /* Copy the OLD_VERSION_NODE function tree to the new version. */ tree_function_versioning (old_decl, new_decl, tree_map, false, args_to_skip, - bbs_to_copy, new_entry_block); + skip_return, bbs_to_copy, new_entry_block); /* Update the new version's properties. Make The new version visible only within this translation unit. Make sure @@ -2412,7 +2416,8 @@ cgraph_materialize_clone (struct cgraph_node *node) /* Copy the OLD_VERSION_NODE function tree to the new version. */ tree_function_versioning (node->clone_of->decl, node->decl, node->clone.tree_map, true, - node->clone.args_to_skip, NULL, NULL); + node->clone.args_to_skip, false, + NULL, NULL); if (cgraph_dump_file) { dump_function_to_file (node->clone_of->decl, cgraph_dump_file, dump_flags); |