Skip to content

[WARP][Clang] WaveActiveBallot tests fail due to integer truncation to bool #711

@Icohedron

Description

@Icohedron

The tests WaveActiveBallot.Wave32, WaveActiveBallot.Wave64, and WaveActiveBallot.Wave128 started failing on WARP with Clang after llvm/llvm-project@faa4b97 was merged into LLVM.

The change in the IR before and after the commit comes from InstCombine being applied to

  Out[3] = WaveActiveBallot(threadID.x % 2 == 1);

The commit transforms instances of icmp instructions into trunc to i1, such as

%rem.i = and i32 %1, 1
%cmp8.i = icmp ne i32 %rem.i, 0

into

%cmp8.i = trunc i32 %1 to i1

This issue also only appears to affect WARP, as can be observed from the following Clang test results on all the machines:

Wave32

╭────┬──────────────────────┬─────────────┬────────────────────────────────┬─────────────┬──────────────────────────────────────╮
│  # │      timestamp       │   run-id    │            workflow            │   status    │                 test                 │
├────┼──────────────────────┼─────────────┼────────────────────────────────┼─────────────┼──────────────────────────────────────┤
│  0 │ 2026-02-03T18:15:57Z │ 21642188487 │ Windows D3D12 Warp Clang       │ FAIL        │ WaveOps/WaveActiveBallot.Wave32.test │
│  1 │ 2026-02-03T18:21:13Z │ 21642357057 │ Windows ARM64 D3D12 Warp Clang │ FAIL        │ WaveOps/WaveActiveBallot.Wave32.test │
│  2 │ 2026-02-03T20:11:21Z │ 21646031461 │ Windows D3D12 NVIDIA Clang     │ PASS        │ WaveOps/WaveActiveBallot.Wave32.test │
│  3 │ 2026-02-03T20:10:06Z │ 21645986872 │ Windows D3D12 Intel Clang      │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│  4 │ 2026-02-03T18:19:27Z │ 21642301201 │ Windows D3D12 QC Clang         │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│  5 │ 2026-02-03T20:46:23Z │ 21647192379 │ macOS Metal Clang              │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│  6 │ 2026-02-03T18:20:50Z │ 21642345045 │ Windows Vulkan AMD Clang       │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│  7 │ 2026-02-03T20:10:20Z │ 21645995911 │ Windows Vulkan Intel Clang     │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│  8 │ 2026-02-03T20:07:07Z │ 21645882341 │ Windows Vulkan NVIDIA Clang    │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│  9 │ 2026-02-03T18:19:19Z │ 21642296487 │ Windows Vulkan QC Clang        │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave32.test │
│ 10 │ 2026-02-03T18:19:36Z │ 21642305507 │ Windows D3D12 AMD Clang        │ XFAIL       │ WaveOps/WaveActiveBallot.Wave32.test │
╰────┴──────────────────────┴─────────────┴────────────────────────────────┴─────────────┴──────────────────────────────────────╯

Wave64

╭────┬──────────────────────┬─────────────┬────────────────────────────────┬─────────────┬──────────────────────────────────────╮
│  # │      timestamp       │   run-id    │            workflow            │   status    │                 test                 │
├────┼──────────────────────┼─────────────┼────────────────────────────────┼─────────────┼──────────────────────────────────────┤
│  0 │ 2026-02-03T18:15:57Z │ 21642188487 │ Windows D3D12 Warp Clang       │ FAIL        │ WaveOps/WaveActiveBallot.Wave64.test │
│  1 │ 2026-02-03T18:21:13Z │ 21642357057 │ Windows ARM64 D3D12 Warp Clang │ FAIL        │ WaveOps/WaveActiveBallot.Wave64.test │
│  2 │ 2026-02-03T18:19:27Z │ 21642301201 │ Windows D3D12 QC Clang         │ PASS        │ WaveOps/WaveActiveBallot.Wave64.test │
│  3 │ 2026-02-03T20:10:06Z │ 21645986872 │ Windows D3D12 Intel Clang      │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│  4 │ 2026-02-03T20:11:21Z │ 21646031461 │ Windows D3D12 NVIDIA Clang     │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│  5 │ 2026-02-03T20:46:23Z │ 21647192379 │ macOS Metal Clang              │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│  6 │ 2026-02-03T18:20:50Z │ 21642345045 │ Windows Vulkan AMD Clang       │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│  7 │ 2026-02-03T20:10:20Z │ 21645995911 │ Windows Vulkan Intel Clang     │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│  8 │ 2026-02-03T20:07:07Z │ 21645882341 │ Windows Vulkan NVIDIA Clang    │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│  9 │ 2026-02-03T18:19:19Z │ 21642296487 │ Windows Vulkan QC Clang        │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave64.test │
│ 10 │ 2026-02-03T18:19:36Z │ 21642305507 │ Windows D3D12 AMD Clang        │ XFAIL       │ WaveOps/WaveActiveBallot.Wave64.test │
╰────┴──────────────────────┴─────────────┴────────────────────────────────┴─────────────┴──────────────────────────────────────╯

Wave128

