Re: [PATCH] Add --param=dom-jump-threading to disable DOM jump threading [PR126103]

Richard Biener <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On Mon, 10 Aug 2026, Aldy Hernandez wrote:

> As discussed in PR126103, the first step to removing DOM is untangling
> its threader from the rest of DOM.  I've started auditing what we're
> missing in PRE + backwards threader, and need a way to disable DOM's
> threading for the barrage of PRs I'm about to file.
> 
> We already have a way to disable all jump threads, but no way to
> disable just DOM's.  This patch does jhust this with
> --param=dom-jump-threading=[01].  It's in line with what we
> temporarily did for ranger-threading and ranger VRP.
> 
> The --param disables jump threading in DOM, but everything else DOM
> does is unaffected.
> 
> OK for trunk?

OK.

Richard.

> Tested on ppc64le Linux.
> 
> 	PR tree-optimization/126103
> 
> gcc/ChangeLog:
> 
> 	* doc/params.texi (dom-jump-threading): Document.
> 	* params.opt (-param=dom-jump-threading=): New.
> 	* tree-ssa-dom.cc (dom_opt_dom_walker::after_dom_children): Honor
> 	param_dom_jump_threading.
> 
> gcc/testsuite/ChangeLog:
> 
> 	* gcc.dg/tree-ssa/dom-jump-threading-1.c: New test.
> 	* gcc.dg/tree-ssa/dom-jump-threading-2.c: New test.
> ---
>  gcc/doc/params.texi                           |  6 +++++
>  gcc/params.opt                                |  4 ++++
>  .../gcc.dg/tree-ssa/dom-jump-threading-1.c    | 24 +++++++++++++++++++
>  .../gcc.dg/tree-ssa/dom-jump-threading-2.c    | 22 +++++++++++++++++
>  gcc/tree-ssa-dom.cc                           |  3 ++-
>  5 files changed, 58 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c
> 
> diff --git a/gcc/doc/params.texi b/gcc/doc/params.texi
> index 26b34a59aa9..e69be2d2923 100644
> --- a/gcc/doc/params.texi
> +++ b/gcc/doc/params.texi
> @@ -894,6 +894,12 @@ optimizing.
>  Maximum number of dominators BBs to walk when simplifying loop bounds
>  and conditions.
>  
> +@paindex dom-jump-threading
> +@item dom-jump-threading
> +Enable jump threading in the dominator optimizer pass.  Disabling it
> +is useful to isolate the jump threads found by the backward threader,
> +which runs regardless.
> +
>  @paindex max-jump-thread-duplication-stmts
>  @item max-jump-thread-duplication-stmts
>  Maximum number of statements allowed in a block that needs to be
> diff --git a/gcc/params.opt b/gcc/params.opt
> index 044c4a10bc4..0c6a3e51457 100644
> --- a/gcc/params.opt
> +++ b/gcc/params.opt
> @@ -138,6 +138,10 @@ Probability that COMDAT function is shared with a different compilation unit.
>  Common Joined UInteger Var(param_cxx_max_namespaces_for_diagnostic_help) Init(1000) Param
>  Maximum number of namespaces to search for alternatives when name lookup fails.
>  
> +-param=dom-jump-threading=
> +Common Joined UInteger Var(param_dom_jump_threading) Init(1) IntegerRange(0, 1) Param Optimization
> +Enable jump threading in the dominator optimizer pass.
> +
>  -param=dse-max-alias-queries-per-store=
>  Common Joined UInteger Var(param_dse_max_alias_queries_per_store) Init(256) Param Optimization
>  Maximum number of queries into the alias oracle per store.
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c b/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c
> new file mode 100644
> index 00000000000..a0d0809b176
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c
> @@ -0,0 +1,24 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 --param=dom-jump-threading=0 -fdump-tree-dom2-details -fdump-tree-optimized" } */
> +
> +/* Verify that --param=dom-jump-threading=0 keeps DOM from threading
> +   jumps.  Only DOM can thread a PHI of compares (the backward
> +   threader cannot resolve the exit conditional to a single edge), so
> +   with the param off the join block and its PHI must survive.  */
> +
> +void g (void);
> +
> +void
> +f (int x, int a, int b, int c, int d)
> +{
> +  _Bool t;
> +  if (x)
> +    t = a < b;
> +  else
> +    t = c < d;
> +  if (t)
> +    g ();
> +}
> +
> +/* { dg-final { scan-tree-dump-not "Registering jump thread" "dom2" } } */
> +/* { dg-final { scan-tree-dump "PHI <" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c b/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c
> new file mode 100644
> index 00000000000..fb6b8a12732
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c
> @@ -0,0 +1,22 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fdump-tree-dom2-details" } */
> +
> +/* Same test as dom-jump-threading-1.c but with DOM jump threading at
> +   its default (enabled): DOM must thread the PHI of compares, which
> +   keeps the sibling test honest.  */
> +
> +void g (void);
> +
> +void
> +f (int x, int a, int b, int c, int d)
> +{
> +  _Bool t;
> +  if (x)
> +    t = a < b;
> +  else
> +    t = c < d;
> +  if (t)
> +    g ();
> +}
> +
> +/* { dg-final { scan-tree-dump "Registering jump thread" "dom2" } } */
> diff --git a/gcc/tree-ssa-dom.cc b/gcc/tree-ssa-dom.cc
> index 02ffcbfc677..7fded792a3c 100644
> --- a/gcc/tree-ssa-dom.cc
> +++ b/gcc/tree-ssa-dom.cc
> @@ -1801,7 +1801,8 @@ dom_opt_dom_walker::before_dom_children (basic_block bb)
>  void
>  dom_opt_dom_walker::after_dom_children (basic_block bb)
>  {
> -  m_threader->thread_outgoing_edges (bb);
> +  if (param_dom_jump_threading)
> +    m_threader->thread_outgoing_edges (bb);
>    bitmap_clear_bit (m_state->get_blocks_on_stack (), bb->index);
>    m_avail_exprs_stack->pop_to_marker ();
>    m_const_and_copies->pop_to_marker ();
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Abhinav Puri; (HRB 36809, AG Nuernberg)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.