diff mbox series

math-opts: Add dbgcounter for FMA formation

Message ID ri65y4m3p7o.fsf@suse.cz
State New
Headers show
Series math-opts: Add dbgcounter for FMA formation | expand

Commit Message

Martin Jambor Sept. 7, 2023, 4:47 p.m. UTC
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?

Thanks,

Martin



gcc/ChangeLog:

2023-09-06  Martin Jambor  <mjambor@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(+)

Comments

Richard Biener Sept. 12, 2023, 9:52 a.m. UTC | #1
On Thu, Sep 7, 2023 at 6:47 PM Martin Jambor <mjambor@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  <mjambor@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
>
diff mbox series

Patch

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