Andrew Carlotti <andrew.carlo...@arm.com> writes:
> It would be neater if the middle end for target_clones used a target
> hook for version name mangling, so we only do version name mangling
> once.  However, that would require more intrusive refactoring that will
> have to wait till Stage 1.
>
>
> This patch builds upon the testsuite additions in patch 1/5 of the
> previous series. I could commit just the aarch64 tests for now if that's
> preferred. Is this version of the fix ok for master?
>
> gcc/ChangeLog:
>
>       * config/aarch64/aarch64.cc
>       (get_suffixed_assembler_name): New.
>       (make_resolver_func): Use get_suffixed_assembler_name.
>       (aarch64_mangle_decl_assembler_name): Add ".default" suffix.
>       (aarch64_generate_version_dispatcher_body): Redo name mangling.
>
> gcc/testsuite/ChangeLog:
>
>       * g++.target/aarch64/mv-symbols1.C: Update for mangling fixes.
>       * g++.target/aarch64/mv-symbols2.C: Ditto.
>       * g++.target/aarch64/mv-symbols3.C: Ditto.
>       * g++.target/aarch64/mv-symbols4.C: Ditto.
>       * g++.target/aarch64/mv-symbols5.C: Ditto.
>       * g++.target/aarch64/mvc-symbols1.C: Ditto.
>       * g++.target/aarch64/mvc-symbols2.C: Ditto.
>       * g++.target/aarch64/mvc-symbols3.C: Ditto.
>       * g++.target/aarch64/mvc-symbols4.C: Ditto.

I found this a bit difficult to review (not your fault).  In the
abstract, it seems a bit dangerous to change the names of the clones
while emitting the dispatcher.  But I agree that it looks like it
should work in practice, and that it's probably the least invasive
fix for GCC 14.  The dispatcher is created by the same IPA pass
that creates the clones, so there should be little risk of the
old assembler name's being used before it's changed.  And
symbol_table::change_decl_assembler_name does have some code
to detect when a name is changed after use, in case things are
restructured later.

So this patch and the aarch64 parts of 1/5 are OK from my POV
with some trivial changes below.

> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 
> 7d1f8c65ce41044d6850262300cf08a23d606617..bf698a2c3bb105375a2be37ca032397161bf4334
>  100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -19832,6 +19832,21 @@ build_ifunc_arg_type ()
>    return pointer_type;
>  }
>  
> +/* Return an identifier for the base assembler name of a versioned function.
> +   This is computed by taking the default version's assembler name, and
> +   stripping off the ".default" suffix if it's already been appended.  */
> +
> +tree get_suffixed_assembler_name (tree default_decl, const char *suffix)

Probably best to make this static, given that it isn't in the aarch64_
"namespace".

Formatting nit, but: there should be a new line before the function name.

