https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120892
--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Kyrylo Tkachov <[email protected]>: https://gcc.gnu.org/g:5c23bb074af23f00dd3fe1745b9dd99245fa4bba commit r17-2164-g5c23bb074af23f00dd3fe1745b9dd99245fa4bba Author: Kyrylo Tkachov <[email protected]> Date: Tue Jun 30 14:04:02 2026 +0200 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 <[email protected]>
