[all-commits] [llvm/llvm-project] 7f3fa1: [HLSL] Add `InterlockedCompareExchange` function a...

Joshua Batista via All-commits all-commits at lists.llvm.org
Tue Sep 29 13:47:39 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 7f3fa136e4d28da1d8d536271f2a9b7eff7b7656
      https://github.com/llvm/llvm-project/commit/7f3fa136e4d28da1d8d536271f2a9b7eff7b7656
  Author: Joshua Batista <jbatista at microsoft.com>
  Date:   2026-09-29 (Tue, 29 Sep 2026)

  Changed paths:
    M clang/include/clang/Basic/Builtins.td
    M clang/lib/CodeGen/CGHLSLBuiltins.cpp
    M clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
    M clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h
    M clang/lib/Sema/HLSLExternalSemaSource.cpp
    M clang/lib/Sema/SemaHLSL.cpp
    A clang/test/CodeGenHLSL/builtins/InterlockedCompareExchange.hlsl
    M clang/test/CodeGenHLSL/builtins/RWBuffer-Interlocked.hlsl
    A clang/test/CodeGenHLSL/builtins/RWByteAddressBuffer-InterlockedCompareExchange.hlsl
    M clang/test/CodeGenHLSL/builtins/RWTexture-Interlocked.hlsl
    A clang/test/CodeGenHLSL/builtins/RasterizerOrderedByteAddressBuffer-InterlockedCompareExchange.hlsl
    A clang/test/SemaHLSL/BuiltIns/ByteAddressBuffer-InterlockedCompareExchange-sm65-errors.hlsl
    A clang/test/SemaHLSL/BuiltIns/InterlockedCompareExchange-errors.hlsl

  Log Message:
  -----------
  [HLSL] Add `InterlockedCompareExchange` function and resource methods (#222165)

This PR adds the `InterlockedCompareExchange` standalone function and
resource
methods. The operation lowers to the same `cmpxchg monotonic` as
`InterlockedCompareStore`.

`InterlockedCompareExchange` reports the previous value, so an
`extractvalue`
reads it from the `cmpxchg` result and stores it through the
`original_value`
reference parameter.

The PR also adds the 64-bit `InterlockedCompareExchange64` methods,
which DXIL
gates on shader model 6.6.

Fixes: https://github.com/llvm/llvm-project/issues/99130
Assisted by: Github Copilot


  Commit: 1fbf8123cd0224cbcc7a877269f4e998ba97adf0
      https://github.com/llvm/llvm-project/commit/1fbf8123cd0224cbcc7a877269f4e998ba97adf0
  Author: Joshua Batista <jbatista at microsoft.com>
  Date:   2026-09-29 (Tue, 29 Sep 2026)

  Changed paths:
    M clang/include/clang/Basic/Builtins.td
    M clang/lib/CodeGen/CGHLSLBuiltins.cpp
    M clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
    M clang/lib/Sema/HLSLExternalSemaSource.cpp
    M clang/lib/Sema/SemaHLSL.cpp
    A clang/test/CodeGenHLSL/builtins/InterlockedCompareStoreFloatBitwise.hlsl
    M clang/test/CodeGenHLSL/builtins/RWBuffer-Interlocked.hlsl
    A clang/test/CodeGenHLSL/builtins/RWByteAddressBuffer-InterlockedCompareStoreFloatBitwise.hlsl
    M clang/test/CodeGenHLSL/builtins/RWTexture-Interlocked.hlsl
    A clang/test/CodeGenHLSL/builtins/RasterizerOrderedByteAddressBuffer-InterlockedCompareStoreFloatBitwise.hlsl
    A clang/test/SemaHLSL/BuiltIns/ByteAddressBuffer-InterlockedCompareStoreFloatBitwise-sm60.hlsl
    A clang/test/SemaHLSL/BuiltIns/InterlockedCompareStoreFloatBitwise-errors.hlsl
    A llvm/test/CodeGen/DirectX/ResourceAtomicCompareStoreFloat.ll

  Log Message:
  -----------
  [HLSL] Add `InterlockedCompareStoreFloatBitwise` function and resource methods (#222166)

This PR adds the `InterlockedCompareStoreFloatBitwise` standalone
function and
resource methods.

`cmpxchg` rejects a float operand, clang therefore
bitcasts both float arguments to `i32` before it emits the `cmpxchg`,
and the
backend only ever sees an integer compare exchange. No DXIL legalization
is
needed for this operation.

DXC declares this function for 32-bit float alone, with no integer
overload,
so the overload set here is float only. `half` and `double` are
rejected.

The operation reuses the 32-bit integer DXIL operation, so it needs no
capability bits and works from shader model 6.0. A test checks both
halves of
that: the float-bitwise form is accepted at SM 6.0, and the 64-bit
compare-store is still rejected there.

Fixes: https://github.com/llvm/llvm-project/issues/99202
Assisted by: Github Copilot


  Commit: 4a0e98b75de7a93c00b374bfd02b5235e49d4261
      https://github.com/llvm/llvm-project/commit/4a0e98b75de7a93c00b374bfd02b5235e49d4261
  Author: Joshua Batista <jbatista at microsoft.com>
  Date:   2026-09-29 (Tue, 29 Sep 2026)

  Changed paths:
    M clang/include/clang/Basic/Builtins.td
    M clang/lib/CodeGen/CGHLSLBuiltins.cpp
    M clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
    M clang/lib/Sema/HLSLExternalSemaSource.cpp
    M clang/lib/Sema/SemaHLSL.cpp
    A clang/test/CodeGenHLSL/builtins/InterlockedCompareExchangeFloatBitwise.hlsl
    M clang/test/CodeGenHLSL/builtins/RWBuffer-Interlocked.hlsl
    A clang/test/CodeGenHLSL/builtins/RWByteAddressBuffer-InterlockedCompareExchangeFloatBitwise.hlsl
    M clang/test/CodeGenHLSL/builtins/RWTexture-Interlocked.hlsl
    A clang/test/CodeGenHLSL/builtins/RasterizerOrderedByteAddressBuffer-InterlockedCompareExchangeFloatBitwise.hlsl
    A clang/test/SemaHLSL/BuiltIns/ByteAddressBuffer-InterlockedCompareExchangeFloatBitwise-sm60.hlsl
    A clang/test/SemaHLSL/BuiltIns/InterlockedCompareExchangeFloatBitwise-errors.hlsl

  Log Message:
  -----------
  [HLSL] Add `InterlockedCompareExchangeFloatBitwise` function and resource methods (#222167)

This PR adds the `InterlockedCompareExchangeFloatBitwise` standalone
function
and resource methods. It completes the interlocked stack.

The operation matches `InterlockedCompareStoreFloatBitwise`, except that
it
reports the previous value. Clang bitcasts both float arguments to `i32`
before the `cmpxchg`, then bitcasts the extracted result back to `float`
before it stores it through the `original_value` reference parameter.

As with the compare-store form, DXC declares this function for 32-bit
float
alone, so the overload set is float only, and the operation reuses the
32-bit
integer DXIL operation, so it works from shader model 6.0 without
capability
bits.

Fixes: https://github.com/llvm/llvm-project/issues/99203
Assisted by: Github Copilot


Compare: https://github.com/llvm/llvm-project/compare/a367d923818d...4a0e98b75de7

To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list