)]}'
{
  "commit": "c33ccfa52b2db90bae72ac11ee50639231e93310",
  "tree": "5287773bde869e3cbc3301b240126feb3665845f",
  "parents": [
    "410764cff5d657e66a64a8250958db99fb721385"
  ],
  "author": {
    "name": "Luke Lau",
    "email": "luke@igalia.com",
    "time": "Wed Sep 03 09:09:19 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Sep 03 01:09:19 2025 +0000"
  },
  "message": "[VPlan] Reassociate (x \u0026 y) \u0026 z -\u003e x \u0026 (y \u0026 z) (#155383)\n\nThis PR reassociates logical ands in order to enable more\nsimplifications.\n\nThe driving motivation for this is that with tail folding all blocks\ninside the loop body will end up using the header mask. However this can\nend up nestled deep within a chain of logical ands from other edges.\n\nTypically the header mask will be a leaf nested in the LHS, e.g.\n(headermask \u0026 y) \u0026 z. So pulling it out allows it to be simplified\nfurther, e.g. allows it to be optimised away to VP intrinsics with EVL\ntail folding.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "875d501f2a3dcf40b9cca217351cddd84fa1d0b1",
      "old_mode": 33188,
      "old_path": "llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp",
      "new_id": "c588453091fcc38b6312a02d1deb7a6f0790b0a5",
      "new_mode": 33188,
      "new_path": "llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp"
    },
    {
      "type": "modify",
      "old_id": "3660b937da75d12cb6761f7590fb3da2fb0c66e3",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/LoopVectorize/AArch64/force-target-instruction-cost.ll",
      "new_id": "d7c911389e9c2c9848de8a2daf2bb96aeaedec19",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/LoopVectorize/AArch64/force-target-instruction-cost.ll"
    },
    {
      "type": "modify",
      "old_id": "631328a9a096439c65a6718de3001306f2d199c5",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll",
      "new_id": "5a99f15b9f58529a90fa465c04d09808236f5bd8",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll"
    },
    {
      "type": "modify",
      "old_id": "db6185087bac5318b985dc8577287bdc615f5d7e",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/LoopVectorize/RISCV/pr87378-vpinstruction-or-drop-poison-generating-flags.ll",
      "new_id": "8b212f4ef9706843bc9aba59c011d94b974275b3",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/LoopVectorize/RISCV/pr87378-vpinstruction-or-drop-poison-generating-flags.ll"
    },
    {
      "type": "modify",
      "old_id": "db54ca61f715b9de5c58c10a513160b6fd3dcb6c",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/LoopVectorize/X86/constant-fold.ll",
      "new_id": "54d738388ea73cd70149c9dce6ee1d1e2532154a",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/LoopVectorize/X86/constant-fold.ll"
    },
    {
      "type": "modify",
      "old_id": "d695de6491baa97117121e37546f5e8a6b240748",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/LoopVectorize/X86/predicate-switch.ll",
      "new_id": "e25be6f867862b37847987ae39524c858279358d",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/LoopVectorize/X86/predicate-switch.ll"
    }
  ]
}
