)]}'
{
  "commit": "fa24a3a8bde37cb8ece5d0acd5dc6bca84233d28",
  "tree": "1ef8066f9df89b3976f69b308bfb21086f8a9ef9",
  "parents": [
    "e1694aac727985856e6d64d52afcb0c826ae8bce"
  ],
  "author": {
    "name": "Max191",
    "email": "44243577+Max191@users.noreply.github.com",
    "time": "Mon Dec 08 12:49:16 2025 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Dec 08 12:49:16 2025 -0500"
  },
  "message": "[Util] Implement InferIntDivisibilityOpInterface for affine ops (#22723)\n\nThis PR implements the InferIntDivisibilityOpInterface for affine.apply,\naffine.min, and affine.max operations. Affine apply gets the\ndivisibility of its result expression, and affine.min/max gets the GCD\nof all result expression divisibilities. The implementation supports the\nfollowing divisibilities and any compositions of them:\n- Multiplication: product of operand divisibilities\n- Addition/Subtraction: GCD (union) of operand divisibilities\n- Division (floor/ceil): quotient when evenly divisible, else 1\n- Modulo: falls back to minimum divisibility (1,1)\n\nThis PR also adds the TestIntegerDivisibilityAnalysis pass to more\ndirectly test divisibility analysis without relying on IR optimizations.\nThe pass probes values consumed by\n`\"iree_unregistered.test_int_divisibility\"` ops and annotates them with\ncomputed divisibility attributes.\n\nThere is a small change to the arith.divui divisibility implementation\nto fallback to minimum divisibility when there is a remainder division,\nbecause we can\u0027t infer the divisibility when there is a remainder.\n\n---------\n\nSigned-off-by: Max Dawkins \u003cmax.dawkins@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f8bedfcc836ce6d00fb59ae3751cae552ff4c7ba",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/BUILD.bazel",
      "new_id": "997dfe0f57426acff235cee4b4ef30270615a62e",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "f73fa2a9bca9f64ada927e1f6661f01c540b5e98",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/CMakeLists.txt",
      "new_id": "e64d47b6ab6d1b6ef6b0a3f202a8e50310136fbe",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "5445337ddf1a0936a43911ba055e64916880399d",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/Passes.h",
      "new_id": "188c5457b7d05f89527d59bc9c441722b597f9e4",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/Passes.h"
    },
    {
      "type": "modify",
      "old_id": "7093bed69d38d2c40ca70848990dc4e515c252f6",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/Passes.td",
      "new_id": "b3f46f78add6541f23f58b5aa30c1117210be898",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/Passes.td"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "21954d4ec0dceda6776e12260fa307549b4a5164",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/TestIntegerDivisibilityAnalysis.cpp"
    },
    {
      "type": "modify",
      "old_id": "d3fe86862e8bf16ce0dc4077051e071e0b869bc4",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/test/BUILD.bazel",
      "new_id": "64bb4a41f2c0b33f8f6ea72a2bacd18fc6321d0a",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/test/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "abca385499662e1b3eb6d80b4f5f7a23356d6496",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/test/CMakeLists.txt",
      "new_id": "658f9a9582f317fa5da8a13b2b35291977ef3ba8",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "998b6f9a559238a08c83f4da75c0c1bdc86c1895",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/Util/Transforms/test/test_integer_divisibility_analysis.mlir"
    },
    {
      "type": "modify",
      "old_id": "4bb1330409405d0165b526bc19e7f6b138ea35a6",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/ExternalInterfaces/BUILD.bazel",
      "new_id": "61eafdf3e5403aff4fb8d80b4951040f92b51149",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/ExternalInterfaces/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "a183c55394279f8391961717266650d62477fa1f",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/ExternalInterfaces/CMakeLists.txt",
      "new_id": "efb4db25dbf335e391bc14586dc085cd348e1f88",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/ExternalInterfaces/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "75d442ba463d7813b0dfc550b6abb6e921025f4e",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/ExternalInterfaces/UtilExternalModels.cpp",
      "new_id": "78e79aa5efc22e3cd882b07c83e299499da4a927",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/ExternalInterfaces/UtilExternalModels.cpp"
    }
  ]
}
