Message ID | ZJm82eCPnJ4r8nrP@kam.mff.cuni.cz |
---|---|
State | New |
Headers | show |
Series | Fix profile of forwardes produced by cd-dce | expand |
On Mon, 26 Jun 2023, Jan Hubicka wrote: > Hi, > compiling the testcase from PR109849 (which uses std:vector based stack to > drive a loop) with profile feedbakc leads to profile mismatches introduced by > tree-ssa-dce. This is the new code to produce unified forwarder blocks for > PHIs. > > I am not including the testcase itself since > checking it for Invalid sum is probably going to be too fragile and this should > show in our LNT testers. The patch however fixes the mismatch. > > Bootstrapped/regtested x86_64-linux and plan to commit it shortly. Thanks - can you also fix affected branches? Richard. > gcc/ChangeLog: > > PR tree-optimization/109849 > * tree-ssa-dce.cc (make_forwarders_with_degenerate_phis): Fix profile > count of newly constructed forwarder block. > > diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc > index 2949957f883..f0b02456132 100644 > --- a/gcc/tree-ssa-dce.cc > +++ b/gcc/tree-ssa-dce.cc > @@ -1865,12 +1865,15 @@ make_forwarders_with_degenerate_phis (function *fn) > } > free_dominance_info (fn, CDI_DOMINATORS); > basic_block forwarder = split_edge (args[start].first); > + profile_count count = profile_count::zero (); > for (unsigned j = start + 1; j < i; ++j) > { > edge e = args[j].first; > redirect_edge_and_branch_force (e, forwarder); > redirect_edge_var_map_clear (e); > + count += e->count (); > } > + forwarder->count = count; > if (vphi) > { > tree def = copy_ssa_name (vphi_args[0]); >
diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc index 2949957f883..f0b02456132 100644 --- a/gcc/tree-ssa-dce.cc +++ b/gcc/tree-ssa-dce.cc @@ -1865,12 +1865,15 @@ make_forwarders_with_degenerate_phis (function *fn) } free_dominance_info (fn, CDI_DOMINATORS); basic_block forwarder = split_edge (args[start].first); + profile_count count = profile_count::zero (); for (unsigned j = start + 1; j < i; ++j) { edge e = args[j].first; redirect_edge_and_branch_force (e, forwarder); redirect_edge_var_map_clear (e); + count += e->count (); } + forwarder->count = count; if (vphi) { tree def = copy_ssa_name (vphi_args[0]);