)]}'
{
  "commit": "a02ef60ff46c1a9c99cce6ca159229dc2f6c5ff2",
  "tree": "bd54e7fc1741bb1de38ce0132d36e839d4275edf",
  "parents": [
    "fe1fc78c3e49eea31e4ba7647727680665923dd7"
  ],
  "author": {
    "name": "Yingwei Zheng",
    "email": "dtcxzyw2333@gmail.com",
    "time": "Sun Jun 28 01:38:36 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sun Jun 28 01:38:36 2026 +0800"
  },
  "message": "[llubi] Add support for undef values (#205602)\n\nAlthough we are planning to deprecate the undef value, it is still\nwidely used in the intermediate results of the pipeline, which blocks\nthe pass bisection. This patch uses `freeze poison` as a refinement of\nundef.\n\nNote that the undef value evaluates to different values each time the\nuser is executed. So it cannot be cached like other constants. A\ntemporary buffer is introduced to take ownership of these values and\navoid breaking the interface (although this is a bit ugly...). This will\nalso be used by a follow-up patch for ptrtoint/inttoptr.\n\nFrom my experience, it is enough for test case reduction of middle-end\nmiscompilation bugs (there are still counterexamples like\nhttps://github.com/dtcxzyw/llvm-autoreduce/issues/61). However, when\nprocessing backend miscompilation bugs, lli typically uses a garbage\nvalue, so that llvm-reduce may produce an invalid result. I think we may\nneed to introduce two flags to migrate this issue: one for poisoning\nuninitialized memory, and another for diagnosing immediately when\nnon-deterministic behaviour occurs. This would prevent llvm-reduce from\nconverting a deterministic repro into a non-deterministic one.\n\n`llvm/test/tools/llubi/unsupported_constant.ll` is also dropped because\nit is annoying to pick another unimplemented constant value...",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "92027cceea3bf44de78494490df673c4e980ade1",
      "old_mode": 33188,
      "old_path": "llvm/include/llvm/Support/Allocator.h",
      "new_id": "ea8e8a829ee559481166fca089b8040e6e25fdb3",
      "new_mode": 33188,
      "new_path": "llvm/include/llvm/Support/Allocator.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4e28ce89f1738dec3e386f1af9b59106d701930d",
      "new_mode": 33188,
      "new_path": "llvm/test/tools/llubi/undef.ll"
    },
    {
      "type": "delete",
      "old_id": "96d23cff4904ac6ca75430ec3abc5e4783fff4ec",
      "old_mode": 33188,
      "old_path": "llvm/test/tools/llubi/unsupported_constant.ll",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "5c13ff8a47c24c658bed76aedc2b0d37ec8b93c6",
      "old_mode": 33188,
      "old_path": "llvm/tools/llubi/lib/Context.cpp",
      "new_id": "bd7c966a1c7e99851b0cc98150a068c664dd1cdc",
      "new_mode": 33188,
      "new_path": "llvm/tools/llubi/lib/Context.cpp"
    },
    {
      "type": "modify",
      "old_id": "7c1e8e82c7e74cd05c2e7c9c5139b83dc657f0ec",
      "old_mode": 33188,
      "old_path": "llvm/tools/llubi/lib/Context.h",
      "new_id": "d8e3450c4accd082cc4ac880f71ed28fe5d44595",
      "new_mode": 33188,
      "new_path": "llvm/tools/llubi/lib/Context.h"
    },
    {
      "type": "modify",
      "old_id": "fd39b809d8f2569f15d778eeed0e814aa2944c2f",
      "old_mode": 33188,
      "old_path": "llvm/tools/llubi/lib/Interpreter.cpp",
      "new_id": "8bf88464d017822e358f84aad9a9780e3ee81b43",
      "new_mode": 33188,
      "new_path": "llvm/tools/llubi/lib/Interpreter.cpp"
    }
  ]
}
