From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1851) id 681653858400; Thu, 26 Aug 2021 07:51:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 681653858400 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Martin Liska To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-3156] Use non-numbered clones for target_clones. X-Act-Checkin: gcc X-Git-Author: Martin Liska X-Git-Refname: refs/heads/master X-Git-Oldrev: d4b782985b4adb86ebcccff697366136321d45b2 X-Git-Newrev: bfc9250e0de5d5de8a93785ec20e04466ad720f6 Message-Id: <20210826075143.681653858400@sourceware.org> Date: Thu, 26 Aug 2021 07:51:43 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Aug 2021 07:51:43 -0000 https://gcc.gnu.org/g:bfc9250e0de5d5de8a93785ec20e04466ad720f6 commit r12-3156-gbfc9250e0de5d5de8a93785ec20e04466ad720f6 Author: Martin Liska Date: Fri Aug 20 16:35:18 2021 +0200 Use non-numbered clones for target_clones. gcc/ChangeLog: * cgraph.h (create_version_clone_with_body): Add new parameter. * cgraphclones.c: Likewise. * multiple_target.c (create_dispatcher_calls): Do not use numbered suffixes. (create_target_clone): Likewise here. gcc/testsuite/ChangeLog: * gcc.target/i386/mvc5.c: Scan assembly names. * gcc.target/i386/mvc7.c: Likewise. * gcc.target/i386/pr95778-1.c: Update scanned patterns. * gcc.target/i386/pr95778-2.c: Likewise. Co-Authored-By: Stefan Kneifel Diff: --- gcc/cgraph.h | 5 ++++- gcc/cgraphclones.c | 11 ++++++++--- gcc/multiple_target.c | 16 +++++++--------- gcc/testsuite/gcc.target/i386/mvc5.c | 4 ++++ gcc/testsuite/gcc.target/i386/mvc7.c | 8 ++++++-- gcc/testsuite/gcc.target/i386/pr95778-1.c | 4 ++-- gcc/testsuite/gcc.target/i386/pr95778-2.c | 4 ++-- 7 files changed, 33 insertions(+), 19 deletions(-) diff --git a/gcc/cgraph.h b/gcc/cgraph.h index d54a258c2ee..4cdb3738b4d 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -1006,13 +1006,16 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node that will promote value of the attribute DECL_FUNCTION_SPECIFIC_TARGET of the declaration. + If VERSION_DECL is set true, use clone_function_name_numbered for the + function clone. Otherwise, use clone_function_name. + Return the new version's cgraph node. */ cgraph_node *create_version_clone_with_body (vec redirect_callers, vec *tree_map, ipa_param_adjustments *param_adjustments, bitmap bbs_to_copy, basic_block new_entry_block, const char *clone_name, - tree target_attributes = NULL_TREE); + tree target_attributes = NULL_TREE, bool version_decl = true); /* Insert a new cgraph_function_version_info node into cgraph_fnver_htab corresponding to cgraph_node. */ diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c index b16e68194e1..ae91dccd31d 100644 --- a/gcc/cgraphclones.c +++ b/gcc/cgraphclones.c @@ -987,6 +987,9 @@ cgraph_node::create_version_clone (tree new_decl, that will promote value of the attribute DECL_FUNCTION_SPECIFIC_TARGET of the declaration. + If VERSION_DECL is set true, use clone_function_name_numbered for the + function clone. Otherwise, use clone_function_name. + Return the new version's cgraph node. */ cgraph_node * @@ -995,7 +998,7 @@ cgraph_node::create_version_clone_with_body vec *tree_map, ipa_param_adjustments *param_adjustments, bitmap bbs_to_copy, basic_block new_entry_block, const char *suffix, - tree target_attributes) + tree target_attributes, bool version_decl) { tree old_decl = decl; cgraph_node *new_version_node = NULL; @@ -1016,8 +1019,10 @@ cgraph_node::create_version_clone_with_body new_decl = copy_node (old_decl); /* Generate a new name for the new version. */ - DECL_NAME (new_decl) = clone_function_name_numbered (old_decl, suffix); - SET_DECL_ASSEMBLER_NAME (new_decl, DECL_NAME (new_decl)); + tree fnname = (version_decl ? clone_function_name_numbered (old_decl, suffix) + : clone_function_name (old_decl, suffix)); + DECL_NAME (new_decl) = fnname; + SET_DECL_ASSEMBLER_NAME (new_decl, fnname); SET_DECL_RTL (new_decl, NULL); DECL_VIRTUAL_P (new_decl) = 0; diff --git a/gcc/multiple_target.c b/gcc/multiple_target.c index 6c0565880c5..28d5f95dca5 100644 --- a/gcc/multiple_target.c +++ b/gcc/multiple_target.c @@ -166,9 +166,8 @@ create_dispatcher_calls (struct cgraph_node *node) } } - symtab->change_decl_assembler_name (node->decl, - clone_function_name_numbered ( - node->decl, "default")); + tree fname = clone_function_name (node->decl, "default"); + symtab->change_decl_assembler_name (node->decl, fname); if (node->definition) { @@ -309,9 +308,9 @@ create_target_clone (cgraph_node *node, bool definition, char *name, if (definition) { - new_node = node->create_version_clone_with_body (vNULL, NULL, - NULL, NULL, - NULL, name, attributes); + new_node + = node->create_version_clone_with_body (vNULL, NULL, NULL, NULL, NULL, + name, attributes, false); if (new_node == NULL) return NULL; new_node->force_output = true; @@ -322,9 +321,8 @@ create_target_clone (cgraph_node *node, bool definition, char *name, new_node = cgraph_node::get_create (new_decl); DECL_ATTRIBUTES (new_decl) = attributes; /* Generate a new name for the new version. */ - symtab->change_decl_assembler_name (new_node->decl, - clone_function_name_numbered ( - node->decl, name)); + tree fname = clone_function_name (node->decl, name); + symtab->change_decl_assembler_name (new_node->decl, fname); } return new_node; } diff --git a/gcc/testsuite/gcc.target/i386/mvc5.c b/gcc/testsuite/gcc.target/i386/mvc5.c index 677f79f3fd0..0e02bf661ae 100644 --- a/gcc/testsuite/gcc.target/i386/mvc5.c +++ b/gcc/testsuite/gcc.target/i386/mvc5.c @@ -3,6 +3,10 @@ /* { dg-options "-fno-inline" } */ /* { dg-final { scan-assembler "foo,foo.resolver" } } */ +/* Verify that foo clones are not numbered. */ +/* { dg-final { scan-assembler "foo.default:" } } */ +/* { dg-final { scan-assembler "foo.avx:" } } */ + __attribute__((target_clones("default","avx","avx2"))) int foo () diff --git a/gcc/testsuite/gcc.target/i386/mvc7.c b/gcc/testsuite/gcc.target/i386/mvc7.c index a3697ba9b75..7fb9dded849 100644 --- a/gcc/testsuite/gcc.target/i386/mvc7.c +++ b/gcc/testsuite/gcc.target/i386/mvc7.c @@ -1,7 +1,11 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ -/* { dg-final { scan-assembler "foo.resolver" } } */ -/* { dg-final { scan-assembler "avx" } } */ + +/* Verify that foo clones are not numbered. */ +/* { dg-final { scan-assembler "foo.resolver," } } */ +/* { dg-final { scan-assembler "foo.default," } } */ +/* { dg-final { scan-assembler "foo.avx," } } */ + /* { dg-final { scan-assembler "slm" } } */ /* { dg-final { scan-assembler "foo,foo.resolver" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr95778-1.c b/gcc/testsuite/gcc.target/i386/pr95778-1.c index 3238303d696..18f83832117 100644 --- a/gcc/testsuite/gcc.target/i386/pr95778-1.c +++ b/gcc/testsuite/gcc.target/i386/pr95778-1.c @@ -17,5 +17,5 @@ g2(int *p) return f2(p); } -/* { dg-final { scan-assembler "g2.default.1:\n\tjmp\tf2.default.1\n" } } */ -/* { dg-final { scan-assembler "g2.avx2.0:\n\tjmp\tf2.avx2.0\n" } } */ +/* { dg-final { scan-assembler "g2.default:\n\tjmp\tf2.default\n" } } */ +/* { dg-final { scan-assembler "g2.avx2:\n\tjmp\tf2.avx2\n" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr95778-2.c b/gcc/testsuite/gcc.target/i386/pr95778-2.c index e88702d2b82..9ef513aab30 100644 --- a/gcc/testsuite/gcc.target/i386/pr95778-2.c +++ b/gcc/testsuite/gcc.target/i386/pr95778-2.c @@ -17,5 +17,5 @@ g2(int *p) return f2(p); } -/* { dg-final { scan-assembler "g2.default.1:\n\tjmp\tf2.default.1\n" } } */ -/* { dg-final { scan-assembler "g2.avx2.0:\n\tjmp\tf2.avx2.0\n" } } */ +/* { dg-final { scan-assembler "g2.default:\n\tjmp\tf2.default\n" } } */ +/* { dg-final { scan-assembler "g2.avx2:\n\tjmp\tf2.avx2\n" } } */