> +{
> +  std::string name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (default_decl));
> +
> +  auto size = name.size ();
> +  if (size >= 8 && name.compare (size - 8, 8, ".default") == 0)
> +    name.resize (size - 8);
> +  name += suffix;
> +  return get_identifier (name.c_str());
> +}
> +
>  /* Make the resolver function decl to dispatch the versions of
>     a multi-versioned function,  DEFAULT_DECL.  IFUNC_ALIAS_DECL is
>     ifunc alias that will point to the created resolver.  Create an
> @@ -19845,8 +19860,9 @@ make_resolver_func (const tree default_decl,
>  {
>    tree decl, type, t;
>  
> -  /* Create resolver function name based on default_decl.  */
> -  tree decl_name = clone_function_name (default_decl, "resolver");
> +  /* Create resolver function name based on default_decl.  We need to remove 
> an
> +     existing ".default" suffix if this has already been appended.  */
> +  tree decl_name = get_suffixed_assembler_name (default_decl, ".resolver");
>    const char *resolver_name = IDENTIFIER_POINTER (decl_name);
>  
>    /* The resolver function should have signature
> @@ -20137,6 +20153,8 @@ dispatch_function_versions (tree dispatch_decl,
>    return 0;
>  }
>  
> +tree aarch64_mangle_decl_assembler_name (tree, tree);
> +

Please reorder the functions instead of adding the forward declaration.
It'll create a bit of git churn, but that's OK.

>  /* Implement TARGET_GENERATE_VERSION_DISPATCHER_BODY.  */
>  
>  tree
> @@ -20193,6 +20211,28 @@ aarch64_generate_version_dispatcher_body (void 
> *node_p)
>    dispatch_function_versions (resolver_decl, &fn_ver_vec, &empty_bb);
>    cgraph_edge::rebuild_edges ();
>    pop_cfun ();
> +
> +  /* Fix up symbol names.  First we need to obtain the base name, which may
> +     have already been mangled.  */
> +  tree base_name = get_suffixed_assembler_name (default_ver_decl, "");
> +
> +  /* We need to redo the version mangling on the non-default versions for the
> +     target_clones case.  Redoing the mangling for the target_version case is
> +     redundant but does no harm.  We need to skip the default version, 
> because
> +     expand_clones will append ".default" later; fortunately that suffix is 
> the
> +     one we want anyway.  */
> +  for (versn_info = node_version_info->next->next; versn_info;
> +       versn_info = versn_info->next)
> +    {
> +      tree version_decl = versn_info->this_node->decl;
> +      tree name = aarch64_mangle_decl_assembler_name (version_decl,
> +                                                   base_name);
> +      symtab->change_decl_assembler_name (version_decl, name);
> +    }
> +
> +  /* We also need to use the base name for the ifunc declaration.  */
> +  symtab->change_decl_assembler_name (node->decl, base_name);
> +
>    return resolver_decl;
>  }
>  
> @@ -20317,11 +20357,15 @@ aarch64_mangle_decl_assembler_name (tree decl, tree 
> id)
>      {
>        aarch64_fmv_feature_mask feature_mask = get_feature_mask_for_version 
> (decl);
>  
> -      /* No suffix for the default version.  */
> +      std::string name = IDENTIFIER_POINTER (id);
> +
> +      /* For the default version, append ".default".  */
>        if (feature_mask == 0ULL)
> -     return id;
> +     {
> +       name += ".default";
> +       return get_identifier (name.c_str());
> +     }
>  
> -      std::string name = IDENTIFIER_POINTER (id);
>        name += "._";
>  
>        for (int i = 0; i < FEAT_MAX; i++)
> diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols1.C 
> b/gcc/testsuite/g++.target/aarch64/mv-symbols1.C
> index 
> afbd9cacfc72e89ff4a06e3baae7ccc63ed64fc0..53e0abcd9b4333590a4c1415ec56cf09fb1ce2bf
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mv-symbols1.C
> +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols1.C
> @@ -49,18 +49,18 @@ int bar(int x)
>  /* When updating any of the symbol names in these tests, make sure to also
>     update any tests for their absence in mv-symbolsN.C */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */

I was wondering whether it would also be worth having
scan-assembler-nots such as:

/* { dg-final { scan-assembler-not "\n_Z3foov:\n" } } */

to make extra sure that we don't emit the cloned function as an
ordinary symbol.  But it's your call -- the %gnu_indirect_function
test is probably enough.  The patch is OK either way.

Thanks,
Richard

>  /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\tbl\t_Z7_Z3foovv\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, 
> %gnu_indirect_function\n" 1 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\tbl\t_Z7_Z3fooii\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, 
> %gnu_indirect_function\n" 1 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3fooi\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 1 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols2.C 
> b/gcc/testsuite/g++.target/aarch64/mv-symbols2.C
> index 
> 54d2396f40705b6a6f7839ded78dcfddd911f7dd..f0c7967a97abb31f3cf9430ae9e8bb807beb8485
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mv-symbols2.C
> +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols2.C
> @@ -37,16 +37,16 @@ int foo (int)
>    return 2;
>  }
>  
> -/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, 
> %gnu_indirect_function\n" 0 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 0 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, 
> %gnu_indirect_function\n" 0 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 0 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols3.C 
> b/gcc/testsuite/g++.target/aarch64/mv-symbols3.C
> index 
> 30e78b329851069e061e7ae179bbf78e1a2b4b04..3d30e27deb8b54b838cd8f5f18d5b68e87f4515e
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mv-symbols3.C
> +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols3.C
> @@ -25,17 +25,17 @@ int bar()
>    return foo ();
>  }
>  
> -/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\tbl\t_Z7_Z3foovv\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, 
> %gnu_indirect_function\n" 1 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, 
> %gnu_indirect_function\n" 0 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 0 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols4.C 
> b/gcc/testsuite/g++.target/aarch64/mv-symbols4.C
> index 
> 674f8f88dce6b6b374de1198ed16ebcae9f816ca..73e3279ec314a5e5be3c6f8f1d2b6a520e639d27
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mv-symbols4.C
> +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols4.C
> @@ -32,17 +32,17 @@ int bar()
>    return foo ();
>  }
>  
> -/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\tbl\t_Z7_Z3foovv\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, 
> %gnu_indirect_function\n" 1 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, 
> %gnu_indirect_function\n" 0 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 0 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols5.C 
> b/gcc/testsuite/g++.target/aarch64/mv-symbols5.C
> index 
> 38bc2bdfc21aa9846e574442e1f53dc31a7234aa..05d1379f53ec1b74c29d386c8bd43a81de7ed0e4
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mv-symbols5.C
> +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols5.C
> @@ -40,17 +40,17 @@ int bar()
>  /* When updating any of the symbol names in these tests, make sure to also
>     update any tests for their absence in mvc-symbolsN.C */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\tbl\t_Z7_Z3foovv\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, 
> %gnu_indirect_function\n" 1 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
> -/* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, 
> %gnu_indirect_function\n" 0 } } */
> -/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 0 } } */
> +/* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C 
> b/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C
> index 
> b32e9200e763e8e73316c0d56cf290dadb11b3c8..2dd7c79f16cf7b6ac715c2ad2b35fface2695bed
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C
> +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C
> @@ -28,16 +28,16 @@ int bar(int x)
>     update any tests for their absence in mvc-symbolsN.C */
>  
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.dotprod:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.sve_sve2:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
>  /* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.dotprod:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.sve_sve2:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\tbl\t_Z3fooi\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 1 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C 
> b/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C
> index 
> f57ae25549be709bbf00811f7b78725051a79b9f..75b9c126dd8c337ac983862e3ba736a2c2c9a5ac
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C
> +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C
> @@ -15,15 +15,15 @@ int foo (int)
>  }
>  
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.dotprod:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.sve_sve2:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
>  /* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.dotprod:\n" 1 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.sve_sve2:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 1 } } */
>  /* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C 
> b/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C
> index 
> 86340d05b4ad8ab4c3a0c34aacf31e40f7099336..82e777c8fc6ef5fa45aed431641a928b1960303a
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C
> +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C
> @@ -19,16 +19,16 @@ int bar(int x)
>  }
>  
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.dotprod:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.sve_sve2:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 1 } } */
>  /* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */
>  
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.dotprod:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.sve_sve2:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\tbl\t_Z3fooi\n" 1 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 1 } } */
> diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C 
> b/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C
> index 
> 351545fd201ca80d3d0bb13afdca1d49f211519b..6c86ae61e5fa52d14ed28cebb41d5fd8a7e1552f
>  100644
> --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C
> +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C
> @@ -9,15 +9,15 @@ __attribute__((target_clones("sve+sve2", "dotprod", 
> "default")))
>  int foo (int);
>  
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.dotprod:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3foov\.sve_sve2:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, 
> %gnu_indirect_function\n" 0 } } */
>  /* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */
>  
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.dotprod:\n" 0 } } */
> -/* { dg-final { scan-assembler-times "\n_Z3fooi\.sve_sve2:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */
> +/* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */
>  /* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, 
> %gnu_indirect_function\n" 0 } } */
>  /* { dg-final { scan-assembler-times 
> "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */

Reply via email to