[AArch64,v2,06/11] Add visibility to libfunc constructors

Message ID 20181002161915.18843-7-richard.henderson@linaro.org
State New
Headers show
Series
  • LSE atomics out-of-line
Related show

Commit Message

Richard Henderson Oct. 2, 2018, 4:19 p.m.
* 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(-)

-- 
2.17.1

Comments

James Greenhalgh Oct. 30, 2018, 8:49 p.m. | #1
This one needs some other reviewers copied in, who may have missed that
it is not an AARch64 only patch (it looks fine to me).

James

On Tue, Oct 02, 2018 at 11:19:10AM -0500, 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

> -- 

> 2.17.1

>
Richard Henderson Oct. 31, 2018, 10:32 a.m. | #2
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

>
Eric Botcazou Oct. 31, 2018, 5:32 p.m. | #3
> 	* 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.


Either that or add the parameter with a VISIBILITY_DEFAULT default argument.

-- 
Eric Botcazou
Richard Henderson Oct. 31, 2018, 5:45 p.m. | #4
On 10/31/18 5:32 PM, Eric Botcazou 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.

> 

> Either that or add the parameter with a VISIBILITY_DEFAULT default argument.


I thought of that, but thought this was slightly clearer from usage.  I'm open
the default option if you prefer.


r~
Eric Botcazou Oct. 31, 2018, 5:58 p.m. | #5
> I thought of that, but thought this was slightly clearer from usage.  I'm

> open the default option if you prefer.


No, either is fine as far as I'm concerned.

-- 
Eric Botcazou

Patch

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