From patchwork Sat Mar 23 23:46:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Segher Boessenkool X-Patchwork-Id: 1062682 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-498341-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=kernel.crashing.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="Gnr7Mx87"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44RccT4cplz9sST for ; Sun, 24 Mar 2019 10:46:30 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id; q=dns; s=default; b=BqgoMcAU66zb iDFwXfrexox3hfmXSR9pSi9IX1DArpsddh47hb+7s+D4IbBE9WCPUEQOhYSlgQxp iUqIRNymzFdC+axT4zjRmE0nKLtNvdkwDO9NIb8n05dILHsxbAel2hRR4WaX9zXr UkbVykPn7slbAsTmKar73UqmU2mrWgM= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id; s=default; bh=e6b2acMt8Ng0CpkejW ptam3rFFA=; b=Gnr7Mx87dxLTRUnDuSfEdcBsWCdpB7jDkro3D/ItbVmhUQAekp TIp2mR60Hsj+8I4m0ci5Zc1BfZUqrqk6zTLhFLtsJ8ohEPIRsViwwueRoFSJWHf0 WyjBD1Skr0O+R3fGMQasvRa9DO7lCGy5ek81UNJNIkXVu+w1LrZ0vm6D0= Received: (qmail 101656 invoked by alias); 23 Mar 2019 23:46:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 101647 invoked by uid 89); 23 Mar 2019 23:46:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=sk:rs6000_, notes, Pmode, rs6000.c X-HELO: gcc1-power7.osuosl.org Received: from gcc1-power7.osuosl.org (HELO gcc1-power7.osuosl.org) (140.211.15.137) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 23 Mar 2019 23:46:16 +0000 Received: by gcc1-power7.osuosl.org (Postfix, from userid 10019) id E685512402BC; Sat, 23 Mar 2019 23:46:13 +0000 (UTC) From: Segher Boessenkool To: gcc-patches@gcc.gnu.org Cc: dje.gcc@gmail.com, Segher Boessenkool Subject: [PATCH] rs6000: Make CSE'ing __tls_get_addr calls possible Date: Sat, 23 Mar 2019 23:46:12 +0000 Message-Id: X-IsSubscribed: yes CSE does not consider calls, not even const calls. This patch puts a REG_EQUAL note on the pseudo we assign the __tls_get_addr result to, so that those pseudos can be CSE'd and the extra calls deleted as dead code. CSE should really handle const calls directly, but it is stage 4. Tested on powerpc64-linux {-m32,-m64}. I'll also test on powerpc64le-linux, and will commit it to trunk if that works. Segher 2019-03-23 Segher Boessenkool * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Add REG_EQUAL notes for the result of the __tls_get_addr calls. * config/rs6000/rs6000.md (unspec UNSPEC_TLS_GET_ADDR): New. --- gcc/config/rs6000/rs6000.c | 10 ++++++++++ gcc/config/rs6000/rs6000.md | 1 + 2 files changed, 11 insertions(+) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 15811bd..35aedf4 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -8661,6 +8661,11 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model) else emit_library_call_value (tga, dest, LCT_CONST, Pmode); global_tlsarg = NULL_RTX; + + /* Make a note so that the result of this call can be CSEd. */ + rtvec vec = gen_rtvec (1, copy_rtx (arg)); + rtx uns = gen_rtx_UNSPEC (Pmode, vec, UNSPEC_TLS_GET_ADDR); + set_unique_reg_note (get_last_insn (), REG_EQUAL, uns); } else if (model == TLS_MODEL_LOCAL_DYNAMIC) { @@ -8679,6 +8684,11 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model) emit_library_call_value (tga, tmp1, LCT_CONST, Pmode); global_tlsarg = NULL_RTX; + /* Make a note so that the result of this call can be CSEd. */ + rtvec vec = gen_rtvec (1, copy_rtx (arg)); + rtx uns = gen_rtx_UNSPEC (Pmode, vec, UNSPEC_TLS_GET_ADDR); + set_unique_reg_note (get_last_insn (), REG_EQUAL, uns); + if (rs6000_tls_size == 16) { if (TARGET_64BIT) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index f2faef8..815077c 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -79,6 +79,7 @@ (define_c_enum "unspec" UNSPEC_MPIC_CORRECT ; macho_correct_pic UNSPEC_TLSGD UNSPEC_TLSLD + UNSPEC_TLS_GET_ADDR UNSPEC_MOVESI_FROM_CR UNSPEC_MOVESI_TO_CR UNSPEC_TLSDTPREL