)]}'
{
  "commit": "913141e63916622ec63c8670584eb6f71403ff84",
  "tree": "b84674642c2067e4dda0d0c96b75650da24236bc",
  "parents": [
    "bfdf30a8d0437ec8999ad03e00c6ceea6397c833"
  ],
  "author": {
    "name": "Amara Emerson",
    "email": "amara@apple.com",
    "time": "Fri Apr 17 14:49:01 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Apr 17 14:49:01 2026 -0700"
  },
  "message": "[AArch64][GlobalISel] Fix nonterminating legalization for \u003c8 x s4\u003e vectors. (#192747)\n\nG_CONCAT_VECTORS with \u003c16 x s4\u003e sources hits the bitcast legalization\npath, which round-trips through scalar types (e.g. s32) and regenerates\n\u003c8 x s4\u003e vectors via G_UNMERGE_VALUES and G_BUILD_VECTOR. The\nG_BUILD_VECTOR is then widened to \u003c8 x s8\u003e (via .minScalarOrElt(0, s8)),\nproducing G_ANYEXT/G_TRUNC artifact pairs. The artifact combiner folds\nthese pairs away, restoring the original \u003c8 x s4\u003e types, which feeds\nback into G_CONCAT_VECTORS again.\n\nThis change:\n * Adds .minScalarOrElt(1, s8) to the G_ICMP rules to ensure operand\nvector elements are at least s8. This causes \u003c16 x s4\u003e operands to be\nwidened\nto \u003c16 x s8\u003e, and the result type follows via minScalarEltSameAs.\n\n* Add custom legalization for G_CONCAT_VECTORS when element size \u003c 8.\nThe custom handler widens source operands via G_ANYEXT (e.g.\n\u003c8 x s4\u003e -\u003e \u003c8 x s8\u003e), concats the widened vectors (producing a\nlegal type like \u003c16 x s8\u003e), and truncs the result back to the\noriginal type.\n\nThe code is bad but we can fix that later, some fallbacks are fixed with\nthis.\n\nrdar://153760145",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5b07480677e47dcbafe4d0e3088507a19a380ebd",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp",
      "new_id": "5f240867ccdfe16a5dc734aa7e142955ec1f00df",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp"
    },
    {
      "type": "modify",
      "old_id": "12b6a6fa395a800a83c7e56dedc3763c89478a6b",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.h",
      "new_id": "535240a67a2cc580e696e1ebfd253bff647be970",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.h"
    },
    {
      "type": "modify",
      "old_id": "44411a1032dcae2af8108a7b79b8b46ddec68246",
      "old_mode": 33188,
      "old_path": "llvm/test/CodeGen/AArch64/arm64-zip.ll",
      "new_id": "cb3d2569a38d57fb8186f20d9abb13361c16cf00",
      "new_mode": 33188,
      "new_path": "llvm/test/CodeGen/AArch64/arm64-zip.ll"
    },
    {
      "type": "modify",
      "old_id": "16748cf16cb194b67ab96dd11c6ac8de8168248f",
      "old_mode": 33188,
      "old_path": "llvm/test/CodeGen/AArch64/dup.ll",
      "new_id": "8b8d4392461c87c99f4100bfa0f384055d56126a",
      "new_mode": 33188,
      "new_path": "llvm/test/CodeGen/AArch64/dup.ll"
    },
    {
      "type": "modify",
      "old_id": "af8cda4b4c1ca8d46da76c0b12f6ab19b467966b",
      "old_mode": 33188,
      "old_path": "llvm/test/CodeGen/AArch64/vec-combine-compare-to-bitmask.ll",
      "new_id": "a9a6570c9ebf500c6bd497328aac4b1724463640",
      "new_mode": 33188,
      "new_path": "llvm/test/CodeGen/AArch64/vec-combine-compare-to-bitmask.ll"
    }
  ]
}
