Introduce TARGET_SUPPORTS_ALIASES
authorMartin Liska <mliska@suse.cz>
Fri, 11 Aug 2017 08:14:54 +0000 (10:14 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 11 Aug 2017 08:14:54 +0000 (08:14 +0000)
2017-08-11  Martin Liska  <mliska@suse.cz>

* c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with
TARGET_SUPPORTS_ALIASES.
2017-08-11  Martin Liska  <mliska@suse.cz>

* asan.c (asan_protect_global): Replace ASM_OUTPUT_DEF with
TARGET_SUPPORTS_ALIASES.
* cgraph.c (cgraph_node::create_same_body_alias): Likewise.
* ipa-visibility.c (can_replace_by_local_alias): Likewise.
(optimize_weakref): Likewise.
* symtab.c (symtab_node::noninterposable_alias): Likewise.
* varpool.c (varpool_node::create_extra_name_alias): Likewise.
* defaults.h: Introduce TARGET_SUPPORTS_ALIASES.
2017-08-11  Martin Liska  <mliska@suse.cz>

* decl2.c (get_tls_init_fn): Replace ASM_OUTPUT_DEF with
TARGET_SUPPORTS_ALIASES.
(handle_tls_init): Likewise.
(note_mangling_alias): Likewise.  Remove ATTRIBUTE_UNUSED for
both arguments.
* optimize.c (can_alias_cdtor): Likewise.

From-SVN: r251048

12 files changed:
gcc/ChangeLog
gcc/asan.c
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/cgraph.c
gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/optimize.c
gcc/defaults.h
gcc/ipa-visibility.c
gcc/symtab.c
gcc/varpool.c

index 48e94f7754edc30d8a0b7fd0acd48f418fd14c84..a926516ed778043eba36e86bd4e2a9b5de3f977b 100644 (file)
@@ -1,3 +1,14 @@
+2017-08-11  Martin Liska  <mliska@suse.cz>
+
+       * asan.c (asan_protect_global): Replace ASM_OUTPUT_DEF with
+       TARGET_SUPPORTS_ALIASES.
+       * cgraph.c (cgraph_node::create_same_body_alias): Likewise.
+       * ipa-visibility.c (can_replace_by_local_alias): Likewise.
+       (optimize_weakref): Likewise.
+       * symtab.c (symtab_node::noninterposable_alias): Likewise.
+       * varpool.c (varpool_node::create_extra_name_alias): Likewise.
+       * defaults.h: Introduce TARGET_SUPPORTS_ALIASES.
+
 2017-08-11  Martin Liska  <mliska@suse.cz>
 
        PR ipa/81213
index f83ca65ffdbb12e0bd65719ff833539332540e02..ce1e0244ec68791d21b3b9b0c025adc5806d03fb 100644 (file)
@@ -1665,10 +1665,8 @@ asan_protect_global (tree decl)
   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
     return false;
 
-#ifndef ASM_OUTPUT_DEF
-  if (asan_needs_local_alias (decl))
+  if (!TARGET_SUPPORTS_ALIASES && asan_needs_local_alias (decl))
     return false;
-#endif
 
   return true;
 }
index fcb4ea5169b1b19a8ec9c4d44d815ef854962002..6d33192c5ac7a009402a9e68bf79332825eb6d2d 100644 (file)
@@ -1,3 +1,8 @@
+2017-08-11  Martin Liska  <mliska@suse.cz>
+
+       * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with
+       TARGET_SUPPORTS_ALIASES.
+
 2017-08-10  David Malcolm  <dmalcolm@redhat.com>
 
        * c-common.c (c_parse_error): Add rich_location * param, using it
index 1657e7a4390ee1f93b62dcbef7cceca1dff03a14..0b13a188c1b380a2fcbb2711947f3165e81b0853 100644 (file)
@@ -957,16 +957,18 @@ c_common_post_options (const char **pfilename)
 
   if (flag_extern_tls_init)
     {
-#if !defined (ASM_OUTPUT_DEF) || !SUPPORTS_WEAK
-      /* Lazy TLS initialization for a variable in another TU requires
-        alias and weak reference support. */
-      if (flag_extern_tls_init > 0)
-       sorry ("external TLS initialization functions not supported "
-              "on this target");
-      flag_extern_tls_init = 0;
-#else
-      flag_extern_tls_init = 1;
-#endif
+      if (!TARGET_SUPPORTS_ALIASES || !SUPPORTS_WEAK)
+       {
+         /* Lazy TLS initialization for a variable in another TU requires
+            alias and weak reference support.  */
+         if (flag_extern_tls_init > 0)
+           sorry ("external TLS initialization functions not supported "
+                  "on this target");
+
+         flag_extern_tls_init = 0;
+       }
+      else
+       flag_extern_tls_init = 1;
     }
 
   if (num_in_fnames > 1)
