Skip to content

Test sub-group shuffles of a mixed-width tuple - #732

Merged
maleadt merged 1 commit into
mainfrom
tb/igc-byte-dst-shuffle
Oct 23, 2026
Merged

maleadt merged 1 commit into
mainfrom
tb/igc-byte-dst-shuffle

Conversation

@maleadt

@maleadt maleadt commented Oct 22, 2026

Copy link
Copy Markdown
Member

Adds a regression test for an IGC miscompile on Gen12LP (Tiger Lake, DG1, Alder Lake integrated graphics): a sub-group shuffle of a Tuple{Bool, Int8, Float16, UInt16} returned 0 for the Int8. The shuffle packs the first three fields into one word. When unpacking, IGC could place the byte that receives the Int8 at byte 3 of a dword. The hardware doesn't write a byte destination there, so the stale register contents got stored. Details and an OpenCL C reproducer are in intel/intel-graphics-compiler#456.

This showed up in KernelInterface's shuffle tests on top of #731: the exception-reporting code on the bounds-check paths changed the register allocation. A plain kernel hits the bug on main too, though. The test reads and writes through pointers, so the bounds-check flag doesn't change the generated code. Without the fix, it fails on an Iris Xe (TGL) with and without --check-bounds=yes.

The fix is backported in JuliaPackaging/Yggdrasil#15280, which builds libigc_jll 2.41.5+2. No compat change is needed: NEO_jll's compat accepts any 2.41.5 build of libigc_jll, and Pkg resolves to the latest one. Until that build is registered, CI on Gen12LP hardware will fail this test. I ran the full test suite on TGL with that build: 22028 tests passed, 30 broken, none failed, including the new test.

On Gen12LP, IGC could place the byte that receives the Int8 of a shuffled Tuple{Bool, Int8, Float16, UInt16} at byte 3 of a dword, which the hardware doesn't write, so the Int8 came back as 0 (intel/intel-graphics-compiler#456). libigc_jll 2.41.5+2 carries the fix; NEO_jll's compat already allows it.
@codecov

codecov Bot commented Oct 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.62%. Comparing base (d0abe28) to head (3228a2e).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #732      +/-   ##
==========================================
- Coverage   85.08%   84.62%   -0.47%     
==========================================
  Files          53       52       -1     
  Lines        4660     4533     -127     
==========================================
- Hits         3965     3836     -129     
- Misses        695      697       +2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@maleadt
maleadt merged commit 7020223 into main Oct 23, 2026
5 checks passed
@maleadt
maleadt deleted the tb/igc-byte-dst-shuffle branch October 23, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant