From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbgbr2.qq.com (smtpbgbr2.qq.com [54.207.22.56]) by sourceware.org (Postfix) with ESMTPS id 87DA23858C5E for ; Fri, 11 Aug 2023 11:52:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 87DA23858C5E 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: bizesmtp86t1691754561tfilsnzg Received: from rios-cad5.localdomain ( [58.60.1.11]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 11 Aug 2023 19:49:20 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: CR3LFp2JE4npdFIzHX6Qut3pDwgvHMv2p7ICvwGhgQ7eTr7DJkwF53OMJ8uyY SHbK4wuTA6B40LMqPzxxcmtJu6iHRV9YHDNcABPm+GpqiA2/g0ONiY73JRspiKT5FSI4KUT EugWQp7jqNK7kb5MlIcERfWY3YndgFr4tDbaWmnLvGwcNjAU0wEkACD/4kQ/wgdt2mQ4oD9 MEEIzZS3D/J06FuYIFByZW9mEFb0QA/Wo/3GoKJePYw8LSr2la6GeRuW16Q8xPjPK7vf9Kp p7m8FYCS7Mx4QV39o3mIIDvujIbKGL+X1IbYm9ayAff0IWbheviM4BU082ZaOD1K1JkEJbc KiKSl22ADOUnZoE61e/Gxmr1EH3RVInOlEin4fyCXF58P9+QNx5jGoKtglAAK6NPJZ7yTnH l6litZCcsYMtnVUKt2rpQA== X-QQ-GoodBg: 2 X-BIZMAIL-ID: 15508113948021303926 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Cc: richard.sandiford@arm.com, rguenther@suse.de, Juzhe-Zhong Subject: [PATCH] VECT: Fix ICE on MASK_LEN_{LOAD,STORE} when no LEN recorded[PR110989] Date: Fri, 11 Aug 2023 19:49:19 +0800 Message-Id: <20230811114919.2556172-1-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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_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 List-Id: This patch fixes bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110989 This ICE is caused because of this situation: mask__49.21_99 = vect__17.19_96 == { 0.0, ... }; ... vect__6.24_107 = .MASK_LEN_LOAD (vectp.22_105, 32B, mask__49.21_99, POLY_INT_CST [2, 2], 0); The MASK_LEN_LOAD is using real MASK which is produced by the EQ comparison wheras the LEN is the dummy LEN which is the vectorization factor. In this situation, we didn't enter 'vect_record_loop_len' since there is no LEN loop control. Then 'LOOP_VINFO_RGROUP_IV_TYPE' is not suitable type for 'build_int_cst' used for producing LEN argument for 'MASK_LEN_LOAD', so use sizetype instead which is perfectly matching RVV length requirement. PR middle-end/110989 gcc/ChangeLog: * tree-vect-stmts.cc (vectorizable_store): Replace iv_type with sizetype. (vectorizable_load): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr110989.c: New test. --- gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c | 11 +++++++++++ gcc/tree-vect-stmts.cc | 7 ++----- 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c new file mode 100644 index 00000000000..cf3b247e604 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -Ofast" } */ + +int a, b, c; +double *d; +void e() { + double f; + for (; c; c++, d--) + f = *d ?: *(&a + c); + b = f; +} diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 398fbe945e5..e0e2083d022 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -9126,9 +9126,8 @@ vectorizable_store (vec_info *vinfo, { /* Pass VF value to 'len' argument of MASK_LEN_STORE if LOOP_LENS is invalid. */ - tree iv_type = LOOP_VINFO_RGROUP_IV_TYPE (loop_vinfo); final_len - = build_int_cst (iv_type, + = build_int_cst (sizetype, TYPE_VECTOR_SUBPARTS (vectype)); } if (!final_mask) @@ -10713,10 +10712,8 @@ vectorizable_load (vec_info *vinfo, { /* Pass VF value to 'len' argument of MASK_LEN_LOAD if LOOP_LENS is invalid. */ - tree iv_type - = LOOP_VINFO_RGROUP_IV_TYPE (loop_vinfo); final_len - = build_int_cst (iv_type, + = build_int_cst (sizetype, TYPE_VECTOR_SUBPARTS (vectype)); } if (!final_mask) -- 2.36.3