From patchwork Wed Aug 9 12:18:40 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: 133197 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp2758547vqr; Wed, 9 Aug 2023 05:19:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGUAiUZmXdTvph/As9XrFo/Njq19H/67swi0wgmPro9lCWaQhJvqRnj9raMd+j6JgA3BM+P X-Received: by 2002:a05:6512:10cc:b0:4fd:d517:fbd8 with SMTP id k12-20020a05651210cc00b004fdd517fbd8mr1779881lfg.9.1691583562448; Wed, 09 Aug 2023 05:19:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691583562; cv=none; d=google.com; s=arc-20160816; b=QLWswl1Dt87gUhHDnZclMSHWAWPZNcEIXu7SvVXbYsuHav/JTZhEocaoa76RVBT7AV Zrx5Ju/2UD52vnqP/99EckjB8uIuFQsY1ycBnl22BwpooSXujrp7Xwq3JAlB7lOYU/i/ KijFbRnOAfZTtbQ9ljq7lJoh1pBpnvS1jdkmbuzGqnWcJM5e4wMOBipR+hYXPPbpwRBC ENAf0n9FU54dwt9/bjKWY/sG5uxtZFxn+D7fmEWQAx9gFmWv7rX9fRMrMWSXSm5LQvJW r5HznO5Tk0dtcaF2rAk9q1xxDN2swfNDN6cXAZIDX3dMvsSUlGfSvI3Cc8CWVN28VPjc oDfQ== 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=gcZU3gYfrpFbyOstFZ9vpH8eZ6R14DOwUr+mIlmLQik=; fh=SuV1mxSfYh/fFJBV6FW8ZDQUWC7OLSIDYxyJSOKFLBQ=; b=tIs00aK6cX6/8MIsMIX+oLnG7YR5cIlFIxPzku11WWf8bGSBlzB7NzYnnF9mfdstJ7 n8X2AM+EYbcvtEKrmfqQHp5o4aUssRRydJ9S7QMt55dt3pbZVT0t1giBWjhdVowD6vlP s2OlLpqhLbDvCQpbB+P38XCzMFOBUUCv5OR/AgPa13NCaGUWej11Oojrq3qVU7SA47pA +Bj6xLammIr9/75J2Dt2DE5FnW/uDLUT8BfrVVqeHoLiWyA7O/OOAkTmmgOzq8JPEu56 B7TQlzNBfI/myhHI6BJGy1EkEQ4u6wbhpT7lOVaxqHeShdDHCOfHNk5BsEUJ/0rILfyL QcMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id n24-20020aa7db58000000b0052328243d1csi1218446edt.141.2023.08.09.05.19.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Aug 2023 05:19:22 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 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 331463857004 for ; Wed, 9 Aug 2023 12:19:17 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbgeu1.qq.com (smtpbgeu1.qq.com [52.59.177.22]) by sourceware.org (Postfix) with ESMTPS id C457A3858D20 for ; Wed, 9 Aug 2023 12:18:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C457A3858D20 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: bizesmtp80t1691583523tbqfhkj3 Received: from rios-cad5.localdomain ( [58.60.1.11]) by bizesmtp.qq.com (ESMTP) with id ; Wed, 09 Aug 2023 20:18:42 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: c42nD1GNGymDCfGL761XvhmMyL//0oWjsB7wg/OtAUG26oTVBtYJJYt/lA0bk FjQ2yza1R0WlsboO/qGAuSpLD2eqfnPCyRGSRKPtYDr1FYlwwXi1oZXHPdKUv1hIJgGaVR7 Y95WzAZHGyPZa7DAys8++dHCOfoXnIXKNHri02ztSWoGAo4owliIMT359oCDSCVL/S+HTfv OCqzzlM3ZcDeXdL0T7dNvNqjbTHRcosqWLO4NCs6sH2mOR04qxXw9RCKdUbSmY3E+JuvOqG 4Lb42VzmOCbCZQtFZYjhWVmJYGeoLuiD/56ljOY/hXTHVCNrf66K8dQzx2Nz2CZDPIBiJYx uKnyDSlEUNbNOv5KBp1Urgb7hAfLOiMFxEkUOgZ7SZ+AlpqpxsAmCOTTBW1GCLKLUzFcPTo lQiEwgvf+rk= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 12847909813448183137 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Cc: kito.cheng@gmail.com, kito.cheng@sifive.com, jeffreyalaw@gmail.com, rdapp.gcc@gmail.com, Juzhe-Zhong Subject: [PATCH] RISC-V: Support NPATTERNS = 1 stepped vector[PR110950] Date: Wed, 9 Aug 2023 20:18:40 +0800 Message-Id: <20230809121840.3576116-1-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.3 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_PASS, TXREP, T_SPF_HELO_TEMPERROR, WEIRD_PORT 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: 1773753925720244140 X-GMAIL-MSGID: 1773753925720244140 This patch fix ICE: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110950 0x1cf8939 expand_const_vector ../../../riscv-gcc/gcc/config/riscv/riscv-v.cc:1587 PR target/110950 gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_const_vector): Add NPATTERNS = 1 stepped vector support. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr110950.c: New test. --- gcc/config/riscv/riscv-v.cc | 19 +++++++++++++++++++ .../gcc.target/riscv/rvv/autovec/pr110950.c | 12 ++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110950.c diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index a7b2d7dd2fe..0bea04c1967 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -1563,6 +1563,25 @@ expand_const_vector (rtx target, rtx src) add_ops); } } + else if (npatterns == 1 && nelts_per_pattern == 3) + { + /* Generate the following CONST_VECTOR: + { base0, base1, base1 + step, base1 + step * 2, ... } */ + rtx base0 = CONST_VECTOR_ELT (src, 0); + rtx base1 = CONST_VECTOR_ELT (src, 1); + rtx step = CONST_VECTOR_ELT (src, 2); + /* Step 1 - { base1, base1 + step, base1 + step * 2, ... } */ + rtx tmp = gen_reg_rtx (mode); + emit_insn (gen_vec_series (mode, tmp, base1, step)); + /* Step 2 - { base0, base1, base1 + step, base1 + step * 2, ... } */ + scalar_mode elem_mode = GET_MODE_INNER (mode); + if (!rtx_equal_p (base0, const0_rtx)) + base0 = force_reg (elem_mode, base0); + + insn_code icode = optab_handler (vec_shl_insert_optab, mode); + gcc_assert (icode != CODE_FOR_nothing); + emit_insn (GEN_FCN (icode) (target, tmp, base0)); + } else /* TODO: We will enable more variable-length vector in the future. */ gcc_unreachable (); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110950.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110950.c new file mode 100644 index 00000000000..9f276d06338 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110950.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -Ofast" } */ + +int a; +void b() { + long *c = 0; + int *d; + for (; a; ++a) + c[a] = d[-a]; +} + +/* { dg-final { scan-assembler-times {vslide1up\.vx} 1 } } */