From patchwork Fri Jan 26 06:46:21 2024 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: 192419 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:e09d:b0:103:945f:af90 with SMTP id gm29csp482167dyb; Thu, 25 Jan 2024 22:47:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IE3XEAw7JjTTxzKXfb2B8GZfCxEXJkLWEMTeAJB1ukPpEk//bzZXxgpBKag1PhfCr8wqO8U X-Received: by 2002:a05:620a:5362:b0:783:99e8:37c6 with SMTP id op34-20020a05620a536200b0078399e837c6mr1016584qkn.60.1706251634629; Thu, 25 Jan 2024 22:47:14 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706251634; cv=pass; d=google.com; s=arc-20160816; b=f+K1DNKy1qi+uS25PzFLRZexgHRgMZdJ9wBl0dcd20QzS7XC98Cvaba3mPEa547MMW peC6y+aJGLLTV2Lf4Z5dKNWv5GTS5T8ORCrQ1Ily8PJfbB/kMFvfvqlDvgQP/9ZsrWPX 9ZWVZZPI8NKgRfZ+PGRShrHsT6XvAzzqNbRVuX4ERgUSVr9Wm8+fD2sQWohCkrvRc5ni MtpPip86etfCVpcyM3wGq2noy0ucwVpucwC16PwlSz/9N/RN0HEQG7WSL+Kht1pLx8lT NMNnD8P5GTYTmgR2KFnG7uf7keA80QUcPs9qMW81oyr9ZCmfdwa4LpqKUnahTJcz3GnX BMLQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=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:arc-filter:dmarc-filter:delivered-to; bh=OW8NfPhWq8C79SgLDmVtJRqGqPqgMC4X3jyYcMkm2Lk=; fh=idvV5TQ1gmHAoU8u1GUGfjilVySOK+BR5TeZLoSouN8=; b=wflCbBxCQG0NFbkPUZ/SFXh3z+gVgne61AsT92rrT4UYTHZKdXnivJrxqFTTi5a4fe W1f9ULOvMCI+MNRcnoH3wMQwaUSkhYAybQF3AlWifO+RmH2CIOqRdP1ItSq7WkMVMHt6 YE9MnaT3ekwzyZR8Xc+8NrX/jtklLgvQoOyRylur46b9RkGVw0/1Yq58K43a08YY7g8b C1YdH9bVmEXbvdzvbvCvlRcIqLwmT24a2/mSsNnf7JlBioTaVSJ4fvZCYPad4QrphCf9 n+/z/61KFYEqS+35t0vypk2XbTE5C8vmcJasDlusiNjDK64Y3jIPkdaY0S1zY4f0uk6Z wOAw== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1); 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 (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id s26-20020a05620a16ba00b0078350f54cfbsi696645qkj.116.2024.01.25.22.47.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jan 2024 22:47:14 -0800 (PST) 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; arc=pass (i=1); 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 58FE23858C2F for ; Fri, 26 Jan 2024 06:47:14 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbg154.qq.com (smtpbg154.qq.com [15.184.224.54]) by sourceware.org (Postfix) with ESMTPS id 541083858D38 for ; Fri, 26 Jan 2024 06:46:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 541083858D38 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 541083858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=15.184.224.54 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706251596; cv=none; b=R8fdCZYItfbuEw5nm1X9mXYGKAi8vMA64w//cQs7ABZffqKSNx1vG28aKlklpsa49sPzG6TAime0p1gSGyZLdw9SoSS0tztNWgvzJxuLgweVdLm5iVWf9S7zLWG2S6vlnY+Urb5P50Yz8W+9owsQ0xZmMRL/VrG97d5PNxL/te0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706251596; c=relaxed/simple; bh=0k34uuDoxN7CLClZAIcrSb/RBdLfxZ7KG6pTqqsga48=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=EljZyax1aQ3G3/4vTRy654YYtBllriD6NN2frz8CfixJqprThfhc3O57YC8NYCY/gCGZKf2gbcAcwQzu+cdXVsbhG10iTdxVBWwcfu4V8meBE6B5xMnyY76mlvzLoytHFDZb0eAk2aRq4FFK6WVbEfxjd1TlRR4j/MSKLKPcp9E= ARC-Authentication-Results: i=1; server2.sourceware.org X-QQ-mid: bizesmtp69t1706251584t4c0114q X-QQ-Originating-IP: CMUhXEGgl2HMtteKH9i3cTrXSjtObvFIZhbv9xox4zM= Received: from rios-cad122.hadoop.rioslab.org ( [58.60.1.26]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 26 Jan 2024 14:46:22 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: 0vfWcIgh24wLVr6iAbCp+TqNJTQqSMAILl/o1NINfQusug5nQJPLIbZkAHR3n qnGHYnm9C+c7dsK8UiWjSVaboC6phqJFLGS9S4n1DvCSL97XTYMakU7ZsYsegOskVa45KU5 iLFso1/ZCVQsdoMpqeyFL/1v8SyuLsmnFWrkFU0MuLHcIDEI3auwiBBGwxiNWLPYJIIuF2t 2rClg098RzlirCIhg5ATg4IiCMqjphGgBsaHQic8i7wvoYZsbXEF/ORjDVVOEFETSOd2cuY zG7RIYdRKrwJrpRKGRZDiVQkQ0LdKtJ8sggj5CHbQwv6A7CMeVmjXHhSuc/NdZt4NwIfYP1 IhN4rauF7j8qk03s2Ngd1DI/seeSnCGJG5IoUjXXJNl1YJlx8gj3Sslwz6yzg== X-QQ-GoodBg: 2 X-BIZMAIL-ID: 17531335178270128672 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Cc: Juzhe-Zhong Subject: [Committed V2] RISC-V: Fix incorrect LCM delete bug [VSETVL PASS] Date: Fri, 26 Jan 2024 14:46:21 +0800 Message-Id: <20240126064621.4099391-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=-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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, 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.30 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789134514019211165 X-GMAIL-MSGID: 1789134514019211165 This patch fixes the recent noticed bug in RV32 glibc. We incorrectly deleted a vsetvl: ... and a4,a4,a3 vmv.v.i v1,0 ---> Missed vsetvl cause illegal instruction report. vse8.v v1,0(a5) The root cause the laterin in LCM is incorrect. BB 358: avloc: n_bits = 2, set = {} kill: n_bits = 2, set = {} antloc: n_bits = 2, set = {} transp: n_bits = 2, set = {} avin: n_bits = 2, set = {} avout: n_bits = 2, set = {} del: n_bits = 2, set = {} cause LCM let BB 360 delete the vsetvl: BB 360: avloc: n_bits = 2, set = {} kill: n_bits = 2, set = {} antloc: n_bits = 2, set = {} transp: n_bits = 2, set = {0 1 } avin: n_bits = 2, set = {} avout: n_bits = 2, set = {} del: n_bits = 2, set = {1} Also, remove unknown vsetvl info into local computation since it is unnecessary. Tested on both RV32/RV64 no regression. PR target/113469 gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (pre_vsetvl::compute_lcm_local_properties): Fix bug. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr113469.c: New test. --- gcc/config/riscv/riscv-vsetvl.cc | 19 +++---- .../gcc.target/riscv/rvv/autovec/pr113469.c | 54 +++++++++++++++++++ 2 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113469.c diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index da258b964fc..1a398f02596 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -2543,8 +2543,10 @@ pre_vsetvl::compute_lcm_local_properties () vsetvl_info &header_info = block_info.get_entry_info (); vsetvl_info &footer_info = block_info.get_exit_info (); gcc_assert (footer_info.valid_p () || footer_info.unknown_p ()); - add_expr (m_exprs, header_info); - add_expr (m_exprs, footer_info); + if (header_info.valid_p ()) + add_expr (m_exprs, header_info); + if (footer_info.valid_p ()) + add_expr (m_exprs, footer_info); } int num_exprs = m_exprs.length (); @@ -2699,13 +2701,6 @@ pre_vsetvl::compute_lcm_local_properties () } } - for (const bb_info *bb : crtl->ssa->bbs ()) - { - unsigned bb_index = bb->index (); - bitmap_ior (m_kill[bb_index], m_transp[bb_index], m_avloc[bb_index]); - bitmap_not (m_kill[bb_index], m_kill[bb_index]); - } - for (const bb_info *bb : crtl->ssa->bbs ()) { unsigned bb_index = bb->index (); @@ -2714,6 +2709,12 @@ pre_vsetvl::compute_lcm_local_properties () bitmap_clear (m_antloc[bb_index]); bitmap_clear (m_transp[bb_index]); } + /* Compute ae_kill for each basic block using: + + ~(TRANSP | COMP) + */ + bitmap_ior (m_kill[bb_index], m_transp[bb_index], m_avloc[bb_index]); + bitmap_not (m_kill[bb_index], m_kill[bb_index]); } } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113469.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113469.c new file mode 100644 index 00000000000..d1c118c02d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113469.c @@ -0,0 +1,54 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32d -O3 -fno-vect-cost-model" } */ + +struct a { + int b; + int c : 1; + int : 1; +} d(); +typedef struct +{ + int e; + struct { + int f; + }; +} g; +int i; +char k, l, n; +void *m; +char *o; +void h(); +char *j(); +void p(int buf, __builtin_va_list ab, int q) { + do { + void *r[] = {&&s, &&t, &&u, &&v, &&w}; + int c; + goto *m; + s: + c = 1; + while (1) { + t: + u: + ae: + void *af = __builtin_va_arg(ab, void *); + h(p); + o = j(i); + if (o == 0) + goto ae; + l = 'S'; + break; + v: + g ah; + __builtin_memset(&ah, '\0', sizeof(g)); + h(n, __builtin_va_arg(ab, int), &ah); + break; + w: + if (__builtin_expect(q, 0)) + c = 0; + struct a ai = {'S', c}; + d(buf, ai, af); + } + } while (k); +} + +/* { dg-final { scan-assembler-times {vsetivli\tzero,\s*4,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 2 } } */