)]}'
{
  "commit": "a257e2aa4eb47ad340915136228cd28d918e8dc2",
  "tree": "43405a5bb8fce56208252bd0bf3e80b22eb0d9cb",
  "parents": [
    "7e1f6b6b22fb226c47b6c73caa2ebfc44bf881a5"
  ],
  "author": {
    "name": "Ming Yan",
    "email": "ming.yan@terapines.com",
    "time": "Wed May 06 17:00:48 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed May 06 17:00:48 2026 +0800"
  },
  "message": "[SCEV] Introduce loop-uniform SCEV classification. (#194304)\n\nThis patch extends `ScalarEvolution::LoopDisposition` with a new\n`LoopUniform` state to describe SCEVs that are invariant across all\niterations of a given loop, but may still depend on inner-loop induction\nvariables.\n\nUnlike `LoopInvariant`, which requires the value to be fully invariant\nwith respect to the loop, LoopUniform captures expressions that do not\ndepend on the loop’s own induction variables, yet may vary in nested\nloops. This distinction is useful for analyses and optimizations that\nreason about per-iteration stability at a specific loop level.\n\nExample:\n```\nfor (i)\n  for (j)\n    dep(j);       // uniform w.r.t. i\n    dep(i, j);    // not uniform w.r.t. i\n```\n\nThis enables us to more precisely reason about the behavior of SCEV in\nthe context of nested loops, which is very useful for optimizations such\nas `LoopUnrollAndJam` and `OuterLoopVectorization`.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "54ea8dbe56dd6f92eb059e8c700f39865f7ab024",
      "old_mode": 33188,
      "old_path": "llvm/include/llvm/Analysis/ScalarEvolution.h",
      "new_id": "277e01f2c96103ee92361ed1c3fb4eb4252663cc",
      "new_mode": 33188,
      "new_path": "llvm/include/llvm/Analysis/ScalarEvolution.h"
    },
    {
      "type": "modify",
      "old_id": "676292ebe0346d911597321e9fa1befc228c57f0",
      "old_mode": 33188,
      "old_path": "llvm/lib/Analysis/ScalarEvolution.cpp",
      "new_id": "74037b7274336e29c738146f7703810e24f81335",
      "new_mode": 33188,
      "new_path": "llvm/lib/Analysis/ScalarEvolution.cpp"
    },
    {
      "type": "modify",
      "old_id": "0e37cf5efe3e46e132ae2b9ab958487a1a5c4db5",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/becount-invalidation.ll",
      "new_id": "a0ae9b63ac02a0bf020ff4e0287839374ce9325f",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/becount-invalidation.ll"
    },
    {
      "type": "modify",
      "old_id": "44bff5638bc85752aa864d5fcf1d7d360d1ee65f",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/different-loops-recs.ll",
      "new_id": "9f9dd6f3c11af7af12e680343e469622f79cbc27",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/different-loops-recs.ll"
    },
    {
      "type": "modify",
      "old_id": "45beb4f21e9e3e7a3ad1a1c4988f7f9d939e757b",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/exact-exit-count-more-precise.ll",
      "new_id": "d4ed168aa4cf6cb3840019f0fd889304b9ff31b3",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/exact-exit-count-more-precise.ll"
    },
    {
      "type": "modify",
      "old_id": "1043b2f6f56f6b090b560d3ebbd5aa4771417d64",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/exit-count-select-safe.ll",
      "new_id": "c63650aef8fe4cdd2746fd9c46159d9834723ed8",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/exit-count-select-safe.ll"
    },
    {
      "type": "modify",
      "old_id": "37ea771faf1446528a5ec23ac39f1a591b37cbdc",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/flags-from-poison-noautogen.ll",
      "new_id": "52843d6176a6f68b7c84ac580b03c9b06b5a309d",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/flags-from-poison-noautogen.ll"
    },
    {
      "type": "modify",
      "old_id": "b456f11bade6b4bac81aadd82858962444b71923",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/incorrect-exit-count.ll",
      "new_id": "f2de5e32f082eafa4b9dababa6c3d41ac6aafcbc",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/incorrect-exit-count.ll"
    },
    {
      "type": "modify",
      "old_id": "4e5033b7a2f7f5996866f8704b0ce083dd73a6d7",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info-rewrite-expressions.ll",
      "new_id": "f0e732968c88ac27e4e317013209968bb61cfef2",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info-rewrite-expressions.ll"
    },
    {
      "type": "modify",
      "old_id": "d5a2181e9bc5e17dddf39400d897034c49c3f250",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll",
      "new_id": "436f0e55840d9adf3d060d36814a9169a6b8e886",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll"
    },
    {
      "type": "modify",
      "old_id": "e1c05c4b431f396a7227fca8578fd8a3709632a0",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/max-expr-cache.ll",
      "new_id": "3171d622c9cfb20dcf55d5104b9632752bf9f959",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/max-expr-cache.ll"
    },
    {
      "type": "modify",
      "old_id": "f4dc712f02220096acdb6098371ba56811392373",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/outer_phi.ll",
      "new_id": "785afe0793ff3ce6b16cebcb78dbd195c125c37a",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/outer_phi.ll"
    },
    {
      "type": "modify",
      "old_id": "19bc48157d4adef9ca9beea9a531f33495c271f2",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/scev-dispositions.ll",
      "new_id": "be21f3846eb7e21d7b29e927f42dc9f346c9bdc2",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/scev-dispositions.ll"
    },
    {
      "type": "modify",
      "old_id": "7916c509a33bc4db10837614ae6b3f01da235811",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/trivial-phis.ll",
      "new_id": "fe7522643c1d61ab18f032f7cd245ca6a798454d",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/trivial-phis.ll"
    },
    {
      "type": "modify",
      "old_id": "a73ec292ea697980b7c3c4ae33e314027e0e1928",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/two-loop-latches.ll",
      "new_id": "1faf6f70fc34a0b554d654350e6711b6633a845d",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/two-loop-latches.ll"
    },
    {
      "type": "modify",
      "old_id": "a08feef7098ea682dadd3169540d168c9f944ccb",
      "old_mode": 33188,
      "old_path": "llvm/test/Analysis/ScalarEvolution/zext-add.ll",
      "new_id": "29f37a82a8b8024d29d83b1f5314828931ae92e7",
      "new_mode": 33188,
      "new_path": "llvm/test/Analysis/ScalarEvolution/zext-add.ll"
    }
  ]
}