╭────┬──────────────────────┬─────────────┬────────────────────────────────┬─────────────┬───────────────────────────────────────╮
│  # │      timestamp       │   run-id    │            workflow            │   status    │                 test                  │
├────┼──────────────────────┼─────────────┼────────────────────────────────┼─────────────┼───────────────────────────────────────┤
│  0 │ 2026-02-03T18:15:57Z │ 21642188487 │ Windows D3D12 Warp Clang       │ FAIL        │ WaveOps/WaveActiveBallot.Wave128.test │
│  1 │ 2026-02-03T18:21:13Z │ 21642357057 │ Windows ARM64 D3D12 Warp Clang │ FAIL        │ WaveOps/WaveActiveBallot.Wave128.test │
│  2 │ 2026-02-03T18:19:27Z │ 21642301201 │ Windows D3D12 QC Clang         │ PASS        │ WaveOps/WaveActiveBallot.Wave128.test │
│  3 │ 2026-02-03T18:19:36Z │ 21642305507 │ Windows D3D12 AMD Clang        │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│  4 │ 2026-02-03T20:10:06Z │ 21645986872 │ Windows D3D12 Intel Clang      │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│  5 │ 2026-02-03T20:11:21Z │ 21646031461 │ Windows D3D12 NVIDIA Clang     │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│  6 │ 2026-02-03T20:46:23Z │ 21647192379 │ macOS Metal Clang              │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│  7 │ 2026-02-03T18:20:50Z │ 21642345045 │ Windows Vulkan AMD Clang       │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│  8 │ 2026-02-03T20:10:20Z │ 21645995911 │ Windows Vulkan Intel Clang     │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│  9 │ 2026-02-03T20:07:07Z │ 21645882341 │ Windows Vulkan NVIDIA Clang    │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
│ 10 │ 2026-02-03T18:19:19Z │ 21642296487 │ Windows Vulkan QC Clang        │ UNSUPPORTED │ WaveOps/WaveActiveBallot.Wave128.test │
╰────┴──────────────────────┴─────────────┴────────────────────────────────┴─────────────┴───────────────────────────────────────╯

Example logs (Windows D3D12 Warp Clang): https://github.com/llvm/offload-test-suite/actions/runs/21642188487/job/62384638556#step:12:770

********************
FAIL: OffloadTest-clang-warp-d3d12 :: WaveOps/WaveActiveBallot.Wave32.test (301 of 335)
******************** TEST 'OffloadTest-clang-warp-d3d12 :: WaveOps/WaveActiveBallot.Wave32.test' FAILED ********************
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 61
c:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin\split-file.exe C:\actions-runner\_work\offload-test-suite\offload-test-suite\OffloadTest\test\WaveOps\WaveActiveBallot.Wave32.test C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp
# executed command: 'c:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin\split-file.exe' 'C:\actions-runner\_work\offload-test-suite\offload-test-suite\OffloadTest\test\WaveOps\WaveActiveBallot.Wave32.test' 'C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp'
# RUN: at line 62
c:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin\clang-dxc.exe --dxv-path=C:/actions-runner/_work/offload-test-suite/offload-test-suite/DXC/build/bin -T cs_6_6 -Fo C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp.o C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp/source.hlsl
# executed command: 'c:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin\clang-dxc.exe' --dxv-path=C:/actions-runner/_work/offload-test-suite/offload-test-suite/DXC/build/bin -T cs_6_6 -Fo 'C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp.o' 'C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp/source.hlsl'
# .---command stdout------------
# | Signed DxilContainer written to "C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp.o"
# | Validation succeeded.
# `-----------------------------
# RUN: at line 63
c:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin\offloader.exe -warp -debug-layer C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp/pipeline.yaml C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp.o
# executed command: 'c:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin\offloader.exe' -warp -debug-layer 'C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp/pipeline.yaml' 'C:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-warp-d3d12\WaveOps\Output\WaveActiveBallot.Wave32.test.tmp.o'
# .---command stdout------------
# | Using DirectX API
# | Configuring execution on device: Microsoft Basic Render Driver
# | RootSignature created.
# | Descriptor heap created.
# | Command structures created.
# | Event prepared.
# | Creating UAV: { Size = 64, Register = u1, Space = 0, HasCounter = 0 }
# |     EltSize = 4 NumElts = 16
# | UAV: HeapIdx = 0 EltSize = 4 NumElts = 16 HasCounter = 0
# | Buffers created.
# | PSO created.
# | Compute command list created.
# | Compute commands executed.
# | Read data back.
# `-----------------------------
# .---command stderr------------
# | Test failed: Test
# | Comparison Rule: BufferExact
# | Expected:
# | ---
# | Name:            ExpectedOut
# | Format:          UInt32
# | Stride:          4
# | Data:            [ 3221225471, 0, 0, 0, 65535, 0, 0, 0, 0, 0, 0, 0, 2863311530, 
# |                    0, 0, 0 ]
# | OutputProps:
# |   Height:          0
# |   Width:           0
# |   Depth:           0
# | ...
# | Got:
# | ---
# | Name:            Out
# | Format:          UInt32
# | Stride:          4
# | Data:            [ 3221225471, 0, 0, 0, 65535, 0, 0, 0, 0, 0, 0, 0, 4294967294, 
# |                    0, 0, 0 ]
# | OutputProps:
# |   Height:          0
# |   Width:           0
# |   Depth:           0
# | ...
# | Full Hex 64bit representation of Expected Buffer Values:
# | [ 0xbfffffff, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaaaaaaaa, 0x0, 0x0, 0x0 ]
# | Full Hex 64bit representation of Actual Buffer Values:
# | [ 0xbfffffff, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffffe, 0x0, 0x0, 0x0 ]
# | 
# `-----------------------------
# error: command failed with exit status: 1

--

Metadata

Metadata

Assignees

No one assigned

    Labels

    driver-bugBugs that are likely or confirmed GPU driver bugs

    Type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions