From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10640 invoked by alias); 31 Jul 2017 08:04:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 10626 invoked by uid 89); 31 Jul 2017 08:04:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.2 spammy=UD:c-opts.c, coptsc, sk:c_commo, c-opts.c X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 31 Jul 2017 08:04:40 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id EBA0EABBC; Mon, 31 Jul 2017 08:04:37 +0000 (UTC) Subject: [PATCH] Introduce TARGET_SUPPORTS_ALIASES To: Jan Hubicka Cc: Yuri Gribov , GCC Patches References: <20170717092719.GB33905@kam.mff.cuni.cz> <20170724140622.GB90943@kam.mff.cuni.cz> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: <927a43eb-4cfb-8e1c-7d31-b54410ddd30a@suse.cz> Date: Mon, 31 Jul 2017 08:04:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170724140622.GB90943@kam.mff.cuni.cz> Content-Type: multipart/mixed; boundary="------------0A22177C7C43E692088B443A" X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg01988.txt.bz2 This is a multi-part message in MIME format. --------------0A22177C7C43E692088B443A Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 265 Hi. Doing the transformation suggested by Honza. Patch can bootstrap on ppc64le-redhat-linux and x86_64-linux-gnu and survives regression tests. And I also verified that works on hppa2.0w-hp-hpux11.11 (target w/o aliasing support). Ready to be installed? Martin --------------0A22177C7C43E692088B443A Content-Type: text/x-patch; name="0001-Introduce-TARGET_SUPPORTS_ALIASES.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Introduce-TARGET_SUPPORTS_ALIASES.patch" Content-length: 9024 >From f8584bcb678dba92241c20b3e81895a52fc865f3 Mon Sep 17 00:00:00 2001 From: marxin Date: Tue, 25 Jul 2017 13:11:28 +0200 Subject: [PATCH] Introduce TARGET_SUPPORTS_ALIASES gcc/c-family/ChangeLog: 2017-07-25 Martin Liska * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with TARGET_SUPPORTS_ALIASES. gcc/ChangeLog: 2017-07-25 Martin Liska * 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. gcc/cp/ChangeLog: 2017-07-25 Martin Liska * decl2.c (get_tls_init_fn): Replace ASM_OUTPUT_DEF with TARGET_SUPPORTS_ALIASES. (handle_tls_init): Likewise. (note_mangling_alias): Likewise. * optimize.c (can_alias_cdtor): Likewise. --- gcc/asan.c | 4 +--- gcc/c-family/c-opts.c | 22 ++++++++++++---------- gcc/cgraph.c | 7 ++++--- gcc/cp/decl2.c | 23 ++++++++++------------- gcc/cp/optimize.c | 6 +++--- gcc/defaults.h | 9 +++++++++ gcc/ipa-visibility.c | 15 +++++---------- gcc/symtab.c | 6 +++--- gcc/varpool.c | 6 +++--- 9 files changed, 50 insertions(+), 48 deletions(-) diff --git a/gcc/asan.c b/gcc/asan.c index 5f9275f6425..d8cb2b52c8b 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -1663,10 +1663,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; } diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index 1657e7a4390..0b13a188c1b 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -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) diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 2f820f1bb67..356bcd311e1 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -582,10 +582,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) diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 2a52f8ca3e2..5119d4e62cc 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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); @@ -4300,15 +4296,16 @@ generate_mangling_alias (tree decl, tree id2) void note_mangling_alias (tree decl ATTRIBUTE_UNUSED, tree id2 ATTRIBUTE_UNUSED) { -#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. */ diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index a1c387092d4..09ffbda7ca8 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -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; diff --git a/gcc/defaults.h b/gcc/defaults.h index 7ad92d920f8..072ef6b6d17 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -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. */ diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c index 21321703dbb..b78e66e622a 100644 --- a/gcc/ipa-visibility.c +++ b/gcc/ipa-visibility.c @@ -334,10 +334,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) @@ -458,11 +458,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; @@ -481,8 +476,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 diff --git a/gcc/symtab.c b/gcc/symtab.c index 0145910023f..1affc1dce1d 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -1763,10 +1763,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); diff --git a/gcc/varpool.c b/gcc/varpool.c index ab59c80406b..db3dcee1af8 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -786,10 +786,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; -- 2.13.3 --------------0A22177C7C43E692088B443A--