This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix vectorizer alignment update wrt section anchors


On Mon, Mar 09, 2015 at 04:38:57AM +0100, Jan Hubicka wrote:
> --- varasm.c	(revision 221269)
> +++ varasm.c	(working copy)
> @@ -1630,35 +1630,30 @@ default_ctor_section_asm_out_constructor
>  void
>  notice_global_symbol (tree decl)
>  {
> -  const char **type = &first_global_object_name;
> +  const char **t = &first_global_object_name;
>  
>    if (first_global_object_name
>        || !TREE_PUBLIC (decl)
>        || DECL_EXTERNAL (decl)
>        || !DECL_NAME (decl)
> +      || (TREE_CODE (decl) == VAR_DECL && DECL_HARD_REGISTER (decl))
>        || (TREE_CODE (decl) != FUNCTION_DECL
>  	  && (TREE_CODE (decl) != VAR_DECL
>  	      || (DECL_COMMON (decl)
>  		  && (DECL_INITIAL (decl) == 0
> -		      || DECL_INITIAL (decl) == error_mark_node))))
> -      || !MEM_P (DECL_RTL (decl)))
> +		      || DECL_INITIAL (decl) == error_mark_node)))))
>      return;
>  
>    /* We win when global object is found, but it is useful to know about weak
>       symbol as well so we can produce nicer unique names.  */
>    if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl) || flag_shlib)
> -    type = &weak_global_object_name;
> +    t = &weak_global_object_name;
>  
> -  if (!*type)
> +  if (!*t)
>      {
> -      const char *p;
> -      const char *name;
> -      rtx decl_rtl = DECL_RTL (decl);
> -
> -      p = targetm.strip_name_encoding (XSTR (XEXP (decl_rtl, 0), 0));
> -      name = ggc_strdup (p);
> -
> -      *type = name;
> +      tree id = DECL_ASSEMBLER_NAME (decl);
> +      ultimate_transparent_alias_target (&id);

make_decl_rtl only calls this for:
  if (TREE_CODE (decl) == FUNCTION_DECL
      && cgraph_node::get (decl)
      && cgraph_node::get (decl)->instrumentation_clone)
Is it intentional you are doing it unconditionally?

> +      *t = ggc_strdup (targetm.strip_name_encoding (IDENTIFIER_POINTER (id)));

Otherwise it looks reasonable.  Another option would be to just create the
RTL for notice_global_symbol purposes using make_decl_rtl_for_debug.

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]