From patchwork Fri Jan 26 08:33:06 2024 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: 1891177 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TLrk3432rz23dy for ; Fri, 26 Jan 2024 19:40:26 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BBC0D385802F for ; Fri, 26 Jan 2024 08:40:23 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbgau1.qq.com (smtpbgau1.qq.com [54.206.16.166]) by sourceware.org (Postfix) with ESMTPS id A06073858C2C for ; Fri, 26 Jan 2024 08:33:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A06073858C2C 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 A06073858C2C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=54.206.16.166 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706258002; cv=none; b=DQV2XIU4OncebXx4yzkkmBMVT5nuPryiY/NE3f84bytcbPdHdibRkkoJ7I/QvQg/5/cwYYa+AsvUJNXsm1q/GhUnuOttA2EIWog5Vzic5X7X52R3b6aDAQQ2ARL+LD1fmdgDgb4pJxZXw64H7UXG/NEGjghBm4OH2RJKYARq+O8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706258002; c=relaxed/simple; bh=VWWaPIaHhe4h0F/cNJ//3ogirunVkxqWId9TSR1kRwU=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=oCZVM6/KhBEaleJwQi7wOAyYIb+tHsIfmSjBs+PtX7JOJRZgGmHQp9BWzbpdwqcftREG65EK8lwu9GVeimmPZYkJxcquFTmgqjpZMScyhZQiFqAQQmcBbpVkueDND5UyZT6ZJw+/ZjVdUQyJUUFYRa4+xI6IEz3UOZA0zyPYKF8= ARC-Authentication-Results: i=1; server2.sourceware.org X-QQ-mid: bizesmtp71t1706257988trw75mmv X-QQ-Originating-IP: 7UU7pXwARCbg1qioyd9EZrgROvxv7370FArdA/ge/Sw= Received: from rios-cad122.hadoop.rioslab.org ( [58.60.1.26]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 26 Jan 2024 16:33:07 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: cvpDInk2tjUq8Z7sqaQ8oQaulNZ4e6rYmMqTlHZGrFSUgPOFJKXGuiXFSym6E n/fxK+tq6EVZtBfFpZ+KXzPy5YKq+w8Cxnh377lU5Mcoo6VvNIm1GWIUCwEkx9tLkdbiaSK LLja//SEQz4pP+eCiMQeiKdam+ZxpsvK8yQ7uViFxoTaG+oNcHY713NrAXPiC7x+qPxoTOe 0r6Ux85hIQAjLhAmVy/yu0Gu4iLwSgDOqnXVdnzeoS7V783OywK7Z1AMUt3h3MBnEgbqs/Q Us72HmJtl9caI8VllCvFmA4QthskhzRYOon8LgobYXoHgv4OstHSreTZdcu00dK0CALaf/R eAByJAUDhW+a6Q2YqU7do8xGZS66hDloJbV/Tdl5C7JFSpJ8LK3/CkYTGumzPQ4k4/Hh7g3 Sko9Df4uQ/0= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 14929878140070746525 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Cc: Juzhe-Zhong Subject: [Committed] RISC-V: Refine some codes of VSETVL PASS [NFC] Date: Fri, 26 Jan 2024 16:33:06 +0800 Message-Id: <20240126083306.4138457-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, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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+incoming=patchwork.ozlabs.org@gcc.gnu.org gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (pre_vsetvl::earliest_fuse_vsetvl_info): Refine some codes. (pre_vsetvl::emit_vsetvl): Ditto. --- gcc/config/riscv/riscv-vsetvl.cc | 69 +++++++++++++------------------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index 1a398f02596..d7b40a5c813 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -2930,28 +2930,19 @@ pre_vsetvl::earliest_fuse_vsetvl_info (int iter) EXECUTE_IF_SET_IN_BITMAP (e, 0, expr_index, sbi) { vsetvl_info &curr_info = *m_exprs[expr_index]; - if (!curr_info.valid_p ()) - continue; - edge eg = INDEX_EDGE (m_edges, ed); - if (eg->probability == profile_probability::never ()) - continue; - if (eg->src == ENTRY_BLOCK_PTR_FOR_FN (cfun) - || eg->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)) - continue; - - /* When multiple set bits in earliest edge, such edge may - have infinite loop in preds or succs or multiple conflict - vsetvl expression which make such edge is unrelated. We - don't perform fusion for such situation. */ - if (bitmap_count_bits (e) != 1) - continue; - vsetvl_block_info &src_block_info = get_block_info (eg->src); vsetvl_block_info &dest_block_info = get_block_info (eg->dest); - if (src_block_info.probability - == profile_probability::uninitialized ()) + if (!curr_info.valid_p () + || eg->probability == profile_probability::never () + || src_block_info.probability + == profile_probability::uninitialized () + /* When multiple set bits in earliest edge, such edge may + have infinite loop in preds or succs or multiple conflict + vsetvl expression which make such edge is unrelated. We + don't perform fusion for such situation. */ + || bitmap_count_bits (e) != 1) continue; if (src_block_info.empty_p ()) @@ -3058,29 +3049,27 @@ pre_vsetvl::earliest_fuse_vsetvl_info (int iter) { vsetvl_info &prev_info = src_block_info.get_exit_info (); if (!prev_info.valid_p () - || m_dem.available_p (prev_info, curr_info)) + || m_dem.available_p (prev_info, curr_info) + || !m_dem.compatible_p (prev_info, curr_info)) continue; - if (m_dem.compatible_p (prev_info, curr_info)) + if (dump_file && (dump_flags & TDF_DETAILS)) { - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, " Fuse curr info since prev info " - "compatible with it:\n"); - fprintf (dump_file, " prev_info: "); - prev_info.dump (dump_file, " "); - fprintf (dump_file, " curr_info: "); - curr_info.dump (dump_file, " "); - } - m_dem.merge (prev_info, curr_info); - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, " prev_info after fused: "); - prev_info.dump (dump_file, " "); - fprintf (dump_file, "\n"); - } - changed = true; + fprintf (dump_file, " Fuse curr info since prev info " + "compatible with it:\n"); + fprintf (dump_file, " prev_info: "); + prev_info.dump (dump_file, " "); + fprintf (dump_file, " curr_info: "); + curr_info.dump (dump_file, " "); + } + m_dem.merge (prev_info, curr_info); + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, " prev_info after fused: "); + prev_info.dump (dump_file, " "); + fprintf (dump_file, "\n"); } + changed = true; } } } @@ -3344,15 +3333,11 @@ pre_vsetvl::emit_vsetvl () { edge eg = INDEX_EDGE (m_edges, ed); sbitmap i = m_insert[ed]; - if (bitmap_count_bits (i) < 1) - continue; - - if (bitmap_count_bits (i) > 1) + if (bitmap_count_bits (i) != 1) /* For code with infinite loop (e.g. pr61634.c), The data flow is completely wrong. */ continue; - gcc_assert (bitmap_count_bits (i) == 1); unsigned expr_index = bitmap_first_set_bit (i); const vsetvl_info &info = *m_exprs[expr_index]; gcc_assert (info.valid_p ());