On Thu, Sep 7, 2023 at 6:47 PM Martin Jambor <mjam...@suse.cz> wrote: > > Hello, > > This patch is a simple addition of a debug counter to FMA formation in > tree-ssa-math-opts.cc. Given that issues with FMAs do occasionally > pop up, it seems genuinely useful. > > I simply added an if right after the initial checks in > convert_mult_to_fma even though when FMA formation deferring is > active (i.e. when targeting Zen CPUs) this would interact with it (and > at this moment lead to producing all deferred candidates), so when > using the dbg counter to find a harmful set of FMAs, it is probably > best to also set param_avoid_fma_max_bits to zero. I could not find a > better place which would not also make the code unnecessarily more > complicated. > > Bootstrapped and tested on x86_64-linux. OK for master?
OK. > Thanks, > > Martin > > > > gcc/ChangeLog: > > 2023-09-06 Martin Jambor <mjam...@suse.cz> > > * dbgcnt.def (form_fma): New. > * tree-ssa-math-opts.cc: Include dbgcnt.h. > (convert_mult_to_fma): Bail out if the debug counter say so. > --- > gcc/dbgcnt.def | 1 + > gcc/tree-ssa-math-opts.cc | 4 ++++ > 2 files changed, 5 insertions(+) > > diff --git a/gcc/dbgcnt.def b/gcc/dbgcnt.def > index 9e2f1d857b4..871cbf75d93 100644 > --- a/gcc/dbgcnt.def > +++ b/gcc/dbgcnt.def > @@ -162,6 +162,7 @@ DEBUG_COUNTER (dom_unreachable_edges) > DEBUG_COUNTER (dse) > DEBUG_COUNTER (dse1) > DEBUG_COUNTER (dse2) > +DEBUG_COUNTER (form_fma) > DEBUG_COUNTER (gcse2_delete) > DEBUG_COUNTER (gimple_unroll) > DEBUG_COUNTER (global_alloc_at_func) > diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc > index 95c22694368..3db69ad5733 100644 > --- a/gcc/tree-ssa-math-opts.cc > +++ b/gcc/tree-ssa-math-opts.cc > @@ -116,6 +116,7 @@ along with GCC; see the file COPYING3. If not see > #include "targhooks.h" > #include "domwalk.h" > #include "tree-ssa-math-opts.h" > +#include "dbgcnt.h" > > /* This structure represents one basic block that either computes a > division, or is a common dominator for basic block that compute a > @@ -3366,6 +3367,9 @@ convert_mult_to_fma (gimple *mul_stmt, tree op1, tree > op2, > && !has_single_use (mul_result)) > return false; > > + if (!dbg_cnt (form_fma)) > + return false; > + > /* Make sure that the multiplication statement becomes dead after > the transformation, thus that all uses are transformed to FMAs. > This means we assume that an FMA operation has the same cost > -- > 2.41.0 >