From patchwork Sat Aug 12 14:15:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "juzhe.zhong@rivai.ai" X-Patchwork-Id: 134890 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp1735874vqi; Sat, 12 Aug 2023 07:16:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IESDEn62YxicddeGHRQ78Pfnz2dc1TSoWLJUzF3IKw4c5M8gk3mXMfPKmkcJGGgCEkxf6CD X-Received: by 2002:aa7:c911:0:b0:522:41ef:d7ab with SMTP id b17-20020aa7c911000000b0052241efd7abmr4022597edt.25.1691849767776; Sat, 12 Aug 2023 07:16:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691849767; cv=none; d=google.com; s=arc-20160816; b=MKWMRRbb96ltpsDM7ru1v7NoK7MkVydHgcrSyx9+UgWs0PTTL8aZmVp35xoKSCL+L8 uzxMKw3LRZnYLs/5TRLC7OVvWO2ZnJGoI9kPSf81hOq7g1qlrwQrh3gcA3KPoj+NGVmo s07YzwPAbIt2IJQyk/sSkydk5MSlWwUC28kCpM7IbiTR2ebfgWDLdXzHqvoFmFzHGh8c 7BoA6sSiL+AxoUDAmN1Oyex5eHp1J82sRcHhBsg4i/lr2unan/WMAt0B93J10nSIHRKd uBHGpl90a9KkeCRQ0EilhJ1i8oxA5vQKgip+GbTXjjfAps4FEozdXn2b94iYrenGnNOl xcOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:feedback-id :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dmarc-filter:delivered-to; bh=3mEFRp5mb96Et+VfSU9B4hMs+e3HTRq7T/Y3X/u1wlc=; fh=SFV7/hSO/6BL1RVHoKQXn4ZOo+MKyJZizVPRsMu/10s=; b=K/IguYx1Xc464TbrXyz72XzzWHkFg+Lzxf0egMm0l9ZQL0DywHF4uQrEkXNLaJRfD1 dYWFygpeZzzVVBfA+95TOQ/BwuluBLLLnquP0t+LHKAd0EZi+7t3KAcf9UZ9qpjtc91p zmM2TSxLBsEfNWG/6urrP7hdsOQd9xIKGIoyvylcsmr0a4BYVCykT+EH8+GJTsdB/nP5 miSwBjIPOthoiXMRkHjgA8DYBhGpJVAeitaayW+4AlXt4Fagmc4f0VCMpqaku+qsHzyS /bjuA7GxwaS7JYQAOnY0IFWUz/wWSMkj2lqICY+/vs+TwXqKupePMSLFQb4rU0Cvw5fN 1iLg== ARC-Authentication-Results: i=1; mx.google.com; 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" Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id j22-20020aa7ca56000000b005232287f318si5215620edt.552.2023.08.12.07.16.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Aug 2023 07:16:07 -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; 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EF5193857028 for ; Sat, 12 Aug 2023 14:15:58 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbguseast3.qq.com (smtpbguseast3.qq.com [54.243.244.52]) by sourceware.org (Postfix) with ESMTPS id 9B5593858D20 for ; Sat, 12 Aug 2023 14:15:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9B5593858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai X-QQ-mid: bizesmtp83t1691849718tvmhbky0 Received: from server1.localdomain ( [58.60.1.10]) by bizesmtp.qq.com (ESMTP) with id ; Sat, 12 Aug 2023 22:15:17 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: W+onFc5Tw4MKj/Xt7gTeo/ZucPn3rcQEqKK9UbW0t+bWf7nH8c61f4apDnCMZ yjU+4zvYSQGaWxnNRDrhngWpE0Db/yqq6ltWPK+94sqUVlPf18XRTde3ySDY65Af/F8nEXP zicZWExLx4G0hSAZ2Jz7jOmyr9PDOI8B1gRVax4e5uRT7aSanN5A6V91ACSyVCt7pskzMW/ QnczWxrqDOaLuUmRsRryCUHKVb7CyRUxQHorNMklJr0obt48x/UuXGvaABbEnGot5qyGkYc 9omDUA3pd9YYXXCGI9ZgkRI4IhymOPAucMDQF3GE3Y8DHh632RXFaskat1WyUv8KGb4hmpZ +0vxzke47zchRM3XyMENHDsFsfDhgD+eMFjoTN54r3yUg3cj56OrrAM2St48Rpj0Yz+Dfyk X-QQ-GoodBg: 2 X-BIZMAIL-ID: 16203148983500084656 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Cc: kito.cheng@sifive.com, kito.cheng@gmail.com, rdapp.gcc@gmail.com, jeffreyalaw@gmail.com, Juzhe-Zhong Subject: [PATCH] RISC-V: Fix autovec_length_operand predicate[PR110989] Date: Sat, 12 Aug 2023 22:15:15 +0800 Message-Id: <20230812141515.326096-1-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.1 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP 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: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774033062252750916 X-GMAIL-MSGID: 1774033062252750916 Currently, autovec_length_operand predicate incorrect configuration is discovered in PR110989 since this following situation: vect__6.24_107 = .MASK_LEN_LOAD (vectp.22_105, 32B, mask__49.21_99, POLY_INT_CST [2, 2], 0); ---> dummy length = VF. The current autovec length operand failed to recognize the VF dummy length. -march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -Ofast -fno-schedule-insns -fno-schedule-insns2: Before this patch: srli a4,s0,2 addi a4,a4,-3 srli s0,s0,3 vsetvli a5,zero,e64,m1,ta,ma vid.v v1 vmul.vx v1,v1,a4 addi a4,s0,-2 vadd.vx v1,v1,a4 addi a4,s0,-1 vslide1up.vx v2,v1,a4 vmv.v.x v1,a4 vand.vv v1,v2,v1 vl1re64.v v3,0(t2) vrgather.vv v2,v3,v1 vmv.v.i v1,0 vmfeq.vv v0,v2,v1 vsetvli zero,s0,e32,mf2,ta,ma ---> s0 = POLY (2,2) vle32.v v3,0(t3),v0.t vsetvli a5,zero,e64,m1,ta,ma vmfne.vv v0,v2,v1 vsetvli zero,zero,e32,mf2,ta,ma vfwcvt.f.x.v v1,v3 vsetvli zero,zero,e64,m1,ta,ma vmerge.vvm v1,v1,v2,v0 vslidedown.vx v1,v1,a4 vfmv.f.s fa5,v1 j .L6 After this patch: srli a4,s0,2 addi a4,a4,-3 srli s0,s0,3 vsetvli a5,zero,e64,m1,ta,ma vid.v v1 vmul.vx v1,v1,a4 addi a4,s0,-2 vadd.vx v1,v1,a4 addi s0,s0,-1 vslide1up.vx v2,v1,s0 vmv.v.x v1,s0 vand.vv v1,v2,v1 vl1re64.v v3,0(t2) vrgather.vv v2,v3,v1 vmv.v.i v1,0 vmfeq.vv v0,v2,v1 vle32.v v3,0(t3),v0.t vmfne.vv v0,v2,v1 vsetvli zero,zero,e32,mf2,ta,ma vfwcvt.f.x.v v1,v3 vsetvli zero,zero,e64,m1,ta,ma vmerge.vvm v1,v1,v2,v0 vslidedown.vx v1,v1,s0 vfmv.f.s fa5,v1 j .L6 2 vsetvli insns are reduced. gcc/ChangeLog: * config/riscv/predicates.md: Fix predicate. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr110989.c: Add vsetvli assembly check. --- gcc/config/riscv/predicates.md | 5 +---- gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c | 7 ++++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/gcc/config/riscv/predicates.md b/gcc/config/riscv/predicates.md index 9db28c2def7..b6ebdcf55de 100644 --- a/gcc/config/riscv/predicates.md +++ b/gcc/config/riscv/predicates.md @@ -282,10 +282,7 @@ (define_special_predicate "autovec_length_operand" (ior (match_operand 0 "pmode_register_operand") - (ior (match_operand 0 "const_csr_operand") - (match_test "rtx_equal_p (op, gen_int_mode - (GET_MODE_NUNITS (GET_MODE (op)), - Pmode))")))) + (match_code "const_int,const_poly_int"))) (define_predicate "reg_or_mem_operand" (ior (match_operand 0 "register_operand") diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c index cf3b247e604..6e163a55c56 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -Ofast" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -Ofast -fno-schedule-insns -fno-schedule-insns2" } */ int a, b, c; double *d; @@ -9,3 +9,8 @@ void e() { f = *d ?: *(&a + c); b = f; } + +/* { dg-final { scan-assembler-times {vsetvli} 3 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e64,\s*m1,\s*t[au],\s*m[au]} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*zero,\s*e64,\s*m1,\s*t[au],\s*m[au]} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 1 } } */