From patchwork Mon Mar 12 18:42:24 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 146203 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 6C908B6FBC for ; Tue, 13 Mar 2012 05:42:47 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1332182567; h=Comment: DomainKey-Signature:Received:Received:Received:Received: MIME-Version:Received:Received:In-Reply-To:References:Date: Message-ID:Subject:From:To:Cc:Content-Type: Content-Transfer-Encoding:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=QydBkIYK6YneaM0cWYVbN49MGgQ=; b=afG5PcHJLJdwhLc T3un+9pIV6sHvHYmbNduMXdchlTeLS4teIKSBa7W0V2CbN8EsgkmaECxwJbFfv5H GobmiiEXof2Bob3LNkZu/hCsqAp1Ob8QRdjQXFrLBzbTzifjSkrkiz5oNlv0/HGm 3LRWzerS4HNPsj0OAgXmIKJ5AaVA= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:MIME-Version:Received:Received:In-Reply-To:References:Date:Message-ID:Subject:From:To:Cc:Content-Type:Content-Transfer-Encoding:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=T+QT72QbVb3IXWJJfqZupTXWAabCC1mgBu0Rhz+a6salUdm0p7lMhUq8I7IYiN QjKuNwQXR0d0dRfO4eY/m/LJPF39GL6hEkk3TLj9MGq5gk6CSkXPHQrwxsGw62Ar TNJiOcxywbszjRhk64NDpEcG/ZEmR6+U652YXnRKKE0WQ=; Received: (qmail 6605 invoked by alias); 12 Mar 2012 18:42:41 -0000 Received: (qmail 6573 invoked by uid 22791); 12 Mar 2012 18:42:40 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, TW_ZJ X-Spam-Check-By: sourceware.org Received: from mail-ey0-f175.google.com (HELO mail-ey0-f175.google.com) (209.85.215.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 12 Mar 2012 18:42:26 +0000 Received: by eaae1 with SMTP id e1so1309318eaa.20 for ; Mon, 12 Mar 2012 11:42:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.135.82 with SMTP id m18mr2811683qct.136.1331577744215; Mon, 12 Mar 2012 11:42:24 -0700 (PDT) Received: by 10.229.89.137 with HTTP; Mon, 12 Mar 2012 11:42:24 -0700 (PDT) In-Reply-To: References: <20120311232613.GA28504@intel.com> Date: Mon, 12 Mar 2012 11:42:24 -0700 Message-ID: Subject: Re: PATCH: Call gen_tls_global_dynamic_64_ and en_tls_local_dynamic_base_64_ From: "H.J. Lu" To: Uros Bizjak Cc: gcc-patches@gcc.gnu.org, Richard Henderson X-IsSubscribed: yes 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 Mon, Mar 12, 2012 at 9:50 AM, H.J. Lu wrote: > On Mon, Mar 12, 2012 at 12:46 AM, Uros Bizjak wrote: >> On Mon, Mar 12, 2012 at 12:26 AM, H.J. Lu wrote: >> >>> Pmode may be DImode for x32.  This patch calls >>> gen_tls_global_dynamic_64_ and gen_tls_local_dynamic_base_64_, >>> depending on Pmode.  Tested on Linux/x86-64.  OK for trunk? >>> >>> 2012-03-11  H.J. Lu   >>> >>>        * config/i386/i386.c (legitimize_tls_address): Call >>>        gen_tls_global_dynamic_64_ and >>>        gen_tls_local_dynamic_base_64_, depending on Pmode. >>> >>>        * config/i386/i386.md (*tls_global_dynamic_64): Renamed to ... >>>        (*tls_global_dynamic_64_): This. >>>        (tls_global_dynamic_64): Renamed to ... >>>        (tls_global_dynamic_64_): This. >>>        (*tls_local_dynamic_base_64): Renamed to ... >>>        (*tls_local_dynamic_base_64): This. >>>        (tls_local_dynamic_base_64): Renamed to ... >>>        (tls_local_dynamic_base_64): This. >>> >>> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c >>> index d673101..fc8fa12 100644 >>> --- a/gcc/config/i386/i386.c >>> +++ b/gcc/config/i386/i386.c >>> @@ -12533,7 +12543,12 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) >>>              rtx rax = gen_rtx_REG (Pmode, AX_REG), insns; >>> >>>              start_sequence (); >>> -             emit_call_insn (gen_tls_global_dynamic_64 (rax, x, caddr)); >>> +             if (Pmode == DImode) >>> +               emit_call_insn (gen_tls_global_dynamic_64_di (rax, x, >>> +                                                             caddr)); >>> +             else >>> +               emit_call_insn (gen_tls_global_dynamic_64_si (rax, x, >>> +                                                             caddr)); >>>              insns = get_insns (); >>>              end_sequence (); >>> >>> @@ -12581,7 +12596,12 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) >>>              rtx rax = gen_rtx_REG (Pmode, AX_REG), insns, eqv; >>> >>>              start_sequence (); >>> -             emit_call_insn (gen_tls_local_dynamic_base_64 (rax, caddr)); >>> +             if (Pmode == DImode) >>> +               emit_call_insn (gen_tls_local_dynamic_base_64_di (rax, >>> +                                                                 caddr)); >>> +             else >>> +               emit_call_insn (gen_tls_local_dynamic_base_64_si (rax, >>> +                                                                 caddr)); >>>              insns = get_insns (); >>>              end_sequence (); >> >> Please use indirect functions here, see many examples in the code. >> >> OK with this change. >> >> Thanks, >> Uros. > > This is the patch I checked in. > > Thanks. > > > -- > H.J. > --- > 2012-03-12  H.J. Lu   > >        * config/i386/i386.c (ix86_gen_tls_global_dynamic_64): New. >        (ix86_gen_tls_local_dynamic_base_64): Likewise. >        (ix86_option_override_internal): Set ix86_gen_tls_global_dynamic_64 >        and ix86_gen_tls_local_dynamic_base_64. >        (legitimize_tls_address): Use ix86_gen_tls_global_dynamic_64 and >        ix86_gen_tls_local_dynamic_base_64. > >        * config/i386/i386.md (*tls_global_dynamic_64): Renamed to ... >        (*tls_global_dynamic_64_): This. >        (tls_global_dynamic_64): Renamed to ... >        (tls_global_dynamic_64_): This. >        (*tls_local_dynamic_base_64): Renamed to ... >        (*tls_local_dynamic_base_64_): This. >        (tls_local_dynamic_base_64): Renamed to ... >        (tls_local_dynamic_base_64_): This. This patch caused x32 libgcc build failure: ../../../../src-trunk/libgcc/generic-morestack-thread.c: In function 'stack_split_initialize_thread': ../../../../src-trunk/libgcc/generic-morestack-thread.c:128:1: error: unrecognizable insn: (call_insn/u 8 7 9 3 (parallel [ (set (reg:DI 0 ax) (call:DI (mem:QI (symbol_ref:DI ("__tls_get_addr")) [0 S1 A8]) (const_int 0 [0]))) (unspec:DI [ (symbol_ref:SI ("__morestack_segments") [flags 0x50] ) ] UNSPEC_TLS_GD) ]) ../../../../src-trunk/libgcc/generic-morestack-thread.c:117 -1 (expr_list:REG_EH_REGION (const_int -2147483648 [0xffffffff80000000]) (nil)) (nil)) ../../../../src-trunk/libgcc/generic-morestack-thread.c:128:1: internal compiler error: in extract_insn, at recog.c:2123 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. make[8]: *** [generic-morestack-thread.o] Error 1 make[8]: *** Waiting for unfinished jobs.... __morestack_segments is always in SImode for x32. Adding :P to (unspec:P [(match_operand 1 "tls_symbolic_operand" "")] causes it to fail when Pmode == DImode I checked in this patch to revert the part of that change. Sorry for that. Index: ChangeLog =================================================================== --- ChangeLog (revision 185259) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2012-03-12 H.J. Lu + + * config/i386/i386.md (*tls_global_dynamic_64_): Remove :P + on tls_symbolic_operand. + (tls_global_dynamic_64_): Likewise. + 2012-03-12 Georg-Johann Lay PR other/52545 Index: config/i386/i386.md =================================================================== --- config/i386/i386.md (revision 185259) +++ config/i386/i386.md (working copy) @@ -12628,7 +12628,7 @@ (call:P (mem:QI (match_operand:P 2 "constant_call_address_operand" "z")) (match_operand:P 3 "" ""))) - (unspec:P [(match_operand:P 1 "tls_symbolic_operand" "")] + (unspec:P [(match_operand 1 "tls_symbolic_operand" "")] UNSPEC_TLS_GD)] "TARGET_64BIT" { @@ -12652,7 +12652,7 @@ (call:P (mem:QI (match_operand:P 2 "constant_call_address_operand" "")) (const_int 0))) - (unspec:P [(match_operand:P 1 "tls_symbolic_operand" "")] + (unspec:P [(match_operand 1 "tls_symbolic_operand" "")] UNSPEC_TLS_GD)])] "TARGET_64BIT")