index c6ab7e38ff6a1a4f699a0df688638a737f4d6af3..69aa6c5bce2f1345489ea77325a86540bef52907 100644 (file)
@@ -584,10 +584,11 @@ cgraph_node *
 cgraph_node::create_same_body_alias (tree alias, tree decl)
 {
   cgraph_node *n;
-#ifndef ASM_OUTPUT_DEF
+
   /* If aliases aren't supported by the assembler, fail.  */
-  return NULL;
-#endif
+  if (!TARGET_SUPPORTS_ALIASES)
+    return NULL;
+
   /* Langhooks can create same body aliases of symbols not defined.
      Those are useless. Drop them on the floor.  */
   if (symtab->global_info_ready)
index 0115f68cde651566ffdc916e03fcb96b8ca2ef82..a8a3fccdcd1972b5871e10983967c4c2b5521309 100644 (file)
@@ -1,3 +1,12 @@
+2017-08-11  Martin Liska  <mliska@suse.cz>
+
+       * decl2.c (get_tls_init_fn): Replace ASM_OUTPUT_DEF with
+       TARGET_SUPPORTS_ALIASES.
+       (handle_tls_init): Likewise.
+       (note_mangling_alias): Likewise.  Remove ATTRIBUTE_UNUSED for
+       both arguments.
+       * optimize.c (can_alias_cdtor): Likewise.
+
 2017-08-11  Jason Merrill  <jason@redhat.com>
 
        PR c++/81671 - nullptr_t template parameter
index 8187ab9317de49355a8539d21407a6733a8399f6..37393a1a253c65e4718f14a22ff84191bf6189b5 100644 (file)
@@ -3156,11 +3156,9 @@ get_tls_init_fn (tree var)
   if (!flag_extern_tls_init && DECL_EXTERNAL (var))
     return NULL_TREE;
 
-#ifdef ASM_OUTPUT_DEF
   /* If the variable is internal, or if we can't generate aliases,
      call the local init function directly.  */
-  if (!TREE_PUBLIC (var))
-#endif
+  if (!TREE_PUBLIC (var) || !TARGET_SUPPORTS_ALIASES)
     return get_local_tls_init_fn ();
 
   tree sname = mangle_tls_init_fn (var);
@@ -4241,9 +4239,8 @@ handle_tls_init (void)
       tree init = TREE_PURPOSE (vars);
       one_static_initialization_or_destruction (var, init, true);
 
-#ifdef ASM_OUTPUT_DEF
       /* Output init aliases even with -fno-extern-tls-init.  */
-      if (TREE_PUBLIC (var))
+      if (TARGET_SUPPORTS_ALIASES && TREE_PUBLIC (var))
        {
           tree single_init_fn = get_tls_init_fn (var);
          if (single_init_fn == NULL_TREE)
@@ -4253,7 +4250,6 @@ handle_tls_init (void)
                (single_init_fn, fn);
          gcc_assert (alias != NULL);
        }
-#endif
     }
 
   finish_then_clause (if_stmt);
@@ -4298,17 +4294,18 @@ generate_mangling_alias (tree decl, tree id2)
    implementation.  */
 
 void
-note_mangling_alias (tree decl ATTRIBUTE_UNUSED, tree id2 ATTRIBUTE_UNUSED)
+note_mangling_alias (tree decl, tree id2)
 {
-#ifdef ASM_OUTPUT_DEF
-  if (!defer_mangling_aliases)
-    generate_mangling_alias (decl, id2);
-  else
+  if (TARGET_SUPPORTS_ALIASES)
     {
-      vec_safe_push (mangling_aliases, decl);
-      vec_safe_push (mangling_aliases, id2);
+      if (!defer_mangling_aliases)
+       generate_mangling_alias (decl, id2);
+      else
+       {
+         vec_safe_push (mangling_aliases, decl);
+         vec_safe_push (mangling_aliases, id2);
+       }
     }
-#endif
 }
 
 /* Emit all mangling aliases that were deferred up to this point.  */
