From patchwork Sat May 11 13:14:12 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: 1934145 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 4Vc5p51mwKz20fc for ; Sat, 11 May 2024 23:15:09 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 64B8438708F5 for ; Sat, 11 May 2024 13:15:05 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) by sourceware.org (Postfix) with ESMTPS id 42ABF3858403 for ; Sat, 11 May 2024 13:14:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 42ABF3858403 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 42ABF3858403 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=54.207.19.206 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715433281; cv=none; b=O2ORKs48ob9xmMi7yDijTiieI/58kzXnEaaJ0HDTv5ghgHq38TRbC4afca21wMvC3nZnQKnZcCQCQ1Er5D2NBcGmcGtDcQPsRotTOv8s5GuSgQQH4criruCnMrGt/U8E3LezRn7kDs0EXBciFRskhJ23WpEZ3KQ0cBaMbssP0ts= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715433281; c=relaxed/simple; bh=ZWwD5CjNpJNJzEzvSLUb+pEQvFskRY15NznooKbQNPw=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=vF3i/azFsLA53TP8c/69xWOlcIj+j8lTT55HpGRUpzi/qSH475JmKhHv7/5TbhEr6KgZ+JkImdRkgHr9Wa+9LcXC6r/L10R0Ov7GeC2XEo0UCSHpHpVfQ7M9OlbGc5ztSjcb7kghDAEcW74rSmGkXX8lA4ZKMxthbEeISTqIp6o= ARC-Authentication-Results: i=1; server2.sourceware.org X-QQ-mid: bizesmtp87t1715433268tpq7vcqm X-QQ-Originating-IP: vv/qFct8hipkGhWqyoYrHNdOKqRgX33Py4fptmqoEm0= Received: from rios-cad121.hadoop.rioslab.org ( [58.60.1.28]) by bizesmtp.qq.com (ESMTP) with id ; Sat, 11 May 2024 21:14:27 +0800 (CST) X-QQ-SSF: 01400000000000H0V000000A0000000 X-QQ-FEAT: xo0edGM1fUiFc7ayv+D23gPyOK8c9isGrkSLNH/XAucGR7AlIM2pmWA38frPh Il+M6hYodTnCruaqDxjV2lVGxheP/tssDeSPijhvS8Oxyii+1+WQHbk25kulXMtd2g+qAiZ 7xjI6FPeR/ZqjcZhXGqd8HsQSQcYamgErFFgrXbj2PdUZTbA5BML2fi8hGSdiEU6QuxAkd/ TD/yYiLFVNut1agqV5peku1CYGFGgbJdVslIY4e5N+jepHVNc2zXxxJ16TRlEjfjSSKlmJo BmL0N2FajFEqbWzKddAz4oxooHdu139E4tBW7SVDKUAwtF/Snn+t5rMFTBdJlaL6K1HdArg aai/ebb5xgzD+c4VWp/Ah4S4CAXeHR2o9H1T8Kw5bxxQXZdWe/HegYnu90vx/tGXkVmZ58v tXK8kLdHqcCwXCSHP0XnGQ== X-QQ-GoodBg: 2 X-BIZMAIL-ID: 816537341854908239 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Cc: vmakarov@redhat.com, richard.sandiford@arm.com, jin.xia@rivai.ai, Juzhe-Zhong , Lehua Ding Subject: [SUBREG V3 3/4] IRA: Add DF_LIVE_SUBREG problem Date: Sat, 11 May 2024 21:14:12 +0800 Message-Id: <20240511131413.3394912-4-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.3 In-Reply-To: <20240511131413.3394912-1-juzhe.zhong@rivai.ai> References: <20240511131413.3394912-1-juzhe.zhong@rivai.ai> MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, TXREP, URIBL_BLACK 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 This patch simple replace df_get_live_in to df_get_subreg_live_in and replace df_get_live_out to df_get_subreg_live_out. Co-authored-by: Lehua Ding gcc/ChangeLog: * ira-build.cc (create_bb_allocnos): Apply DF_LIVE_SUBREG data. (create_loop_allocnos): Diito. * ira-color.cc (ira_loop_edge_freq): Diito. * ira-emit.cc (generate_edge_moves): Diito. (add_ranges_and_copies): Diito. * ira-lives.cc (process_out_of_region_eh_regs): Diito. (add_conflict_from_region_landing_pads): Diito. (process_bb_node_lives): Diito. * ira.cc (find_moveable_pseudos): Diito. (interesting_dest_for_shprep_1): Diito. (allocate_initial_values): Diito. (ira): Diito. --- gcc/ira-build.cc | 7 ++++--- gcc/ira-color.cc | 8 ++++---- gcc/ira-emit.cc | 12 ++++++------ gcc/ira-lives.cc | 7 ++++--- gcc/ira.cc | 19 ++++++++++++------- 5 files changed, 30 insertions(+), 23 deletions(-) diff --git a/gcc/ira-build.cc b/gcc/ira-build.cc index ea593d5a087..283ff36d3dd 100644 --- a/gcc/ira-build.cc +++ b/gcc/ira-build.cc @@ -1921,7 +1921,8 @@ create_bb_allocnos (ira_loop_tree_node_t bb_node) create_insn_allocnos (PATTERN (insn), NULL, false); /* It might be a allocno living through from one subloop to another. */ - EXECUTE_IF_SET_IN_REG_SET (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, i, bi) + EXECUTE_IF_SET_IN_REG_SET (df_get_subreg_live_in (bb), FIRST_PSEUDO_REGISTER, + i, bi) if (ira_curr_regno_allocno_map[i] == NULL) ira_create_allocno (i, false, ira_curr_loop_tree_node); } @@ -1937,9 +1938,9 @@ create_loop_allocnos (edge e) bitmap_iterator bi; ira_loop_tree_node_t parent; - live_in_regs = df_get_live_in (e->dest); + live_in_regs = df_get_subreg_live_in (e->dest); border_allocnos = ira_curr_loop_tree_node->border_allocnos; - EXECUTE_IF_SET_IN_REG_SET (df_get_live_out (e->src), + EXECUTE_IF_SET_IN_REG_SET (df_get_subreg_live_out (e->src), FIRST_PSEUDO_REGISTER, i, bi) if (bitmap_bit_p (live_in_regs, i)) { diff --git a/gcc/ira-color.cc b/gcc/ira-color.cc index b9ae32d1b4d..bfebc48ef83 100644 --- a/gcc/ira-color.cc +++ b/gcc/ira-color.cc @@ -2786,8 +2786,8 @@ ira_loop_edge_freq (ira_loop_tree_node_t loop_node, int regno, bool exit_p) FOR_EACH_EDGE (e, ei, loop_node->loop->header->preds) if (e->src != loop_node->loop->latch && (regno < 0 - || (bitmap_bit_p (df_get_live_out (e->src), regno) - && bitmap_bit_p (df_get_live_in (e->dest), regno)))) + || (bitmap_bit_p (df_get_subreg_live_out (e->src), regno) + && bitmap_bit_p (df_get_subreg_live_in (e->dest), regno)))) freq += EDGE_FREQUENCY (e); } else @@ -2795,8 +2795,8 @@ ira_loop_edge_freq (ira_loop_tree_node_t loop_node, int regno, bool exit_p) auto_vec edges = get_loop_exit_edges (loop_node->loop); FOR_EACH_VEC_ELT (edges, i, e) if (regno < 0 - || (bitmap_bit_p (df_get_live_out (e->src), regno) - && bitmap_bit_p (df_get_live_in (e->dest), regno))) + || (bitmap_bit_p (df_get_subreg_live_out (e->src), regno) + && bitmap_bit_p (df_get_subreg_live_in (e->dest), regno))) freq += EDGE_FREQUENCY (e); } diff --git a/gcc/ira-emit.cc b/gcc/ira-emit.cc index d347f11fa02..8075b082e36 100644 --- a/gcc/ira-emit.cc +++ b/gcc/ira-emit.cc @@ -510,8 +510,8 @@ generate_edge_moves (edge e) return; src_map = src_loop_node->regno_allocno_map; dest_map = dest_loop_node->regno_allocno_map; - regs_live_in_dest = df_get_live_in (e->dest); - regs_live_out_src = df_get_live_out (e->src); + regs_live_in_dest = df_get_subreg_live_in (e->dest); + regs_live_out_src = df_get_subreg_live_out (e->src); EXECUTE_IF_SET_IN_REG_SET (regs_live_in_dest, FIRST_PSEUDO_REGISTER, regno, bi) if (bitmap_bit_p (regs_live_out_src, regno)) @@ -1229,16 +1229,16 @@ add_ranges_and_copies (void) destination block) to use for searching allocnos by their regnos because of subsequent IR flattening. */ node = IRA_BB_NODE (bb)->parent; - bitmap_copy (live_through, df_get_live_in (bb)); + bitmap_copy (live_through, df_get_subreg_live_in (bb)); add_range_and_copies_from_move_list (at_bb_start[bb->index], node, live_through, REG_FREQ_FROM_BB (bb)); - bitmap_copy (live_through, df_get_live_out (bb)); + bitmap_copy (live_through, df_get_subreg_live_out (bb)); add_range_and_copies_from_move_list (at_bb_end[bb->index], node, live_through, REG_FREQ_FROM_BB (bb)); FOR_EACH_EDGE (e, ei, bb->succs) { - bitmap_and (live_through, - df_get_live_in (e->dest), df_get_live_out (bb)); + bitmap_and (live_through, df_get_subreg_live_in (e->dest), + df_get_subreg_live_out (bb)); add_range_and_copies_from_move_list ((move_t) e->aux, node, live_through, REG_FREQ_FROM_EDGE_FREQ (EDGE_FREQUENCY (e))); diff --git a/gcc/ira-lives.cc b/gcc/ira-lives.cc index e07d3dc3e89..7641184069d 100644 --- a/gcc/ira-lives.cc +++ b/gcc/ira-lives.cc @@ -1254,7 +1254,8 @@ process_out_of_region_eh_regs (basic_block bb) if (! eh_p) return; - EXECUTE_IF_SET_IN_BITMAP (df_get_live_out (bb), FIRST_PSEUDO_REGISTER, i, bi) + EXECUTE_IF_SET_IN_BITMAP (df_get_subreg_live_out (bb), FIRST_PSEUDO_REGISTER, + i, bi) { ira_allocno_t a = ira_curr_regno_allocno_map[i]; for (int n = ALLOCNO_NUM_OBJECTS (a) - 1; n >= 0; n--) @@ -1288,7 +1289,7 @@ add_conflict_from_region_landing_pads (eh_region region, ira_object_t obj, if ((landing_label = lp->landing_pad) != NULL && (landing_bb = BLOCK_FOR_INSN (landing_label)) != NULL && (region->type != ERT_CLEANUP - || bitmap_bit_p (df_get_live_in (landing_bb), + || bitmap_bit_p (df_get_subreg_live_in (landing_bb), ALLOCNO_REGNO (a)))) { HARD_REG_SET new_conflict_regs @@ -1325,7 +1326,7 @@ process_bb_node_lives (ira_loop_tree_node_t loop_tree_node) high_pressure_start_point[ira_pressure_classes[i]] = -1; } curr_bb_node = loop_tree_node; - reg_live_out = df_get_live_out (bb); + reg_live_out = df_get_subreg_live_out (bb); sparseset_clear (objects_live); REG_SET_TO_HARD_REG_SET (hard_regs_live, reg_live_out); hard_regs_live &= ~(eliminable_regset | ira_no_alloc_regs); diff --git a/gcc/ira.cc b/gcc/ira.cc index 5642aea3caa..bebf6bb3e9b 100644 --- a/gcc/ira.cc +++ b/gcc/ira.cc @@ -4735,8 +4735,8 @@ find_moveable_pseudos (void) bitmap_initialize (local, 0); bitmap_initialize (transp, 0); bitmap_initialize (moveable, 0); - bitmap_copy (live, df_get_live_out (bb)); - bitmap_and_into (live, df_get_live_in (bb)); + bitmap_copy (live, df_get_subreg_live_out (bb)); + bitmap_and_into (live, df_get_subreg_live_in (bb)); bitmap_copy (transp, live); bitmap_clear (moveable); bitmap_clear (live); @@ -5036,7 +5036,8 @@ interesting_dest_for_shprep_1 (rtx set, basic_block call_dom) rtx dest = SET_DEST (set); if (!REG_P (src) || !HARD_REGISTER_P (src) || !REG_P (dest) || HARD_REGISTER_P (dest) - || (call_dom && !bitmap_bit_p (df_get_live_in (call_dom), REGNO (dest)))) + || (call_dom + && !bitmap_bit_p (df_get_subreg_live_in (call_dom), REGNO (dest)))) return NULL; return dest; } @@ -5514,10 +5515,12 @@ allocate_initial_values (void) /* Update global register liveness information. */ FOR_EACH_BB_FN (bb, cfun) { - if (REGNO_REG_SET_P (df_get_live_in (bb), regno)) - SET_REGNO_REG_SET (df_get_live_in (bb), new_regno); - if (REGNO_REG_SET_P (df_get_live_out (bb), regno)) - SET_REGNO_REG_SET (df_get_live_out (bb), new_regno); + if (REGNO_REG_SET_P (df_get_subreg_live_in (bb), regno)) + SET_REGNO_REG_SET (df_get_subreg_live_in (bb), + new_regno); + if (REGNO_REG_SET_P (df_get_subreg_live_out (bb), regno)) + SET_REGNO_REG_SET (df_get_subreg_live_out (bb), + new_regno); } } } @@ -5679,6 +5682,8 @@ ira (FILE *f) if (optimize > 1) df_remove_problem (df_live); gcc_checking_assert (df_live == NULL); + if (flag_track_subreg_liveness) + df_live_subreg_add_problem (); if (flag_checking) df->changeable_flags |= DF_VERIFY_SCHEDULED;