From patchwork Wed Dec 13 05:48:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?6ZKf5bGF5ZOy?= X-Patchwork-Id: 82023 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 295813857001 for ; Wed, 13 Dec 2023 05:48:41 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbgau2.qq.com (smtpbgau2.qq.com [54.206.34.216]) by sourceware.org (Postfix) with ESMTPS id 70B9B3858D39 for ; Wed, 13 Dec 2023 05:48:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 70B9B3858D39 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 70B9B3858D39 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=54.206.34.216 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702446506; cv=none; b=qOrUc2AHoK5RLRE43oQnh5SyUCiCL6lwfwkuOsIHxCx14JoYZv1czJ3NeH6cGuhBWUQfyWznieaOqNFKyP+V9lTz6+SDcE1OtDkzWd/gQwq+Ckn0/8a/+hTr972pyGivmGojg9jbHlAolOCskEEQJYWCExSnA8ibEcLJdX41Rds= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702446506; c=relaxed/simple; bh=8mmYMjMvks+9leVyYZl4NecZqwcSrbia1fdFUlyV7kk=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=C4mo/I0kke/n73YrRKQSU9g8Cjc6AWE2oFetPKFBCU1/vG8F4NlTp0GLoa+4bI9XCT+qZYdVwLKlQXQRM48fips4DSYlPaiFP9DxvqFsTv+ra7WRLPQAGEBhqBiV6Xc+e8dva7NCyqthl2/a2Z1bbXf4PKPWgpCpFRtLhIlIpXA= ARC-Authentication-Results: i=1; server2.sourceware.org X-QQ-mid: bizesmtp72t1702446494txz5kou7 Received: from rios-cad5.localdomain ( [58.60.1.25]) by bizesmtp.qq.com (ESMTP) with id ; Wed, 13 Dec 2023 13:48:12 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: qcKkmz/zJhzmQbbKoliQTyk8PEzs6Y7u3jdbLOFaOzreNFeJddr9XF+Qn7Ar1 OYA90y9Fm6lRsWDV92CA0ZBzV3MPtgo2cht/qsw8vPwasVhNVG3sBStr+hvGlzrHE82Yt0f R9PfbuzuzrLVuGNq78tloYKEs8UPOLsde7K3jJFzkJs1MS5mVMl6dlZgTzP9N8JSZhoA1jw 9H5n/FLct9MClgsJEhQN7MdQNf7nQ+ZvB5/m2JgBWnAgDNDXkMkmoqJOl2mYt2QttBFm+iT Ma13RqZ3YNj8jWgv/VEMBVS2vcqwf7HOKHCzh9LnX3+CzNr83RZkUgbqNzs5Q203dkOK0LH 4Qsa7sk1nrFdUTNvEv/KzQkvg3AmeLINv2+q5hBrd9DbUrEffFiVDCYJ9Pb2EAOgOCDVoET X-QQ-GoodBg: 2 X-BIZMAIL-ID: 4251537942734550929 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: Postpone full available optimization [VSETVL PASS] Date: Wed, 13 Dec 2023 13:48:11 +0800 Message-Id: <20231213054811.331836-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=-6.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, LIKELY_SPAM_BODY, RCVD_IN_ABUSEAT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SBL_CSS, 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+patchwork=sourceware.org@gcc.gnu.org Fix VSETVL BUG that AVL is polluted .L15: li a3,9 lui a4,%hi(s) sw a3,%lo(j)(t2) sh a5,%lo(s)(a4) <--a4 is hold the address of s beq t0,zero,.L42 sw t5,8(t4) vsetvli zero,a4,e8,m8,ta,ma <<--- a4 as avl Actually, this vsetvl is redundant. The root cause we include full available optimization in LCM local data computation. full available optimization should be after LCM computation. PR target/112929 PR target/112988 gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (pre_vsetvl::compute_lcm_local_properties): Remove full available. (pre_vsetvl::pre_global_vsetvl_info): Add full available optimization. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vsetvl/pr112929.c: New test. * gcc.target/riscv/rvv/vsetvl/pr112988.c: New test. --- gcc/config/riscv/riscv-vsetvl.cc | 14 +++- .../gcc.target/riscv/rvv/vsetvl/pr112929.c | 58 ++++++++++++++++ .../gcc.target/riscv/rvv/vsetvl/pr112988.c | 69 +++++++++++++++++++ 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112929.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112988.c diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index ed5a2b58ab0..6af8d8429ab 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -2723,8 +2723,7 @@ pre_vsetvl::compute_lcm_local_properties () vsetvl_info &header_info = block_info.get_entry_info (); vsetvl_info &footer_info = block_info.get_exit_info (); - if (header_info.valid_p () - && (anticipated_exp_p (header_info) || block_info.full_available)) + if (header_info.valid_p () && anticipated_exp_p (header_info)) bitmap_set_bit (m_antloc[bb_index], get_expr_index (m_exprs, header_info)); @@ -3224,6 +3223,17 @@ pre_vsetvl::pre_global_vsetvl_info () info.set_delete (); } + /* Remove vsetvl infos if all precessors are available to the block. */ + for (const bb_info *bb : crtl->ssa->bbs ()) + { + vsetvl_block_info &block_info = get_block_info (bb); + if (block_info.empty_p () || !block_info.full_available) + continue; + + vsetvl_info &info = block_info.get_entry_info (); + info.set_delete (); + } + for (const bb_info *bb : crtl->ssa->bbs ()) { vsetvl_block_info &block_info = get_block_info (bb); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112929.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112929.c new file mode 100644 index 00000000000..0435e5dbc56 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112929.c @@ -0,0 +1,58 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +int printf(char *, ...); +int a, l, i, p, q, t, n, o; +int *volatile c; +static int j; +static struct pack_1_struct d; +long e; +char m = 5; +short s; + +#pragma pack(1) +struct pack_1_struct { + long c; + int d; + int e; + int f; + int g; + int h; + int i; +} h, r = {1}, *f = &h, *volatile g; + +void add_em_up(int count, ...) { + __builtin_va_list ap; + __builtin_va_start(ap, count); + __builtin_va_end(ap); +} + +int main() { + int u; + j = 0; + + for (; j < 9; ++j) { + u = ++t ? a : 0; + if (u) { + int *v = &d.d; + *v = g || e; + *c = 0; + *f = h; + } + s = l && c; + o = i; + d.f || (p = 0); + q |= n; + } + + r = *f; + + add_em_up(1, 1); + + printf("%d\n", m); +} + +/* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-not {vsetivli} } } */ +/* { dg-final { scan-assembler-times {vsetvli\tzero,\s*[a-x0-9]+,\s*e8,\s*m8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {li\t[a-x0-9]+,\s*32} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112988.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112988.c new file mode 100644 index 00000000000..6f983ef8bb5 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr112988.c @@ -0,0 +1,69 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +int a = 0; +int p, q, r, x = 230; +short d; +int e[256]; +static struct f w; +int *c = &r; + +short y(short z) { + return z * d; +} + +#pragma pack(1) +struct f { + int g; + short h; + int j; + char k; + char l; + long m; + long n; + int o; +} s = {1}, v, t, *u = &v, *b = &s; + +void add_em_up(int count, ...) { + __builtin_va_list ap; + __builtin_va_start(ap, count); + __builtin_va_end(ap); +} + +int main() { + int i = 0; + for (; i < 256; i++) + e[i] = i; + + p = 0; + for (; p <= 0; p++) { + *c = 4; + *u = t; + x |= y(6 >= q); + } + + *b = w; + + add_em_up(1, 1); + + if (a != 0) + return 1; + if (q != 0) + return 2; + if (p != 1) + return 3; + if (r != 4) + return 4; + if (x != 0xE6) + return 5; + if (d != 0) + return 6; + + return 0; +} + +/* { dg-final { scan-assembler-times {vsetvli} 1 } } */ +/* { dg-final { scan-assembler-times {vsetivli} 1 } } */ +/* { dg-final { scan-assembler-times {vsetivli\tzero,\s*4,\s*e32,\s*m1,\s*t[au],\s*m[au]} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\tzero,\s*[a-x0-9]+,\s*e8,\s*m8,\s*t[au],\s*m[au]} 1 } } */ +/* { dg-final { scan-assembler-times {li\t[a-x0-9]+,\s*32} 1 } } */