From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by sourceware.org (Postfix) with ESMTPS id A04D63858D28; Tue, 1 Aug 2023 05:04:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A04D63858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-1bba48b0bd2so32891285ad.3; Mon, 31 Jul 2023 22:04:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690866279; x=1691471079; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=6epYdhTc42nT+3c6pr7zol/AQ2VrdTRl97fqsEl1V04=; b=hixGn6Wk2JJEBqMKZuf3WkPt7YZ4N6sNaRYWIAvG/1bH582RCnEm3V4ErQJ2MGI9Te ev92GeTxyWqen28Pgv73sxQfDoX9PY1tmbApmZ4eaq6V+PS2dTcHTAHFXJa+7snVeci7 aoAobWaZZtL/+E1GvvWtoC+sMVu/xCCldxIuoMt/D5aEfbAwVx10RYgKTKF5JI6dnrpT 0melFwpxxM2jfK9YHuiF1PbxYeOrVzg7deDwKFCxHmwj9dE4kVRBTRpSlPfmN3e9P9RQ +6G82htTfjtXNooaD98VGpZGYuHx+84acbZj1ZqKxhCYJZ/7X70qM/uTXTbaDkeTXa01 1YwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690866279; x=1691471079; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6epYdhTc42nT+3c6pr7zol/AQ2VrdTRl97fqsEl1V04=; b=YOErRWkBZgXXGmH0cv22p3BVDdaDiagzPG+y2L2TdtnkMJK7ku1XRxq4syZoUuokjZ 5xK/nqyKbZAg6JDL6Y2XDq3tXgfXbmAtluy/z3mgJfljXLQW08D33ZRBT1U2WgfD0z0q LkMOAIfzD22IwBTTjDybHFpvhQgsdUQSRRRBCNeSHwl6vN/OYmRWgLT9uGZEpoclF3OV ORl0TJJiMTrFyGPPyo7mn4O150JgZTwnH1PoxgFjuMZDiLE6mu9z7chFAqESp2Qu5MMv fXHv9AWiQTpKOArH9vLzfjSv8x5iyNDkdQI3iDmlokAtAG6wQ2x1uz8cHA/kVSfKmM7n diTQ== X-Gm-Message-State: ABy/qLZ5jvxRGny+f+F7GB86CKfObL+IPAAPP57rR1JP0lf+muTN7WTe NYGePasPs7GW53+VuVPgHZ0= X-Google-Smtp-Source: APBJJlHRIBlKROvVl3LANdvsOG3j2ef2hGx5SmccPSjg5SKiMwCa6IJQxmtW10uwAosOBz18tTfqcQ== X-Received: by 2002:a17:902:e5c4:b0:1bb:5b88:73da with SMTP id u4-20020a170902e5c400b001bb5b8873damr12587087plf.61.1690866279003; Mon, 31 Jul 2023 22:04:39 -0700 (PDT) Received: from [172.31.0.109] ([136.36.130.248]) by smtp.gmail.com with ESMTPSA id w8-20020a170902e88800b001bb1f09189bsm9403566plg.221.2023.07.31.22.04.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 31 Jul 2023 22:04:38 -0700 (PDT) Message-ID: <6f0ec7dd-c316-7114-bce2-6cc66206fe1c@gmail.com> Date: Mon, 31 Jul 2023 23:04:36 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [RFC v2] RISC-V: Add Ztso atomic mappings Content-Language: en-US To: Patrick O'Neill , gcc-patches@gcc.gnu.org Cc: palmer@rivosinc.com, kito.cheng@gmail.com, vineetg@rivosinc.com, andrew@sifive.com, gnu-toolchain@rivosinc.com, dlustig@nvidia.com, cmuellner@gcc.gnu.org, andrea@rivosinc.com, hboehm@google.com References: <20230505171256.1380528-1-patrick@rivosinc.com> <20230717212836.23056-1-patrick@rivosinc.com> From: Jeff Law In-Reply-To: <20230717212836.23056-1-patrick@rivosinc.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 7/17/23 15:28, Patrick O'Neill wrote: > The RISC-V Ztso extension currently has no effect on generated code. > With the additional ordering constraints guarenteed by Ztso, we can emit > more optimized atomic mappings than the RVWMO mappings. > > This PR defines a strengthened version of Andrea Parri's proposed Ztso mappings ("Proposed Mapping") [1]. The changes were discussed by Andrea Parri and Hans Boehm on the GCC mailing list and are required in order to be compatible with the RVWMO ABI [2]. > > This change corresponds to the Ztso psABI proposal[3]. > > [1] https://github.com/preames/public-notes/blob/master/riscv-tso-mappings.rst > [2] https://inbox.sourceware.org/gcc-patches/ZFV8pNAstwrF2qBb@andrea/T/#t > [3] https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/391 > > gcc/ChangeLog: > > 2023-07-17 Patrick O'Neill > > * common/config/riscv/riscv-common.cc: Add Ztso and mark Ztso as > dependent on 'a' extension. > * config/riscv/riscv-opts.h (MASK_ZTSO): New mask. > (TARGET_ZTSO): New target. > * config/riscv/riscv.cc (riscv_memmodel_needs_amo_acquire): Add > Ztso case. > (riscv_memmodel_needs_amo_release): Add Ztso case. > (riscv_print_operand): Add Ztso case for LR/SC annotations. > * config/riscv/riscv.md: Import sync-rvwmo.md and sync-ztso.md. > * config/riscv/riscv.opt: Add Ztso target variable. > * config/riscv/sync.md (mem_thread_fence_1): Expand to RVWMO or > Ztso specific insn. > (atomic_load): Expand to RVWMO or Ztso specific insn. > (atomic_store): Expand to RVWMO or Ztso specific insn. > * config/riscv/sync-rvwmo.md: New file. Seperate out RVWMO > specific load/store/fence mappings. > * config/riscv/sync-ztso.md: New file. Seperate out Ztso > specific load/store/fence mappings. > > gcc/testsuite/ChangeLog: > > 2023-07-17 Patrick O'Neill > > * gcc.target/riscv/amo-table-ztso-amo-add-1.c: New test. > * gcc.target/riscv/amo-table-ztso-amo-add-2.c: New test. > * gcc.target/riscv/amo-table-ztso-amo-add-3.c: New test. > * gcc.target/riscv/amo-table-ztso-amo-add-4.c: New test. > * gcc.target/riscv/amo-table-ztso-amo-add-5.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-1.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-2.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-3.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-4.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-5.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-6.c: New test. > * gcc.target/riscv/amo-table-ztso-compare-exchange-7.c: New test. > * gcc.target/riscv/amo-table-ztso-fence-1.c: New test. > * gcc.target/riscv/amo-table-ztso-fence-2.c: New test. > * gcc.target/riscv/amo-table-ztso-fence-3.c: New test. > * gcc.target/riscv/amo-table-ztso-fence-4.c: New test. > * gcc.target/riscv/amo-table-ztso-fence-5.c: New test. > * gcc.target/riscv/amo-table-ztso-load-1.c: New test. > * gcc.target/riscv/amo-table-ztso-load-2.c: New test. > * gcc.target/riscv/amo-table-ztso-load-3.c: New test. > * gcc.target/riscv/amo-table-ztso-store-1.c: New test. > * gcc.target/riscv/amo-table-ztso-store-2.c: New test. > * gcc.target/riscv/amo-table-ztso-store-3.c: New test. > * gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c: New test. > * gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c: New test. > * gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c: New test. > * gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c: New test. > * gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c: New test. > > Signed-off-by: Patrick O'Neill > --- > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc > index 195f0019e06..432d4389985 100644 > --- a/gcc/config/riscv/riscv.cc > +++ b/gcc/config/riscv/riscv.cc > @@ -4483,6 +4483,10 @@ riscv_union_memmodels (enum memmodel model1, enum memmodel model2) > static bool > riscv_memmodel_needs_amo_acquire (enum memmodel model) > { > + /* ZTSO amo mappings require no annotations. */ > + if (TARGET_ZTSO) > + return false; Formatting nit. Should be indented two spaces from the open curley. > + > switch (model) > { > case MEMMODEL_ACQ_REL: > @@ -4506,6 +4510,10 @@ riscv_memmodel_needs_amo_acquire (enum memmodel model) > static bool > riscv_memmodel_needs_amo_release (enum memmodel model) > { > + /* ZTSO amo mappings require no annotations. */ > + if (TARGET_ZTSO) > + return false; Likewise. > + > +(define_insn "mem_thread_fence_rvwmo" > + [(set (match_operand:BLK 0 "" "") > + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER)) > + (match_operand:SI 1 "const_int_operand" "")] ;; model Just another formatting nit. The (unspec... should line up with the preceeding (match_operand.. Similarly for the other new patterns/expanders you've created. Fixing those may in turn require further indention of sub-rtxes. No concerns on implementation. So consider it pre-approved with the formatting fixes. Just post the final patch for archival purposes. Sorry for the long wait. jeff