From patchwork Mon Feb 14 18:35:12 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 83146 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 4018FB70ED for ; Tue, 15 Feb 2011 05:35:29 +1100 (EST) Received: (qmail 7219 invoked by alias); 14 Feb 2011 18:35:26 -0000 Received: (qmail 6938 invoked by uid 22791); 14 Feb 2011 18:35:25 -0000 X-SWARE-Spam-Status: No, hits=0.7 required=5.0 tests=AWL, BAYES_50, KAM_STOCKGEN, NO_DNS_FOR_FROM, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mga03.intel.com (HELO mga03.intel.com) (143.182.124.21) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 14 Feb 2011 18:35:17 +0000 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 14 Feb 2011 10:35:13 -0800 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([10.3.194.135]) by azsmga001.ch.intel.com with ESMTP; 14 Feb 2011 10:35:13 -0800 Received: by gnu-6.sc.intel.com (Postfix, from userid 500) id 02577180B21; Mon, 14 Feb 2011 10:35:12 -0800 (PST) Date: Mon, 14 Feb 2011 10:35:12 -0800 From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Subject: Re: [x32] PATCH: PR target/47715: [x32] TLS doesn't work Message-ID: <20110214183512.GA8296@intel.com> Reply-To: "H.J. Lu" References: <20110213232251.GA23412@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20110213232251.GA23412@intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) 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 On Sun, Feb 13, 2011 at 03:22:51PM -0800, H.J. Lu wrote: > Hi, > > ix86_expand_move has > > tmp = expand_simple_binop (Pmode, PLUS, tmp, addend, op0, 1, OPTAB_DIRECT); > if (tmp == op0) > return; > > It never checks the case of tmp != op0. This patch fixes it. > > From 44741a1c97a7fec7c98702d217ac284856c75621 Mon Sep 17 00:00:00 2001 > From: H.J. Lu > Date: Sun, 13 Feb 2011 15:09:50 -0800 > Subject: [PATCH 3/3] Properly support TLS symbol in ix86_expand_move. > > --- > gcc/ChangeLog.x32 | 6 ++++++ > gcc/config/i386/i386.c | 26 +++++++++++++++++--------- > gcc/testsuite/ChangeLog.x32 | 5 +++++ > gcc/testsuite/gcc.target/i386/pr47715-3.c | 17 +++++++++++++++++ > 4 files changed, 45 insertions(+), 9 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr47715-3.c > > diff --git a/gcc/ChangeLog.x32 b/gcc/ChangeLog.x32 > index dda2a10..ec8aa23 100644 > --- a/gcc/ChangeLog.x32 > +++ b/gcc/ChangeLog.x32 > @@ -1,5 +1,11 @@ > 2011-02-13 H.J. Lu > > + PR target/47715 > + * config/i386/i386.c (ix86_expand_move): Properly support TLS > + symbol. > + > +2011-02-13 H.J. Lu > + > * config/i386/morestack.S: Properly check __x86_64__ and > __LP64__. > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index 63add39..9ceb5c0 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -15403,6 +15403,7 @@ void > ix86_expand_move (enum machine_mode mode, rtx operands[]) > { > rtx op0, op1; > + rtx symbol1 = NULL; > enum tls_model model; > > op0 = operands[0]; > @@ -15430,21 +15431,20 @@ ix86_expand_move (enum machine_mode mode, rtx operands[]) > { > rtx addend = XEXP (XEXP (op1, 0), 1); > rtx symbol = XEXP (XEXP (op1, 0), 0); > - rtx tmp = NULL; > > model = SYMBOL_REF_TLS_MODEL (symbol); > if (model) > - tmp = legitimize_tls_address (symbol, model, true); > + symbol1 = legitimize_tls_address (symbol, model, true); > else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES > && SYMBOL_REF_DLLIMPORT_P (symbol)) > - tmp = legitimize_dllimport_symbol (symbol, true); > + symbol1 = legitimize_dllimport_symbol (symbol, true); > > - if (tmp) > + if (symbol1) > { > - tmp = force_operand (tmp, NULL); > - tmp = expand_simple_binop (Pmode, PLUS, tmp, addend, > - op0, 1, OPTAB_DIRECT); > - if (tmp == op0) > + symbol1 = force_operand (symbol1, NULL); > + symbol1 = expand_simple_binop (Pmode, PLUS, symbol1, addend, > + op0, 1, OPTAB_DIRECT); > + if (symbol1 == op0) > return; > } > } > @@ -15455,6 +15455,7 @@ ix86_expand_move (enum machine_mode mode, rtx operands[]) > { > if (TARGET_MACHO && !TARGET_64BIT) > { > + gcc_assert (symbol1 == NULL); > #if TARGET_MACHO > /* dynamic-no-pic */ > if (MACHOPIC_INDIRECT) > @@ -15491,7 +15493,13 @@ ix86_expand_move (enum machine_mode mode, rtx operands[]) > } > else > { > - if (MEM_P (op0)) > + if (symbol1 != NULL) > + { > + op1 = symbol1; > + if (GET_MODE (op1) != mode) > + op1 = convert_to_mode (mode, op1, 1); > + } > + else if (MEM_P (op0)) > op1 = force_reg (mode, op1); > else if (!TARGET_64BIT || !x86_64_movabs_operand (op1, mode)) > { I checked in this patch to update TLS symbol PIC support. H.J. Index: gcc/config/i386/i386.c =================================================================== --- gcc/config/i386/i386.c (revision 170144) +++ gcc/config/i386/i386.c (working copy) @@ -15493,12 +15493,8 @@ ix86_expand_move (enum machine_mode mode else { if (symbol1 != NULL) - { - op1 = symbol1; - if (GET_MODE (op1) != mode) - op1 = convert_to_mode (mode, op1, 1); - } - else if (MEM_P (op0)) + op1 = symbol1; + if (MEM_P (op0)) op1 = force_reg (mode, op1); else if (!TARGET_64BIT || !x86_64_movabs_operand (op1, mode)) { Index: gcc/ChangeLog.x32 =================================================================== --- gcc/ChangeLog.x32 (revision 170144) +++ gcc/ChangeLog.x32 (working copy) @@ -1,6 +1,12 @@ 2011-02-13 H.J. Lu PR target/47715 + * config/i386/i386.c (ix86_expand_move): Update TLS symbol PIC + support. + +2011-02-13 H.J. Lu + + PR target/47715 * config/i386/i386.c (ix86_expand_move): Properly support TLS symbol.