From patchwork Sat Feb 19 19:07:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 51243 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5FBF9385840F for ; Sat, 19 Feb 2022 19:09:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5FBF9385840F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1645297789; bh=WsNr0ijnlwR0AMNY6ouuynjm5fZFfZLCAzxwSLoDCz8=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=BtDRBiavrcLyn0wNqh4xXBgcd8j7CE6M8eCfnAMy0jLdEFPkC06ywWAgQeZihLwM6 qm2vcXS+0cL2XeFGwrg/558HYuZWs9aJhd0HmhyAv0JYXFsAxSgK3dPA27rbNn9M6V HoDkNN07Oe4spoiMuOYUuRFWeUDn9UQM8cmI648Y= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id 71024385840F for ; Sat, 19 Feb 2022 19:07:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 71024385840F Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 939EE1F383; Sat, 19 Feb 2022 19:07:58 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 7C9FA1332F; Sat, 19 Feb 2022 19:07:58 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id w19zHQ5AEWIAHAAAMHmgww (envelope-from ); Sat, 19 Feb 2022 19:07:58 +0000 Date: Sat, 19 Feb 2022 20:07:57 +0100 To: gcc-patches@gcc.gnu.org Subject: [committed][nvptx] Use _ as destination operand of atom.exch Message-ID: <20220219190755.GA1535@delia.home> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tom de Vries via Gcc-patches From: Tom de Vries Reply-To: Tom de Vries Cc: Thomas Schwinge Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi, We currently generate this code for an atomic store: ... .reg.u32 %r21; atom.exch.b32 %r21,[%r22],%r23; ... where %r21 is set but unused. Use the ptx bit bucket operand '_' instead, such that we have: ... atom.exch.b32 _,[%r22],%r23; ... [ Note that the same problem still occurs for this code: ... void atomic_store (int *ptr, int val) { __atomic_exchange_n (ptr, val, MEMMODEL_RELAXED); } ... ] Tested on nvptx. Committed to trunk. Thanks, - Tom [nvptx] Use _ as destination operand of atom.exch gcc/ChangeLog: 2022-02-19 Tom de Vries * config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Handle SET insn. * config/nvptx/nvptx.md (define_insn "nvptx_atomic_store"): Rename to ... (define_insn "nvptx_atomic_store_sm70"): This. (define_insn "nvptx_atomic_store"): New define_insn. (define_expand "atomic_store"): Handle rename. Use nvptx_atomic_store instead of atomic_exchange. gcc/testsuite/ChangeLog: 2022-02-19 Tom de Vries * gcc.target/nvptx/atomic-store-1.c: Update. --- gcc/config/nvptx/nvptx.cc | 18 ++++++++++++++---- gcc/config/nvptx/nvptx.md | 25 +++++++++++++++++++------ gcc/testsuite/gcc.target/nvptx/atomic-store-1.c | 4 ++-- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index 55fab3e84cb..ed347cab70e 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -3291,12 +3291,22 @@ nvptx_reorg_uniform_simt () continue; rtx pat = PATTERN (insn); - gcc_assert (GET_CODE (pat) == PARALLEL); rtx master = nvptx_get_unisimt_master (); bool shuffle_p = false; - for (int i = 0; i < XVECLEN (pat, 0); i++) - shuffle_p - |= nvptx_unisimt_handle_set (XVECEXP (pat, 0, i), insn, master); + switch (GET_CODE (pat)) + { + case PARALLEL: + for (int i = 0; i < XVECLEN (pat, 0); i++) + shuffle_p + |= nvptx_unisimt_handle_set (XVECEXP (pat, 0, i), insn, master); + break; + case SET: + shuffle_p |= nvptx_unisimt_handle_set (pat, insn, master); + break; + default: + gcc_unreachable (); + } + if (shuffle_p && TARGET_PTX_6_0) { /* The shuffle is a sync, so uniformity is guaranteed. */ diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md index 132ef2f1d34..f6dc817632c 100644 --- a/gcc/config/nvptx/nvptx.md +++ b/gcc/config/nvptx/nvptx.md @@ -2069,8 +2069,8 @@ (define_expand "atomic_store" if (TARGET_SM70) { - emit_insn (gen_nvptx_atomic_store (operands[0], operands[1], - operands[2])); + emit_insn (gen_nvptx_atomic_store_sm70 (operands[0], operands[1], + operands[2])); DONE; } @@ -2079,13 +2079,12 @@ (define_expand "atomic_store" /* Fall back to expand_atomic_store. */ FAIL; - rtx tmpreg = gen_reg_rtx (mode); - emit_insn (gen_atomic_exchange (tmpreg, operands[0], operands[1], - operands[2])); + emit_insn (gen_nvptx_atomic_store (operands[0], operands[1], + operands[2])); DONE; }) -(define_insn "nvptx_atomic_store" +(define_insn "nvptx_atomic_store_sm70" [(set (match_operand:SDIM 0 "memory_operand" "+m") ;; memory (unspec_volatile:SDIM [(match_operand:SDIM 1 "nvptx_nonmemory_operand" "Ri") ;; input @@ -2099,6 +2098,20 @@ (define_insn "nvptx_atomic_store" } [(set_attr "atomic" "false")]) ;; Note: st is not an atomic insn. +(define_insn "nvptx_atomic_store" + [(set (match_operand:SDIM 0 "memory_operand" "+m") ;; memory + (unspec_volatile:SDIM + [(match_operand:SDIM 1 "nvptx_nonmemory_operand" "Ri") ;; input + (match_operand:SI 2 "const_int_operand")] ;; model + UNSPECV_ST))] + "!TARGET_SM70" + { + const char *t + = "%.\tatom%A0.exch.b%T0\t_, %0, %1;"; + return nvptx_output_atomic_insn (t, operands, 0, 2); + } + [(set_attr "atomic" "true")]) + (define_insn "atomic_fetch_add" [(set (match_operand:SDIM 1 "memory_operand" "+m") (unspec_volatile:SDIM diff --git a/gcc/testsuite/gcc.target/nvptx/atomic-store-1.c b/gcc/testsuite/gcc.target/nvptx/atomic-store-1.c index cee3815eda5..d611f2d410f 100644 --- a/gcc/testsuite/gcc.target/nvptx/atomic-store-1.c +++ b/gcc/testsuite/gcc.target/nvptx/atomic-store-1.c @@ -21,6 +21,6 @@ main() return 0; } -/* { dg-final { scan-assembler-times "atom.shared.exch.b32" 1 } } */ -/* { dg-final { scan-assembler-times "atom.shared.exch.b64" 1 } } */ +/* { dg-final { scan-assembler-times "atom.shared.exch.b32\[\t \]+_," 1 } } */ +/* { dg-final { scan-assembler-times "atom.shared.exch.b64\[\t \]+_," 1 } } */ /* { dg-final { scan-assembler-times "membar.cta" 4 } } */