)]}'
{
  "commit": "ee655ca27aad466bcc54f6eba03f7e564940ad5a",
  "tree": "931f52c4f0979e5abf40717b90a121f979cf9b36",
  "parents": [
    "3bf425764e1837e909263a7e61a13e2308dc7d5f"
  ],
  "author": {
    "name": "Nikita Popov",
    "email": "npopov@redhat.com",
    "time": "Thu Feb 13 09:36:35 2025 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Feb 13 09:36:35 2025 +0100"
  },
  "message": "[CaptureTracking][FunctionAttrs] Add support for CaptureInfo (#125880)\n\nThis extends CaptureTracking to support inferring non-trivial\r\nCaptureInfos. The focus of this patch is to only support FunctionAttrs,\r\nother users of CaptureTracking will be updated in followups.\r\n\r\nThe key API changes here are:\r\n\r\n* DetermineUseCaptureKind() now returns a UseCaptureInfo where the UseCC\r\ncomponent specifies what is captured at that Use and the ResultCC\r\ncomponent specifies what may be captured via the return value of the\r\nUser. Usually only one or the other will be used (corresponding to\r\nprevious MAY_CAPTURE or PASSTHROUGH results), but both may be set for\r\ncall captures.\r\n* The CaptureTracking::captures() extension point is passed this\r\nUseCaptureInfo as well and then can decide what to do with it by\r\nreturning an Action, which is one of: Stop: stop traversal.\r\nContinueIgnoringReturn: continue traversal but don\u0027t follow the\r\ninstruction return value. Continue: continue traversal and follow the\r\ninstruction return value if it has additional CaptureComponents.\r\n\r\nFor now, this patch retains the (unsound) special logic for comparison\r\nof null with a dereferenceable pointer. I\u0027d like to switch key code to\r\ntake advantage of address/address_is_null before dropping it.\r\n\r\nThis PR mainly intends to introduce necessary API changes and basic\r\ninference support, there are various possible improvements marked with\r\nTODOs.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0cd81a77f5cc5947ea0932e886a77b1d9bc8996a",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGen/allow-ubsan-check.c",
      "new_id": "c116604288546dc7d4ae721ccb6ae1e5522baa11",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGen/allow-ubsan-check.c"
    },
    {
      "type": "modify",
      "old_id": "83daf57be22ffccb340e60a04c6f9de5d61c9973",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGenCXX/RelativeVTablesABI/dynamic-cast.cpp",
      "new_id": "3662a270713b697705ef1faf427983d6f6053771",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenCXX/RelativeVTablesABI/dynamic-cast.cpp"
    },
    {
      "type": "modify",
      "old_id": "c471e5dbd7b33ce82cb27e391af92b6168a67a92",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGenCXX/RelativeVTablesABI/type-info.cpp",
      "new_id": "2a838708ca231525b28b17a4610579ba69778183",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenCXX/RelativeVTablesABI/type-info.cpp"
    },
    {
      "type": "modify",
      "old_id": "0aadaad2dca5c523640e73fe72c23844164002fc",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGenOpenCL/amdgcn-buffer-rsrc-type.cl",
      "new_id": "62fd20c4d14145530a2f9d94127b0eed56c57fe6",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenOpenCL/amdgcn-buffer-rsrc-type.cl"
    },
    {
      "type": "modify",
      "old_id": "1fe26fbeafdb4b8717da8f7de859a377dd6f85c6",
      "old_mode": 33188,
      "old_path": "clang/test/CodeGenOpenCL/as_type.cl",
      "new_id": "2c6cdc3810b4da43f7d033971dc3856155cfb607",
      "new_mode": 33188,
      "new_path": "clang/test/CodeGenOpenCL/as_type.cl"
    },
    {
      "type": "modify",
      "old_id": "06a00d9ae789908243d1f5ea3c1ccf16e8e1fba2",
      "old_mode": 33188,
      "old_path": "llvm/include/llvm/Analysis/CaptureTracking.h",
      "new_id": "573df8833bd4682c2993b009fbe4c6d060381529",
      "new_mode": 33188,
      "new_path": "llvm/include/llvm/Analysis/CaptureTracking.h"
    },
    {
      "type": "modify",
      "old_id": "a8ce9a8e6e69c471e0a8584df5656e11d18090b7",
      "old_mode": 33188,
      "old_path": "llvm/include/llvm/Support/ModRef.h",
      "new_id": "ee71ee803b554a97fe2e4f1b739c7e17491ce201",
      "new_mode": 33188,
      "new_path": "llvm/include/llvm/Support/ModRef.h"
    },
    {
      "type": "modify",
      "old_id": "49baf2eb84bb3e156e0fe0e6e13a5907f8e9478d",
      "old_mode": 33188,
      "old_path": "llvm/lib/Analysis/CaptureTracking.cpp",
      "new_id": "5120b910e7896e4e4fde7239ab5cc78b7143ddc1",
      "new_mode": 33188,
      "new_path": "llvm/lib/Analysis/CaptureTracking.cpp"
    },
    {
      "type": "modify",
      "old_id": "59002cd934ab1e5dcbb1b7a1e44cdbd7ab54b887",
      "old_mode": 33188,
      "old_path": "llvm/lib/Analysis/InstructionSimplify.cpp",
      "new_id": "d25c1eecaf1ca1099889dc765934090747325f1a",
      "new_mode": 33188,
      "new_path": "llvm/lib/Analysis/InstructionSimplify.cpp"
    },
    {
      "type": "modify",
      "old_id": "17e7fada1082762babe5560e364a678ae8a3d8c7",
      "old_mode": 33188,
      "old_path": "llvm/lib/Transforms/IPO/AttributorAttributes.cpp",
      "new_id": "c1dd8bc393f33e9320aac9b0d1a83369028554cb",
      "new_mode": 33188,
      "new_path": "llvm/lib/Transforms/IPO/AttributorAttributes.cpp"
    },
    {
      "type": "modify",
      "old_id": "cf56f67e4de3f530400438f1671de722f46a66a8",
      "old_mode": 33188,
      "old_path": "llvm/lib/Transforms/IPO/FunctionAttrs.cpp",
      "new_id": "4445d56146da762a9b734aee4e301a381cff6589",
      "new_mode": 33188,
      "new_path": "llvm/lib/Transforms/IPO/FunctionAttrs.cpp"
    },
    {
      "type": "modify",
      "old_id": "0feb6160b68fbb8ee3ea105c864d6b5ae7d48327",
      "old_mode": 33188,
      "old_path": "llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp",
      "new_id": "96d6db2ba5bfe45153591002c54ff527e51e8a16",
      "new_mode": 33188,
      "new_path": "llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp"
    },
    {
      "type": "modify",
      "old_id": "87b27beb01a0a92778b3ffce1f8f6669b10c3d25",
      "old_mode": 33188,
      "old_path": "llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp",
      "new_id": "9a729b7afb8b933acec83c9b144600d4cbbf35fd",
      "new_mode": 33188,
      "new_path": "llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp"
    },
    {
      "type": "modify",
      "old_id": "f706184f9727e24f1714a84d75e6b6ea04fcb60c",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll",
      "new_id": "a3b065667702f0e14c082ba6d99a6e05de64ca41",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll"
    },
    {
      "type": "modify",
      "old_id": "13954694eefe0c72fd52b7f17fadd45b9973b12c",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/arg_returned.ll",
      "new_id": "99406696d33d11c2d07b8b80fe4d5453fa99c36a",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/arg_returned.ll"
    },
    {
      "type": "modify",
      "old_id": "6164f2adbf5b90eb179de4ef54a6ea4c14618e74",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/nocapture.ll",
      "new_id": "6debe5de3966ed88d457571d09307558f7a8345e",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/nocapture.ll"
    },
    {
      "type": "modify",
      "old_id": "0f6762f0d43426f14bc49e16f945d75903f3ab46",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/nonnull.ll",
      "new_id": "94093568419afa4a4b3ecd15bfc178f06331095b",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/nonnull.ll"
    },
    {
      "type": "modify",
      "old_id": "b7c583880501a2e0d349a7ed419e1fbd24a13bc8",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/noundef.ll",
      "new_id": "4f53c0880462100dbc2c2f5f24501b247a203541",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/noundef.ll"
    },
    {
      "type": "modify",
      "old_id": "b24c097ad54d08cade566d9db9d0aeb2b77c506d",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/readattrs.ll",
      "new_id": "5fc88d623c0ec7a7d278b8765dc61ef6de7b8594",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/readattrs.ll"
    },
    {
      "type": "modify",
      "old_id": "5f007b4078ff3dd48daad487ff4d4eacda69ef33",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/FunctionAttrs/stats.ll",
      "new_id": "dc0387e57174a92dfeb59bb7461a7ffc3f899629",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/FunctionAttrs/stats.ll"
    },
    {
      "type": "modify",
      "old_id": "e01dba328a3a1b0322ac4c8d8998ae29877f2f7f",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/PhaseOrdering/AArch64/block_scaling_decompr_8bit.ll",
      "new_id": "7175816963ed145bf3ec4677e29f9c7a10fd42fc",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/PhaseOrdering/AArch64/block_scaling_decompr_8bit.ll"
    },
    {
      "type": "modify",
      "old_id": "bbd4849c32296e1311ff7e4a8ad6a9d8126d8a80",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/PhaseOrdering/bitcast-store-branch.ll",
      "new_id": "d5edf83ee52e2fc4ac72f00763854ba027b9702e",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/PhaseOrdering/bitcast-store-branch.ll"
    },
    {
      "type": "modify",
      "old_id": "ee7698b116aa237d409f54b8e8fa4d03a33bb70c",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion-loads.ll",
      "new_id": "4b422f205138af93fde22bde407f1a7b69732b8a",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion-loads.ll"
    },
    {
      "type": "modify",
      "old_id": "5f75bd788e4bb46c998101ee278ecc3d7e006fd9",
      "old_mode": 33188,
      "old_path": "llvm/test/Transforms/PhaseOrdering/enable-loop-header-duplication-oz.ll",
      "new_id": "cd2ed37b22db51277bb19ecfd69bcd0e2122e297",
      "new_mode": 33188,
      "new_path": "llvm/test/Transforms/PhaseOrdering/enable-loop-header-duplication-oz.ll"
    },
    {
      "type": "modify",
      "old_id": "73dd82fb921f76129803bd9d848c0cd3977da215",
      "old_mode": 33188,
      "old_path": "llvm/unittests/Analysis/CaptureTrackingTest.cpp",
      "new_id": "3f5c10d935167f70a4e8968ef0d326c40beadbf9",
      "new_mode": 33188,
      "new_path": "llvm/unittests/Analysis/CaptureTrackingTest.cpp"
    }
  ]
}