index a1c387092d4b49bfec4229f690eb0c9dae0da938..09ffbda7ca8be1bef78d34ba77a28a01933136d7 100644 (file)
@@ -184,10 +184,10 @@ cdtor_comdat_group (tree complete, tree base)
 static bool
 can_alias_cdtor (tree fn)
 {
-#ifndef ASM_OUTPUT_DEF
   /* If aliases aren't supported by the assembler, fail.  */
-  return false;
-#endif
+  if (!TARGET_SUPPORTS_ALIASES)
+    return false;
+
   /* We can't use an alias if there are virtual bases.  */
   if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
     return false;
index 7ad92d920f86260892c0be12363a45ede7408cff..072ef6b6d174230c5a7993a2163a3367d35d18a9 100644 (file)
@@ -863,6 +863,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #endif
 #endif
 
+/* Decide whether target supports aliases.  */
+#ifndef TARGET_SUPPORTS_ALIASES
+#ifdef ASM_OUTPUT_DEF
+#define TARGET_SUPPORTS_ALIASES 1
+#else
+#define TARGET_SUPPORTS_ALIASES 0
+#endif
+#endif
+
 /* Select a format to encode pointers in exception handling data.  We
    prefer those that result in fewer dynamic relocations.  Assume no
    special support here and encode direct references.  */
index 998024893a5d159a91031b857f4e1c4ef1bdb019..b6bc870b11de4539fc291ecfad39dd35cf12ec9d 100644 (file)
@@ -339,10 +339,10 @@ varpool_node::externally_visible_p (void)
 static bool
 can_replace_by_local_alias (symtab_node *node)
 {
-#ifndef ASM_OUTPUT_DEF
   /* If aliases aren't supported, we can't do replacement.  */
-  return false;
-#endif
+  if (!TARGET_SUPPORTS_ALIASES)
+    return false;
+
   /* Weakrefs have a reason to be non-local.  Be sure we do not replace
      them.  */
   while (node->transparent_alias && node->definition && !node->weakref)
@@ -463,11 +463,6 @@ update_visibility_by_resolution_info (symtab_node * node)
 static void
 optimize_weakref (symtab_node *node)
 {
-#ifdef ASM_OUTPUT_DEF
-  bool aliases_supported = true;
-#else
-  bool aliases_supported = false;
-#endif
   bool strip_weakref = false;
   bool static_alias = false;
 
@@ -486,8 +481,8 @@ optimize_weakref (symtab_node *node)
 
   /* If we have definition of weakref's target and we know it binds locally,
      we can turn weakref to static alias.  */
-  if (target->definition && decl_binds_to_current_def_p (target->decl)
-      && aliases_supported)
+  if (TARGET_SUPPORTS_ALIASES
+      && target->definition && decl_binds_to_current_def_p (target->decl))
     strip_weakref = static_alias = true;
   /* Otherwise we can turn weakref into transparent alias.  This transformation
      may break asm statements which directly refers to symbol name and expect
index 7e5eb7d6416b2b50dc288b3f4477061862012028..a507ace8a3479c3224fbe031b470030aaa1e2cba 100644 (file)
@@ -1765,10 +1765,10 @@ symtab_node::noninterposable_alias (void)
                                   (void *)&new_node, true);
   if (new_node)
     return new_node;
-#ifndef ASM_OUTPUT_DEF
+
   /* If aliases aren't supported by the assembler, fail.  */
-  return NULL;
-#endif
+  if (!TARGET_SUPPORTS_ALIASES)
+    return NULL;
 
   /* Otherwise create a new one.  */
   new_decl = copy_node (node->decl);
index b005f529cc0b95a3888fdfda47f24ad18781cd92..d849fe8a7da2ff9f1bb3c646b76c1d41ae914fbb 100644 (file)
@@ -788,10 +788,10 @@ varpool_node::create_extra_name_alias (tree alias, tree decl)
 {
   varpool_node *alias_node;
 
-#ifndef ASM_OUTPUT_DEF
   /* If aliases aren't supported by the assembler, fail.  */
-  return NULL;
-#endif
+  if (!TARGET_SUPPORTS_ALIASES)
+    return NULL;
+
   alias_node = varpool_node::create_alias (alias, decl);
   alias_node->cpp_implicit_alias = true;