)]}'
{
  "commit": "bc97c56e6851858614876711e46f266dd1c1f58e",
  "tree": "166ed2cd0d94664f7e542327b7497b00ebd5fcb0",
  "parents": [
    "1321b17540118f850320955e19eacd68bd1d7eef"
  ],
  "author": {
    "name": "Damyan Pepper",
    "email": "damyanp@microsoft.com",
    "time": "Wed Jul 08 15:16:57 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jul 08 15:16:57 2026 -0700"
  },
  "message": "[DirectX] Expand {u,s}mul.with.overflow in DXILIntrinsicExpansion (#207297)\n\nDXIL has no op for the llvm.{u,s}mul.with.overflow intrinsics. These can\nbe emulated by performing the full multiply using double-width values\nand then checking the high-part of the result. However, this should be\navoided for 32-bit values since we don\u0027t want to make the shader start\nusing 64-bit values if it wasn\u0027t before. In this case we can use the\nUMul and IMul DXIL operations that return the result as separate low \u0026\nhigh values.\n\nWider (64-bit) multiplies, which can\u0027t widen further, compute the high\nhalf with same-width arithmetic instead.\n\nFixes #207090\n\n---------\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Farzon Lotfi \u003cfarzonl@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "63186ab4d7191629ab77affad29e4ec33297f03a",
      "old_mode": 33188,
      "old_path": "llvm/include/llvm/IR/IntrinsicsDirectX.td",
      "new_id": "4dd86270f0d013747b097ff3280ae1292b1c3c73",
      "new_mode": 33188,
      "new_path": "llvm/include/llvm/IR/IntrinsicsDirectX.td"
    },
    {
      "type": "modify",
      "old_id": "299d2d113b6bfaa3c3ea7ab8482bf9d6abc7bd23",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/DirectX/DXIL.td",
      "new_id": "a268276b07655ec6a09d978318b13de020fabd47",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/DirectX/DXIL.td"
    },
    {
      "type": "modify",
      "old_id": "2a91ea223ed2d11a18c34498689055636d0361ed",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/DirectX/DXILIntrinsicExpansion.cpp",
      "new_id": "1025015c09a1f165a6c8dc2cd8b5e26901e2a29b",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/DirectX/DXILIntrinsicExpansion.cpp"
    },
    {
      "type": "modify",
      "old_id": "1ee381d9e4e24f21b063dac6f8048f72c8d3df9d",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/DirectX/DXILOpBuilder.cpp",
      "new_id": "997b0cef3fdf5636159c13c76031bb38c2f8b67a",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/DirectX/DXILOpBuilder.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "87c533305c4142fb67462999de526dc3ae87a9d9",
      "new_mode": 33188,
      "new_path": "llvm/test/CodeGen/DirectX/imul_umul.ll"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f83b7b46e585945d6696863fd870116c58326283",
      "new_mode": 33188,
      "new_path": "llvm/test/CodeGen/DirectX/overflow_intrinsics.ll"
    }
  ]
}
