)]}'
{
  "commit": "5c23bb074af23f00dd3fe1745b9dd99245fa4bba",
  "tree": "678fc153d591900547507109ccc3af450c1d0028",
  "parents": [
    "e754b70fe5470b975d31887fa5647f1c92d6522d"
  ],
  "author": {
    "name": "Kyrylo Tkachov",
    "email": "ktkachov@nvidia.com",
    "time": "Tue Jun 30 14:04:02 2026 +0200"
  },
  "committer": {
    "name": "Kyrylo Tkachov",
    "email": "ktkachov@nvidia.com",
    "time": "Mon Jul 06 10:23:56 2026 +0200"
  },
  "message": "Remove the path-splitting pass and deprecate -fsplit-paths [PR120892]\n\npass_split_paths duplicates the join block of an IF-THEN-ELSE that feeds a\nloop latch, splitting the two paths to the backedge.  It runs only at -O3.\nIn practice it interacts badly with later optimizations: it duplicates the\nloop body before loads have been commoned and before if-conversion runs, so\nit can block both loop unrolling (PR120892) and if-conversion of the\nduplicated diamond, while its own heuristic already declines about half of\nall candidate blocks, most often to avoid spoiling if-conversion.\n\nRemove the pass and deprecate the -fsplit-paths option.  The option is kept\naccepted for backward compatibility via the Ignore flag and now does nothing,\nmatching how other optimization options have been retired (for example\n-ftree-lrs).  param_max_jump_thread_duplication_stmts is retained as it is\nshared with the jump-threading passes.\n\nStatistics from the pass on SPEC CPU 2026 (intrate + fprate, counted from the\nsplit-paths dump):\n\n                    candidates   splits   declined   to protect if-conversion\n  -O3                  122894    62050     60844           37166\n  -O3 -flto\u003dauto        52423    21257     31166           21822\n\nThe pass splits about half of the blocks it considers and declines the rest,\nmost often to avoid spoiling if-conversion.  The duplication grows .text by\n0.32% at -O3 and 0.24% at -O3 -flto\u003dauto.\n\nAndrea and Jeff indicated in PR120892 that removing -fsplit-paths may be\nthe way to go there.\n\n-fsplit-paths also complicates the control-flow and defeats the\nload-commoning necessary to get good if-conversion of the hot loop from\nSnappy from https://gcc.gnu.org/bugzilla/show_bug.cgi?id\u003d125557#c13 .\n\nBootstrapped and tested on aarch64-none-linux-gnu and x86_64-linux.\n\ngcc/ChangeLog:\n\n\tPR tree-optimization/120892\n\t* gimple-ssa-split-paths.cc: Remove.\n\t* passes.def (pass_split_paths): Remove.\n\t* tree-pass.h (make_pass_split_paths): Remove.\n\t* Makefile.in (OBJS): Remove gimple-ssa-split-paths.o.\n\t* timevar.def (TV_SPLIT_PATHS): Remove.\n\t* opts.cc (default_options_table): Remove the OPT_LEVELS_3_PLUS entry\n\tfor OPT_fsplit_paths.\n\t* common.opt (fsplit-paths): Make it a deprecated no-op using Ignore.\n\t* doc/invoke.texi (-fsplit-paths): Document as deprecated and remove it\n\tfrom the option summary and the -O3 list.\n\ngcc/testsuite/ChangeLog:\n\n\tPR tree-optimization/120892\n\t* gcc.dg/tree-ssa/split-path-1.c: Move to...\n\t* gcc.c-torture/execute/split-path-1.c: ...here.  Adjust to a plain\n\tcompile and run test without the split-paths dump scan.\n\t* gcc.dg/tree-ssa/split-path-2.c: Move to...\n\t* gcc.c-torture/compile/split-path-2.c: ...here.  Adjust to a\n\tcompile-only test without the split-paths dump scan.\n\t* gcc.dg/tree-ssa/split-path-3.c: Move to...\n\t* gcc.c-torture/compile/split-path-3.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-4.c: Move to...\n\t* gcc.c-torture/compile/split-path-4.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-5.c: Move to...\n\t* gcc.c-torture/compile/split-path-5.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-6.c: Move to...\n\t* gcc.c-torture/compile/split-path-6.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-7.c: Move to...\n\t* gcc.c-torture/compile/split-path-7.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-8.c: Move to...\n\t* gcc.c-torture/compile/split-path-8.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-9.c: Move to...\n\t* gcc.c-torture/compile/split-path-9.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-10.c: Move to...\n\t* gcc.c-torture/compile/split-path-10.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-11.c: Move to...\n\t* gcc.c-torture/compile/split-path-11.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-12.c: Move to...\n\t* gcc.c-torture/compile/split-path-12.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/split-path-13.c: Move to...\n\t* gcc.c-torture/compile/split-path-13.c: ...here.  Likewise.\n\t* gcc.dg/tree-ssa/pr69270.c: Move to...\n\t* gcc.c-torture/compile/pr69270.c: ...here.  Likewise.\n\t* g++.dg/tree-ssa/pr88797.C: Move to...\n\t* g++.dg/torture/pr88797.C: ...here.  Adjust to a compile-only test.\n\t* gcc.target/i386/pr106450.c: Remove -fsplit-paths from dg-options.\n\nSigned-off-by: Kyrylo Tkachov \u003cktkachov@nvidia.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "536e2faaaf882d412bdb5bba649f184e672f2be5",
      "old_mode": 33188,
      "old_path": "gcc/Makefile.in",
      "new_id": "06e711094efde0b27bfb10316285947e41c216c0",
      "new_mode": 33188,
      "new_path": "gcc/Makefile.in"
    },
    {
      "type": "modify",
      "old_id": "218dddf5dfe98083d58ed27853ad7772e2f6e8b9",
      "old_mode": 33188,
      "old_path": "gcc/common.opt",
      "new_id": "0055578ccf60a2794caa30c5701824842bc6898e",
      "new_mode": 33188,
      "new_path": "gcc/common.opt"
    },
    {
      "type": "modify",
      "old_id": "208625cafc550cfa7c5bc79760413da4ee708fcd",
      "old_mode": 33188,
      "old_path": "gcc/doc/invoke.texi",
      "new_id": "455ea08d7c7354ac5ffdd205251cd3cf3fde2a30",
      "new_mode": 33188,
      "new_path": "gcc/doc/invoke.texi"
    },
    {
      "type": "delete",
      "old_id": "171a581e8f8c8863962a270643bd1631ba1685c6",
      "old_mode": 33188,
      "old_path": "gcc/gimple-ssa-split-paths.cc",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "342517528e8ec79c7b5c247b3f75d80bc32102f3",
      "old_mode": 33188,
      "old_path": "gcc/opts.cc",
      "new_id": "5522f41f90698e17fc189590b7dbb808f9e0cd95",
      "new_mode": 33188,
      "new_path": "gcc/opts.cc"
    },
    {
      "type": "modify",
      "old_id": "1fc867fae51771ded5dc7dc0fe73dcdd421d5e65",
      "old_mode": 33188,
      "old_path": "gcc/passes.def",
      "new_id": "9095c134f49d3e0e00d7a161117423a19f2125a4",
      "new_mode": 33188,
      "new_path": "gcc/passes.def"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3dd00fcb7a94c32a7f96408ede08c62d5bfa8b0f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/torture/pr88797.C"
    },
    {
      "type": "delete",
      "old_id": "541ae8e71e1397b7543bc30958f07f8caa92e051",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/tree-ssa/pr88797.C",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "daed456ec607d62777a7b8d39e18cca58f60ce77",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/pr69270.c"
    },
    {
      "type": "rename",
      "old_id": "ed208795488392de60e04a1842f1c451a626b3f9",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-10.c",
      "new_id": "336b11893b6bcff85bbba0dfba91553b8acb8d0f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-10.c",
      "score": 81
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "44b8b05948178d146711895921bb5bcf5ec9884b",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-11.c"
    },
    {
      "type": "rename",
      "old_id": "da00f795ef02e176562f275dc40baaafbb15c31b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c",
      "new_id": "dc9da4e90ef491d4843e283b2a8e97dd0c81a32a",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-12.c",
      "score": 70
    },
    {
      "type": "rename",
      "old_id": "d24e23bc59d6b4f383557be10e03b6988b769da6",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c",
      "new_id": "554ae4d8f398d5bedec6646584cb27ddda30e87f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-13.c",
      "score": 62
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9418c9488d4c8e5c50992b9b35b78d9b482c0f5d",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-2.c"
    },
    {
      "type": "rename",
      "old_id": "f6a29f628a23c0b8348c53c315b95e9f7ef48692",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c",
      "new_id": "9ea9fb2fed136e4ff790923a5ac6157bd2174927",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-3.c",
      "score": 93
    },
    {
      "type": "rename",
      "old_id": "cbee6fce4b74c3e80254803a2d51eaa006641435",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c",
      "new_id": "6705f9e84261c66c7761dec4cae71348f40daa37",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-4.c",
      "score": 62
    },
    {
      "type": "rename",
      "old_id": "2f5e7edcfa89738fd7656e72f27c6bb912448c94",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c",
      "new_id": "aff1f03819556c8f34f617d28f24828369c9b33f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-5.c",
      "score": 83
    },
    {
      "type": "rename",
      "old_id": "e2b0a9571f0d22bd5547a4ebc8bce05b7891b17c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c",
      "new_id": "9c32c813b607292f58d7cf87c6a8ad3a8c31b3d3",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-6.c",
      "score": 82
    },
    {
      "type": "rename",
      "old_id": "35634ab3bd863344b1917b7e32736cdcf4291847",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c",
      "new_id": "33d04b4ff7d1735b755d2ef21bb82748391379a4",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-7.c",
      "score": 87
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cccbf0ca0a3bb7d003c5204192629b8b07a9a7c5",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-8.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4eacad2978a3887a6a5829c34b8607b44decb3e7",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/compile/split-path-9.c"
    },
    {
      "type": "rename",
      "old_id": "b670dee8d1025164e6874d4abc30cc0f99d8b59c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-1.c",
      "new_id": "e0ca386b4eabab03e8a0c811518d401b4cb00dfb",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.c-torture/execute/split-path-1.c",
      "score": 83
    },
    {
      "type": "delete",
      "old_id": "b08ec9d6ddb445720930b54c60282951f4ed4159",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/pr69270.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "fa33367feaa77a2a142fcf00570a26df40371bc0",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "61697a35e560e3e97987d040d5e2a324f3b4658a",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "fb54f5dc512e4388999ea2930a9887b8c70ef2d1",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-8.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "8be0cd01201fa06295ac737481078a13621966e0",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/tree-ssa/split-path-9.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "d16231f6abd1f99c25e5e2821b3c18cde8c623f9",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.target/i386/pr106450.c",
      "new_id": "009e3eb8c74352a62c9e2c097db27c4f34759cfb",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/i386/pr106450.c"
    },
    {
      "type": "modify",
      "old_id": "588d987ec356e7ce6d60f866117d136e9d22424a",
      "old_mode": 33188,
      "old_path": "gcc/timevar.def",
      "new_id": "c70209976096be46d0d1d3a85819b3afef271988",
      "new_mode": 33188,
      "new_path": "gcc/timevar.def"
    },
    {
      "type": "modify",
      "old_id": "b3c97658a8fefff0dfd153b0ff3cd68e8bfb281d",
      "old_mode": 33188,
      "old_path": "gcc/tree-pass.h",
      "new_id": "a3b35e009e082cc78dfdb52b98dff721d9965afb",
      "new_mode": 33188,
      "new_path": "gcc/tree-pass.h"
    }
  ]
}
