Ping for rtl, middle-end, or global reviewers.
r~
On 10/2/18 5:19 PM, Richard Henderson wrote:
> * optabs-libfuncs.c (build_libfunc_function_visibility):
> New, split out from...
> (build_libfunc_function): ... here.
> (init_one_libfunc_visibility): New, split out from ...
> (init_one_libfunc): ... here.
> ---
> gcc/optabs-libfuncs.h | 2 ++
> gcc/optabs-libfuncs.c | 26 ++++++++++++++++++++------
> 2 files changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/optabs-libfuncs.h b/gcc/optabs-libfuncs.h
> index 0669ea1fdd7..cf39da36887 100644
> --- a/gcc/optabs-libfuncs.h
> +++ b/gcc/optabs-libfuncs.h
> @@ -63,7 +63,9 @@ void gen_satfract_conv_libfunc (convert_optab, const char *,
> void gen_satfractuns_conv_libfunc (convert_optab, const char *,
> machine_mode, machine_mode);
>
> +tree build_libfunc_function_visibility (const char *, symbol_visibility);
> tree build_libfunc_function (const char *);
> +rtx init_one_libfunc_visibility (const char *, symbol_visibility);
> rtx init_one_libfunc (const char *);
> rtx set_user_assembler_libfunc (const char *, const char *);
>
> diff --git a/gcc/optabs-libfuncs.c b/gcc/optabs-libfuncs.c
> index bd0df8baa37..73a28e9ca7a 100644
> --- a/gcc/optabs-libfuncs.c
> +++ b/gcc/optabs-libfuncs.c
> @@ -719,10 +719,10 @@ struct libfunc_decl_hasher : ggc_ptr_hash<tree_node>
> /* A table of previously-created libfuncs, hashed by name. */
> static GTY (()) hash_table<libfunc_decl_hasher> *libfunc_decls;
>
> -/* Build a decl for a libfunc named NAME. */
> +/* Build a decl for a libfunc named NAME with visibility VIS. */
>
> tree
> -build_libfunc_function (const char *name)
> +build_libfunc_function_visibility (const char *name, symbol_visibility vis)
> {
> /* ??? We don't have any type information; pretend this is "int foo ()".
> */
> tree decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
> @@ -731,7 +731,7 @@ build_libfunc_function (const char *name)
> DECL_EXTERNAL (decl) = 1;
> TREE_PUBLIC (decl) = 1;
> DECL_ARTIFICIAL (decl) = 1;
> - DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
> + DECL_VISIBILITY (decl) = vis;
> DECL_VISIBILITY_SPECIFIED (decl) = 1;
> gcc_assert (DECL_ASSEMBLER_NAME (decl));
>
> @@ -742,11 +742,19 @@ build_libfunc_function (const char *name)
> return decl;
> }
>
> +/* Build a decl for a libfunc named NAME. */
> +
> +tree
> +build_libfunc_function (const char *name)
> +{
> + return build_libfunc_function_visibility (name, VISIBILITY_DEFAULT);
> +}
> +
> /* Return a libfunc for NAME, creating one if we don't already have one.
> - The returned rtx is a SYMBOL_REF. */
> + The decl is given visibility VIS. The returned rtx is a SYMBOL_REF. */
>
> rtx
> -init_one_libfunc (const char *name)
> +init_one_libfunc_visibility (const char *name, symbol_visibility vis)
> {
> tree id, decl;
> hashval_t hash;
> @@ -763,12 +771,18 @@ init_one_libfunc (const char *name)
> {
> /* Create a new decl, so that it can be passed to
> targetm.encode_section_info. */
> - decl = build_libfunc_function (name);
> + decl = build_libfunc_function_visibility (name, vis);
> *slot = decl;
> }
> return XEXP (DECL_RTL (decl), 0);
> }
>
> +rtx
> +init_one_libfunc (const char *name)
> +{
> + return init_one_libfunc_visibility (name, VISIBILITY_DEFAULT);
> +}
> +
> /* Adjust the assembler name of libfunc NAME to ASMSPEC. */
>
> rtx
>