Remove the path-splitting pass and deprecate -fsplit-paths [PR120892]

pass_split_paths duplicates the join block of an IF-THEN-ELSE that feeds a
loop latch, splitting the two paths to the backedge.  It runs only at -O3.
In practice it interacts badly with later optimizations: it duplicates the
loop body before loads have been commoned and before if-conversion runs, so
it can block both loop unrolling (PR120892) and if-conversion of the
duplicated diamond, while its own heuristic already declines about half of
all candidate blocks, most often to avoid spoiling if-conversion.

Remove the pass and deprecate the -fsplit-paths option.  The option is kept
accepted for backward compatibility via the Ignore flag and now does nothing,
matching how other optimization options have been retired (for example
-ftree-lrs).  param_max_jump_thread_duplication_stmts is retained as it is
shared with the jump-threading passes.

Statistics from the pass on SPEC CPU 2026 (intrate + fprate, counted from the
split-paths dump):

                    candidates   splits   declined   to protect if-conversion
  -O3                  122894    62050     60844           37166
  -O3 -flto=auto        52423    21257     31166           21822

The pass splits about half of the blocks it considers and declines the rest,
most often to avoid spoiling if-conversion.  The duplication grows .text by
0.32% at -O3 and 0.24% at -O3 -flto=auto.

Andrea and Jeff indicated in PR120892 that removing -fsplit-paths may be
the way to go there.

-fsplit-paths also complicates the control-flow and defeats the
load-commoning necessary to get good if-conversion of the hot loop from
Snappy from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125557#c13 .

Bootstrapped and tested on aarch64-none-linux-gnu and x86_64-linux.

gcc/ChangeLog:

	PR tree-optimization/120892
	* gimple-ssa-split-paths.cc: Remove.
	* passes.def (pass_split_paths): Remove.
	* tree-pass.h (make_pass_split_paths): Remove.
	* Makefile.in (OBJS): Remove gimple-ssa-split-paths.o.
	* timevar.def (TV_SPLIT_PATHS): Remove.
	* opts.cc (default_options_table): Remove the OPT_LEVELS_3_PLUS entry
	for OPT_fsplit_paths.
	* common.opt (fsplit-paths): Make it a deprecated no-op using Ignore.
	* doc/invoke.texi (-fsplit-paths): Document as deprecated and remove it
	from the option summary and the -O3 list.

gcc/testsuite/ChangeLog:

	PR tree-optimization/120892
	* gcc.dg/tree-ssa/split-path-1.c: Move to...
	* gcc.c-torture/execute/split-path-1.c: ...here.  Adjust to a plain
	compile and run test without the split-paths dump scan.
	* gcc.dg/tree-ssa/split-path-2.c: Move to...
	* gcc.c-torture/compile/split-path-2.c: ...here.  Adjust to a
	compile-only test without the split-paths dump scan.
	* gcc.dg/tree-ssa/split-path-3.c: Move to...
	* gcc.c-torture/compile/split-path-3.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-4.c: Move to...
	* gcc.c-torture/compile/split-path-4.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-5.c: Move to...
	* gcc.c-torture/compile/split-path-5.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-6.c: Move to...
	* gcc.c-torture/compile/split-path-6.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-7.c: Move to...
	* gcc.c-torture/compile/split-path-7.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-8.c: Move to...
	* gcc.c-torture/compile/split-path-8.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-9.c: Move to...
	* gcc.c-torture/compile/split-path-9.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-10.c: Move to...
	* gcc.c-torture/compile/split-path-10.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-11.c: Move to...
	* gcc.c-torture/compile/split-path-11.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-12.c: Move to...
	* gcc.c-torture/compile/split-path-12.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/split-path-13.c: Move to...
	* gcc.c-torture/compile/split-path-13.c: ...here.  Likewise.
	* gcc.dg/tree-ssa/pr69270.c: Move to...
	* gcc.c-torture/compile/pr69270.c: ...here.  Likewise.
	* g++.dg/tree-ssa/pr88797.C: Move to...
	* g++.dg/torture/pr88797.C: ...here.  Adjust to a compile-only test.
	* gcc.target/i386/pr106450.c: Remove -fsplit-paths from dg-options.

Signed-off-by: Kyrylo Tkachov <ktkachov@nvidia.com>
30 files changed