Hello All: This patch marked LOOP_DATA->live as the livein at the loop header basic block. This is because Livein at each basic block is live in at the loop header.
Bootstrapped and regtested on powerpc64-linux-gnu. SPEC CPU 2017 benchmarks score is better than trunk wit this change for INT and FP benchmarks. THanks & Regards Ajit rtl-optimization: Modify loop live data with livein of loop header Livein at each basic block is live in at the loop header. Marked LOOP_DATA->live as the livein at the loop header basic block. 2023-11-21 Ajit Kumar Agarwal <aagar...@linux.ibm.com> gcc/ChangeLog: * loop-invariant.cc (calculate_loop_reg_pressure): Mark LOOP_DATA->live as the livein at the loop header basic block. --- gcc/loop-invariant.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/gcc/loop-invariant.cc b/gcc/loop-invariant.cc index a9b156682bc..c15e6168d5d 100644 --- a/gcc/loop-invariant.cc +++ b/gcc/loop-invariant.cc @@ -2169,17 +2169,18 @@ calculate_loop_reg_pressure (void) } ira_setup_eliminable_regset (); bitmap_initialize (&curr_regs_live, ®_obstack); + + /* Livein (loop_hdr) is live at each of the loop basic blocks. */ + for (auto loop : loops_list (cfun, 0)) + if (loop->aux == NULL) + bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (loop->header)); + FOR_EACH_BB_FN (bb, cfun) { curr_loop = bb->loop_father; if (curr_loop == current_loops->tree_root) continue; - for (class loop *loop = curr_loop; - loop != current_loops->tree_root; - loop = loop_outer (loop)) - bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (bb)); - bitmap_copy (&curr_regs_live, DF_LR_IN (bb)); for (i = 0; i < ira_pressure_classes_num; i++) curr_reg_pressure[ira_pressure_classes[i]] = 0; -- 2.39.3