Committed, thanks Kito. Pan
-----Original Message----- From: Gcc-patches <gcc-patches-bounces+pan2.li=intel....@gcc.gnu.org> On Behalf Of Kito Cheng via Gcc-patches Sent: Monday, August 28, 2023 8:59 PM To: Juzhe-Zhong <juzhe.zh...@rivai.ai> Cc: GCC Patches <gcc-patches@gcc.gnu.org>; Kito Cheng <kito.ch...@gmail.com> Subject: Re: [PATCH] RISC-V: Fix uninitialized probability for GIMPLE IR tests LGTM Juzhe-Zhong <juzhe.zh...@rivai.ai> 於 2023年8月28日 週一 19:40 寫道: > This patch fix unitialized probability in GIMPLE IR code tests: > FAIL: gcc.dg/vect/slp-reduc-10a.c (internal compiler error: in > compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10a.c (test for excess errors) > FAIL: gcc.dg/vect/slp-reduc-10a.c -flto -ffat-lto-objects (internal > compiler error: in compute_probabilities, at > config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10a.c -flto -ffat-lto-objects (test for excess > errors) > FAIL: gcc.dg/vect/slp-reduc-10b.c (internal compiler error: in > compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10b.c (test for excess errors) > FAIL: gcc.dg/vect/slp-reduc-10b.c -flto -ffat-lto-objects (internal > compiler error: in compute_probabilities, at > config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10b.c -flto -ffat-lto-objects (test for excess > errors) > FAIL: gcc.dg/vect/slp-reduc-10c.c (internal compiler error: in > compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10c.c (test for excess errors) > FAIL: gcc.dg/vect/slp-reduc-10c.c -flto -ffat-lto-objects (internal > compiler error: in compute_probabilities, at > config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10c.c -flto -ffat-lto-objects (test for excess > errors) > FAIL: gcc.dg/vect/slp-reduc-10d.c (internal compiler error: in > compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10d.c (test for excess errors) > FAIL: gcc.dg/vect/slp-reduc-10d.c -flto -ffat-lto-objects (internal > compiler error: in compute_probabilities, at > config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10d.c -flto -ffat-lto-objects (test for excess > errors) > FAIL: gcc.dg/vect/slp-reduc-10e.c (internal compiler error: in > compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10e.c (test for excess errors) > FAIL: gcc.dg/vect/slp-reduc-10e.c -flto -ffat-lto-objects (internal > compiler error: in compute_probabilities, at > config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/slp-reduc-10e.c -flto -ffat-lto-objects (test for excess > errors) > FAIL: gcc.dg/vect/vect-cond-arith-2.c (internal compiler error: in > compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/vect-cond-arith-2.c (test for excess errors) > FAIL: gcc.dg/vect/vect-cond-arith-2.c -flto -ffat-lto-objects (internal > compiler error: in compute_probabilities, at > config/riscv/riscv-vsetvl.cc:4358) > FAIL: gcc.dg/vect/vect-cond-arith-2.c -flto -ffat-lto-objects (test for > excess errors) > > gcc/ChangeLog: > > * config/riscv/riscv-vsetvl.cc (pass_vsetvl::earliest_fusion): > Skip never probability. > (pass_vsetvl::compute_probabilities): Fix unitialized probability. > > --- > gcc/config/riscv/riscv-vsetvl.cc | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/riscv/riscv-vsetvl.cc > b/gcc/config/riscv/riscv-vsetvl.cc > index 48e89fe2c03..f7ae6c16bee 100644 > --- a/gcc/config/riscv/riscv-vsetvl.cc > +++ b/gcc/config/riscv/riscv-vsetvl.cc > @@ -3272,6 +3272,10 @@ pass_vsetvl::earliest_fusion (void) > if (expr.empty_p ()) > continue; > edge eg = INDEX_EDGE (m_vector_manager->vector_edge_list, ed); > + /* If it is the edge that we never reach, skip its possible PRE > + fusion conservatively. */ > + if (eg->probability == profile_probability::never ()) > + break; > if (eg->src == ENTRY_BLOCK_PTR_FOR_FN (cfun) > || eg->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)) > break; > @@ -4359,7 +4363,14 @@ pass_vsetvl::compute_probabilities (void) > FOR_EACH_EDGE (e, ei, cfg_bb->succs) > { > auto &new_prob = get_block_info (e->dest).probability; > - if (!new_prob.initialized_p ()) > + /* Normally, the edge probability should be initialized. > + However, some special testing code which is written in > + GIMPLE IR style force the edge probility uninitialized, > + we conservatively set it as never so that it will not > + affect PRE (Phase 3 && Phse 4). */ > + if (!e->probability.initialized_p ()) > + new_prob = profile_probability::never (); > + else if (!new_prob.initialized_p ()) > new_prob = curr_prob * e->probability; > else if (new_prob == profile_probability::always ()) > continue; > -- > 2.36.3 > >