From patchwork Mon Jun 12 15:04:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 106663 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp2651662vqr; Mon, 12 Jun 2023 08:05:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6SOUDt3OcyhCW1/Do4gXZuc2UhWVHnkH/Cv4kpeIdC7/zED+8ebJ+v0IM3jLzn86HRI/h5 X-Received: by 2002:aa7:cd6f:0:b0:514:a110:6bed with SMTP id ca15-20020aa7cd6f000000b00514a1106bedmr5516941edb.27.1686582305930; Mon, 12 Jun 2023 08:05:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686582305; cv=none; d=google.com; s=arc-20160816; b=mNNTBhY5Fe5hGYa12up13SdxIdslpPJ6TwsJQAKfonarifjlJCJrjfpSk9xxAXDcQk v1WFc3ydfI6xoZSa0ijBdWDspSsROQQ0a/Z8rhyf6WQKy1Y+Ght1wX6REAYXaiNyjtYD XLOOtM46ZcUA4l178OB7ANfOI9YPbGIGyYgvm2aJ/HyQTFJ/YtQFDYI61qxVn+lWTKtW qrtV83Dkgt2yZ4hgphm1Qs4Sfy7M3mQeLz4pP2agthL8mcBWCw1vybtOay6hTi/YJgOz QBf7AXHm7+MCkT0fi9u+fv0yaKYxFIEO+FMv5GLp7peLCbxWGV68catPTBNgmf13duCE u8HQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:subject:to:content-language:cc:user-agent :mime-version:date:message-id:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=jHDfJc+WAbeeQ9IzMuaH75dwz9ojBlt6N9zIISqriAs=; b=U4XWCVNjJbdm+VbtS+XhgO1IJZhXV+tbm6y54FTqgiPqHolZTC9JuKKXkJU1BrstCG D+0WDEbCUVlJLzHzK4RSMtiuDJA0+wglatC9R5FUmoiqEuC0p5vnRLv2yRbrQc9GUe8r 0002hEQbAArp/GslWUEtThCDmnjS+hGnyXMrRgST8AlGQf4Gaq8VjvSGxfqRZh1830no 8pOnTu1TW57N2oT7FCmhV0TqsXbv6rvOmt3Kn+bVE8YHb2tV/xwv+K6y9+AeXHsyUq56 plUO5vchmb2faP3PzzJMb41bvxaBrcTfLJYU0ecNS0JXcLZ8fY2caPu05HilIWbNtNEp JE+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=T59K2GLC; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id b15-20020aa7cd0f000000b00510de951919si5885104edw.55.2023.06.12.08.05.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jun 2023 08:05:05 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=T59K2GLC; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6D37B3858C74 for ; Mon, 12 Jun 2023 15:05:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6D37B3858C74 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686582304; bh=jHDfJc+WAbeeQ9IzMuaH75dwz9ojBlt6N9zIISqriAs=; h=Date:Cc:To:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=T59K2GLC/edXGTCV0uKCP3kBSTPFwSoNOGZr8em6DFi5t6zhzeQwtxnnCHrXInQyc wHk4j1CHTrRaHEUfV/u1GC87+mE+38Nv4/q+eGdHbxVRh7QbLWDHRo86TEWy6c/3e8 /1aHN2ZYXQ+50ZS9xasfDoXhieVB79XxRNoQ6Qw8= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) by sourceware.org (Postfix) with ESMTPS id 4C7763858D32 for ; Mon, 12 Jun 2023 15:04:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4C7763858D32 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-2b1ba50e50bso52535321fa.1 for ; Mon, 12 Jun 2023 08:04:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686582258; x=1689174258; h=content-transfer-encoding:subject:from:to:content-language:cc :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=jHDfJc+WAbeeQ9IzMuaH75dwz9ojBlt6N9zIISqriAs=; b=Mc2extagKn7ZfqHv5WMKlBb5jZdsL5sTQSdOrX16SSccwAGzGmDo0hNbOlqjVtfdTC Rgxon303Zawwxv5WMUCx/gZyK2Y4n0VP/Y4B+z9U/uK//nJKsGN38e7/P3BMqoxFNjNb VzzWIhKfjwWeUeNrIRn/OT+99BB2mOR50j/6p+NX9JfiVHAZzrAeUYzH+p+/r5IP8YgL s7ILjm6I1LFPPJOexGDpXMfcE3VB39INUI3xtLS2u7n5nQoKl6yCRHm185gGuyUqpayc yG6cHEzjTI9WVTebTeOq9V/5bawDMGzkHWnLVqjudhVdbTXK8UxDPaiKg6dJSUGFmoIZ LAJw== X-Gm-Message-State: AC+VfDw43xcQ7tNCx7ytTkTNg/P8o9Ps+pVHqlGulnJqybJo3+asn8mq OFdVPGkxT154aMHs/MRaxhd+AWJL3p4= X-Received: by 2002:a2e:8019:0:b0:2b1:c8e2:531d with SMTP id j25-20020a2e8019000000b002b1c8e2531dmr2946502ljg.16.1686582258099; Mon, 12 Jun 2023 08:04:18 -0700 (PDT) Received: from [192.168.1.23] (ip-046-005-130-086.um12.pools.vodafone-ip.de. [46.5.130.86]) by smtp.gmail.com with ESMTPSA id a13-20020a170906684d00b0096f7500502csm5337841ejs.199.2023.06.12.08.04.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 12 Jun 2023 08:04:17 -0700 (PDT) Message-ID: <2698bc05-7a93-6617-2a5c-b209f343ce83@gmail.com> Date: Mon, 12 Jun 2023 17:04:16 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Cc: rdapp.gcc@gmail.com Content-Language: en-US To: gcc-patches , palmer , Kito Cheng , "juzhe.zhong@rivai.ai" , jeffreyalaw Subject: [PATCH] RISC-V: Add sign-extending variants for vmv.x.s. X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_SHORT, 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 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: Robin Dapp via Gcc-patches From: Robin Dapp Reply-To: Robin Dapp Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768509728410977664?= X-GMAIL-MSGID: =?utf-8?q?1768509728410977664?= Hi, when the destination register of a vmv.x.s needs to be sign extended to XLEN we currently emit an sext insn. Since vmv.x.s performs this implicitly this patch adds two instruction patterns (intended for combine et al.) that include sign_extend for the destination operand. The tests extend the vec_extract tests sent before. Regards Robin gcc/ChangeLog: * config/riscv/vector-iterators.md: Add VI_QH iterator. * config/riscv/autovec-opt.md (@pred_extract_first_sextdi): New vmv.x.s pattern that includes sign extension. (@pred_extract_first_sextsi): Dito for SImode. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c: Expect no sext instructions. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c: Dito. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c: Dito. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c: Dito. --- gcc/config/riscv/autovec-opt.md | 29 +++++++++++++++++++ gcc/config/riscv/vector-iterators.md | 5 ++++ .../rvv/autovec/vls-vlmax/vec_extract-1.c | 2 ++ .../rvv/autovec/vls-vlmax/vec_extract-2.c | 2 ++ .../rvv/autovec/vls-vlmax/vec_extract-3.c | 2 ++ .../rvv/autovec/vls-vlmax/vec_extract-4.c | 2 ++ 7 files changed, 43 insertions(+), 1 deletion(-) diff --git a/gcc/config/riscv/autovec-opt.md b/gcc/config/riscv/autovec-opt.md index 7bb93eed220..82bd967dc38 100644 --- a/gcc/config/riscv/autovec-opt.md +++ b/gcc/config/riscv/autovec-opt.md @@ -330,3 +330,32 @@ (define_insn_and_split "*zero_sign_extend_fma" } [(set_attr "type" "viwmuladd") (set_attr "mode" "")]) + +;; ------------------------------------------------------------------------- +;; ---- Sign-extension for vmv.x.s. +;; ------------------------------------------------------------------------- +(define_insn "@pred_extract_first_sextdi" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI + (unspec: + [(vec_select: + (match_operand:VI_QHS 1 "register_operand""vr") + (parallel [(const_int 0)])) + (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)))] + "TARGET_VECTOR && Pmode == DImode" + "vmv.x.s\t%0,%1" + [(set_attr "type" "vimovvx") + (set_attr "mode" "")]) + +(define_insn "@pred_extract_first_sextsi" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI + (unspec: + [(vec_select: + (match_operand:VI_QH 1 "register_operand" "vr") + (parallel [(const_int 0)])) + (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)))] + "TARGET_VECTOR && Pmode == SImode" + "vmv.x.s\t%0,%1" + [(set_attr "type" "vimovvx") + (set_attr "mode" "")]) diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md index 6abd777c1ad..e8b39d63d28 100644 --- a/gcc/config/riscv/vector-iterators.md +++ b/gcc/config/riscv/vector-iterators.md @@ -352,6 +352,11 @@ (define_mode_iterator VFULLI [ (VNx2DI "TARGET_FULL_V") (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V") (VNx16DI "TARGET_FULL_V") ]) +(define_mode_iterator VI_QH [ + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128") + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128") +]) + (define_mode_iterator VI_QHS [ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128") (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128") diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c index b631fdb9cc6..dedd56a3d3b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c @@ -47,3 +47,5 @@ TEST_ALL1 (VEC_EXTRACT) /* { dg-final { scan-assembler-times {\tvfmv.f.s} 5 } } */ /* { dg-final { scan-assembler-times {\tvmv.x.s} 13 } } */ + +/* { dg-final { scan-assembler-not {\tsext} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c index 0a93752bd4b..f63cee4c2a4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c @@ -56,3 +56,5 @@ TEST_ALL2 (VEC_EXTRACT) /* { dg-final { scan-assembler-times {\tvfmv.f.s} 9 } } */ /* { dg-final { scan-assembler-times {\tvmv.x.s} 19 } } */ + +/* { dg-final { scan-assembler-not {\tsext} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c index 24c39168578..d8e0b78f5a2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c @@ -57,3 +57,5 @@ TEST_ALL3 (VEC_EXTRACT) /* { dg-final { scan-assembler-times {\tvfmv.f.s} 9 } } */ /* { dg-final { scan-assembler-times {\tvmv.x.s} 19 } } */ + +/* { dg-final { scan-assembler-not {\tsext} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c index e3d29cab628..25bd5c92fc3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c @@ -58,3 +58,5 @@ TEST_ALL4 (VEC_EXTRACT) /* { dg-final { scan-assembler-times {\tvfmv.f.s} 9 } } */ /* { dg-final { scan-assembler-times {\tvmv.x.s} 20 } } */ + +/* { dg-final { scan-assembler-not {\tsext} } } */