PR Digest Iteration 61 - intel/intel-xpu-backend-for-triton GitHub Wiki
PR Summary
Period: 2026-07-05 to 2026-07-18 (Iteration 61) | Total PRs: 74 (62 from Xe2/Xe3/Xe3P, 12 from Xe4) | Lines changed: +51,761 / -15,108
Triton XPU BE (Xe2/Xe3/Xe3P) (62 PRs, +14,277 / -5,051)
A major focus this iteration was expanding 2D block I/O support: host-side tensor descriptors can now use the fast path, VNNI-format packing for sub-group-size=32 was added, and a critical i32 overflow in stride/pitch lowering was fixed. The static kernel launcher hot path was optimized to reduce per-launch overhead. A loop-distribution pass was introduced to split multi-dot kernels, reducing register and descriptor pressure. Several correctness fixes addressed IGC segfaults on non-LTS drivers, CanonicalizePointers overflows, and null-layout crashes through tt.scan. Two upstream synchronizations were completed with a 99.44%–99.49% test pass rate.
Key accomplishments:
- Extended 2D block I/O to host-side tensor descriptor arguments via a new pre-pass that expands descriptor function args into traceable scalars
- Fixed i32 overflow in 2D block IO stride/pitch lowering for large tensors on Intel GPU
- Added VNNI-transform 2D block load for sub-group-size=32, broadening DPAS-aligned memory access coverage
- Reduced static kernel launcher overhead by eliminating duplicate lookups in the launch hot path
- Added a loop-distribution pass to split multi-dot loops, addressing PTSS pressure on dense attention kernels
- Fixed IGC segfault on non-LTS drivers from sub-byte integer bitcasts
- Fixed CanonicalizePointers integer overflow and disabled it by default after finding an E2E regression
Memory Access & Lowering
Expanded 2D block I/O coverage to host-side descriptors and sub-group-size=32 VNNI, plus overflow and pitch fixes.
- #7470 Enable 2D block I/O for host-side tensor descriptors (cherry-pick) — Cherry-picks #7397 onto the release branch with the host-side pre-pass disabled by default. (+511/-15, @anmyachev)
- #7397 Enable 2D block I/O for host-side tensor descriptors — Adds a pre-pass that expands descriptor-typed function arguments into decomposed scalars, making host-side descriptors traceable for the 2D block I/O fast path. (+499/-14, @whitneywhtsang)
- #7468 Fix i32 overflow in 2D block IO stride/pitch lowering (cherry-pick) — Cherry-picks #7358 broadening stride arithmetic to i64 and adding guards for invalid hardware operands on large tensors. (+470/-25, @anmyachev)
- #7358 Fix i32 overflow in 2D block IO stride/pitch lowering — Fixes incorrect surface descriptor formation when large strides cause i32 truncation; adds MLIR regression tests. (+470/-25, @sapirbir)
- #7350 Support VNNI transform 2D block IO when sub-group-size=32 — Extends 2D block I/O to carry an explicit vnni flag through tile-size computation into LLVM lowering for sub-group-size=32. (+117/-37, @chengjunlu)
- #7472 Fix pitch < base_width for broadcast 2D block I/O after alignment compensation — Corrects pitch computation for broadcast tiles after alignment adjustment. (+29/-15, @anmyachev)
- #7463 Fix pitch < base_width for broadcast 2D block I/O after alignment compensation — Same fix backported; closes the broadcast-pitch gap independently. (+29/-15, @whitneywhtsang)
- #7490 Add TritonGen op for gathering load — Introduces a new TritonGEN dialect op for predicated sub-group gather loads from a vector of uniform addresses. (+242/-2, @chengjunlu)
- #7487 Support transpose B matrix load for sub-group-size=32 — Refines transpose shuffle mapping validation and threads the full BlockIOTileSizeInfo into the shuffle-mapping API for sub-group-size=32. (+259/-48, @chengjunlu)
- #7349 Add compile option to enable DPAS for sub-group-size=32 kernels — Adds a compiler option to force-enable DPAS for kernels with sub-group-size=32. (+12/-29, @chengjunlu)
Analysis & Correctness
IGC segfault fixes, CanonicalizePointers overflow, and null-layout crash through tt.scan.
- #7516 Run expandSubByteVectorBitcast unconditionally to fix IGC segfault on non-LTS drivers — Moves the sub-byte bitcast expansion to run unconditionally, fixing #7512 IGC segfaults on non-LTS drivers. (+6/-11, @wdziurdz)
- #7517 Run expandSubByteVectorBitcast unconditionally (cherry-pick) — Cherry-picks the fix onto the release branch. (+6/-11, @anmyachev)
- #7467 Fix overflow in CanonicalizePointers pass (cherry-pick) — Cherry-picks #7447 fixing integer overflow in CanonicalizePointers without widening to i64. (+124/-3, @anmyachev)
- #7447 Fix overflow in CanonicalizePointers pass — Fixes the overflow that caused wrong pointer arithmetic in the CanonicalizePointers pass. (+124/-3, @anmyachev)
- #7499 Fix pointer-offset overflow in CanonicalizePointers without widening to i64 (cherry-pick) — Reverts a performance-regressing approach and re-applies the overflow fix. (+55/-70, @anmyachev)
- #7514 Fix pointer-offset overflow in CanonicalizePointers (cherry-pick) — Companion release-branch cherry-pick. (+55/-70, @anmyachev)
- #7515 Disable CanonicalizePointers pass by default — Disables CanonicalizePointers after an E2E performance regression was found. (+1/-1, @anmyachev)
- #7408 Fix IGC segfault on sub-byte int bitcast — Adds
expandSubByteVectorBitcastpost-process pass that rewrites sub-byte vector bitcast chains so LTS2 IGC never seesiN(N<8) types. (+179/-5, @anmyachev) - #7424 Fix crash on null layout inference through tt.scan — Prevents LayoutRematerialization from recording a null Attribute when tt.scan's target layout is non-blocked, fixing #7336. (+33/-0, @januszjah)
- #7474 Reject FuseReshape fusion when block extent may exceed real dimension (cherry-pick) — Cherry-picks the guard added in #7471 to prevent illegal extent-exceeding fusions. (+38/-0, @anmyachev)
- #7471 Reject FuseReshape fusion when block extent may exceed real dimension — Adds an
isDivisible(shapes[1], blockExtent)guard to FuseReshape to prevent incorrect fusion. (+38/-0, @anmyachev) - #7483 Revert SPIR-V subgroup_matrix_multiply_accumulate_float extension — Reverts the SPV_INTEL extension addition after it caused regressions. (+3/-255, @whitneywhtsang)
- #7513 Cache Extractor lookups in launch() (cherry-pick) — Cherry-picks the lookup caching optimization to the release branch. (+6/-5, @anmyachev)
Compiler Pipeline
Loop distribution and launcher hot-path improvements.
- #7382 Add loop distribution pass for multi-dot loops (cherry-pick) — Cherry-picks #7356, the
tritonintelgpu-loop-distributepass that splits multi-dot scf.for loops to reduce register and descriptor pressure. (+466/-0, @whitneywhtsang) - #7356 Add loop distribution pass for multi-dot loops — Original implementation of the loop-distribution pass. (+466/-0, @whitneywhtsang)
- #7453 Skip redundant registers in atomic RMW/CAS lowering (cherry-pick) — Cherry-picks the atomic lowering optimization from #7448. (+42/-0, @anmyachev)
- #7448 Skip redundant registers in atomic RMW/CAS lowering — Adjusts Intel's LoadStore atomic lowering to skip redundant registers, aligned with NVIDIA's approach. Closes #7436. (+42/-0, @wdziurdz)
- #7479 Reduce per-launch overhead in static launcher hot path (cherry-pick) — Cherry-picks #7475 reducing static-launcher overhead. (+66/-65, @anmyachev)
- #7475 Reduce per-launch overhead in static launcher hot path — Eliminates duplicate Extractor lookups and reduces overhead in the kernel launch hot path. (+66/-65, @anmyachev)
- #7501 Cache Extractor lookups in launch() — Caches Extractor lookups to reduce repeated work per kernel launch. (+6/-5, @anmyachev)
- #7383 Fix int1 handling in block-ptr-to-tdesc eligibility — Fixes the block-pointer-to-descriptor eligibility check for int1 tensors. (+3/-8, @whitneywhtsang)
- #7404 Include libsycl_dir in compile_module_from_src cache key — Adds the libsycl directory to the cache key for
compile_module_from_src. (+15/-2, @anmyachev) - #7338 Fix: include libsycl_dir in compile_module_from_src cache key — Same fix applied on a sibling code path. (+15/-2, @ZhaoqiongZ)
- #7401 Support more SYCL capable compilers building kernel launchers — Enables additional SYCL compiler variants to build the static kernel launcher. (+91/-22, @anmyachev)
- #7311 Support more SYCL capable compilers building kernel launchers — Broadens SYCL compiler detection for launcher builds. (+91/-22, @dvrogozh)
- #7459 Guard host descriptor synthesis with env var — Adds an env-var gate to control host descriptor synthesis. (+13/-2, @whitneywhtsang)
Benchmark & Test Infrastructure
- #7313 Integrate vLLM benchmarks with the triton_kernels_benchmark framework — Wires vLLM benchmarks into the triton_kernels_benchmark CLI framework. (+225/-113, @januszjah)
- #7413 Add vllm tests on tdesc patched unified attention — Adds vLLM tests using tensor-descriptor patched unified attention. (+1851/-0, @quinnlp)
- #7403 Increase MoE and quant test coverage for priority kernels — Expands vLLM MoE and quantization test coverage for high-priority kernels. (+485/-2, @quinnlp)
- #7399 Increase ModelRunner V2 test coverage for priority kernels — Adds ModelRunner V2 tests for priority vLLM kernels. (+13/-1, @quinnlp)
- #7374 Fix Windows Proton profiler + DLL loading — Fixes DLL loading issues in the Proton profiler on native Windows. (+33/-19, @ksmoliansky)
- #7456 Enable spirv-dis SPV_INTEL_predicated_io provisioning on Windows — Enables the SPV_INTEL_predicated_io SPIR-V extension provisioning on the Windows build. (+38/-13, @januszjah)
- #7485 Fix test_line_info Windows path-separator mismatch — Fixes path-separator mismatch in test_line_info FileCheck patterns on Windows. (+7/-0, @kwasd)
- #7507 Skip test_compile_only_* on Windows when NVIDIA/AMD toolchain is missing — Adds skip guards for compile-only tests on Windows without NVIDIA/AMD toolchains. (+16/-0, @kwasd)
- #7506 Skip test_chain_reduce PTSS scratch-space overflow on Windows — Skips the chain-reduce test that hits PTSS limits on Windows. (+10/-0, @kwasd)
- #7505 Fix PermissionError in test_auto_large_grf's zebin handling on Windows — Fixes a file permission error in the large-GRF test on Windows. (+4/-7, @kwasd)
- #7482 Skip test_debug.py failures on A770/Windows — Skips debug test failures specific to A770 on Windows. (+41/-0, @kwasd)
- #7478 Skip tests failing to allocate 4 GB on A770 — Adds skip guards for tests requiring >4 GB allocation on A770. (+8/-0, @kwasd)
- #7502 Clean up stale skiplist entries in a770, arl-h, arl-s — Removes obsolete skip entries from A770, ARL-H, and ARL-S skiplists. (+18/-21, @kwasd)
- #7508 Skip test_atomic_poll worker-crash failures — Adds a skip for atomic_poll tests that cause worker crashes in PTL. (+10/-0, @kwasd)
- #7418 Add profiler warmup for BMG benchmarks — Adds a warmup step to the BMG benchmark profiler. (+7/-2, @ElroiIzaks)
- #7428 Update shapes for fused GEMM benchmark — Updates shape configurations for the fused GEMM benchmark. (+10/-18, @chengjunlu)
- #7344 Add tests to fill coverage gap — Adds vLLM tests to fill coverage gaps. (+6/-3, @quinnlp)
- #7346 Add kda tests — Adds key-dependent attention tests to the vLLM suite. (+24/-8, @quinnlp)
- #7312 Fix fresh_triton_cache fixture to isolate on-disk cache directory — Fixes the test fixture to properly isolate on-disk Triton caches between test runs. (+23/-14, @januszjah)
- #7279 Update PyTorch pin — Bumps the PyTorch version pin. (+14/-42, @wdziurdz)
- #7380 Update PyTorch pin (backport) — Backports the PyTorch pin update. (+14/-42, @wdziurdz)
- #7381 Update vLLM pin — Bumps the vLLM version pin. (+145/-134, @quinnlp)
- #7323 Bump actions/cache from 5 to 6 — Updates the GitHub Actions cache action to v6. (+11/-11, @app/dependabot)
- #7231 Add autotuning for BLOCK_M to unified attention kernel — Adds BLOCK_M to the autotune space of the vLLM unified attention kernel. (+195/-11, @sarah12121212)
- #7469 Update DPAS layout documentation for sub-group-size-32 kernels — Updates internal documentation for the DPAS layout of sub-group-size=32 kernels. (+51/-1, @chengjunlu)
Upstream Alignment
2 upstream merges from OpenAI Triton (commits ecfc626, 326ee7f) — pass rate 99.44%–99.49%.