Author: Sarah Spall Date: 2025-03-28T16:28:56-07:00 New Revision: 1462c26a9f5505c899a3ddbd78fd0caa6675c5fd
URL: https://github.com/llvm/llvm-project/commit/1462c26a9f5505c899a3ddbd78fd0caa6675c5fd DIFF: https://github.com/llvm/llvm-project/commit/1462c26a9f5505c899a3ddbd78fd0caa6675c5fd.diff LOG: [HLSL] Add WaveReadLaneAt unsigned integer overloads (#133520) Add WaveReadLaneAt unsigned integer overloads 2nd argument of WaveReadLaneAt should be a uint32_t and not an int32_t add tests Closes #133473 Added: Modified: clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl Removed: ################################################################################ diff --git a/clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h b/clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h index b0ff9075377d8..0de04f13b7ec4 100644 --- a/clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h +++ b/clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h @@ -2358,77 +2358,108 @@ __attribute__((convergent)) bool WaveIsFirstLane(); // the specified wave. _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) bool WaveReadLaneAt(bool, int32_t); +__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, int32_t); +__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, int32_t); +__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, int32_t); +__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t); #ifdef __HLSL_ENABLE_16_BIT _HLSL_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, int32_t); +__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t); _HLSL_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, int32_t); +__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t); _HLSL_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, int32_t); +__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t); _HLSL_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, int32_t); +__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t); + +_HLSL_AVAILABILITY(shadermodel, 6.0) +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t); +_HLSL_AVAILABILITY(shadermodel, 6.0) +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t); +_HLSL_AVAILABILITY(shadermodel, 6.0) +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t); +_HLSL_AVAILABILITY(shadermodel, 6.0) +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t); #endif _HLSL_16BIT_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) half WaveReadLaneAt(half, int32_t); +__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t); _HLSL_16BIT_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) half2 WaveReadLaneAt(half2, int32_t); +__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t); _HLSL_16BIT_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) half3 WaveReadLaneAt(half3, int32_t); +__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t); _HLSL_16BIT_AVAILABILITY(shadermodel, 6.0) _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) half4 WaveReadLaneAt(half4, int32_t); +__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t); + +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t); + +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) +__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int WaveReadLaneAt(int, int32_t); +__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int2 WaveReadLaneAt(int2, int32_t); +__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int3 WaveReadLaneAt(int3, int32_t); +__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int4 WaveReadLaneAt(int4, int32_t); +__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) float WaveReadLaneAt(float, int32_t); +__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) float2 WaveReadLaneAt(float2, int32_t); +__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) float3 WaveReadLaneAt(float3, int32_t); +__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) float4 WaveReadLaneAt(float4, int32_t); +__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, int32_t); +__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, int32_t); +__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, int32_t); +__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, int32_t); +__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) double WaveReadLaneAt(double, int32_t); +__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) double2 WaveReadLaneAt(double2, int32_t); +__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) double3 WaveReadLaneAt(double3, int32_t); +__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at) -__attribute__((convergent)) double4 WaveReadLaneAt(double4, int32_t); +__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t); //===----------------------------------------------------------------------===// // WaveActiveMax builtins diff --git a/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl b/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl index d56a6af26896b..c94ef8a677350 100644 --- a/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl +++ b/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl @@ -19,6 +19,36 @@ int test_int(int expr, uint idx) { // CHECK-DXIL: declare [[TY]] @llvm.dx.wave.readlane.i32([[TY]], i32) #[[#attr:]] // CHECK-SPIRV: declare spir_func [[TY]] @llvm.spv.wave.readlane.i32([[TY]], i32) #[[#attr:]] +// CHECK-LABEL: test_uint +uint test_uint(uint expr, uint idx) { + // CHECK-SPIRV: %[[#entry_tok0:]] = call token @llvm.experimental.convergence.entry() + // CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i32([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok0]]) ] + // CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i32([[TY]] %[[#]], i32 %[[#]]) + // CHECK: ret [[TY]] %[[RET]] + return WaveReadLaneAt(expr, idx); +} + +// CHECK-LABEL: test_int64_t +int64_t test_int64_t(int64_t expr, uint idx) { + // CHECK-SPIRV: %[[#entry_tok0:]] = call token @llvm.experimental.convergence.entry() + // CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok0]]) ] + // CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]]) + // CHECK: ret [[TY]] %[[RET]] + return WaveReadLaneAt(expr, idx); +} + +// CHECK-DXIL: declare [[TY]] @llvm.dx.wave.readlane.i64([[TY]], i32) #[[#attr:]] +// CHECK-SPIRV: declare spir_func [[TY]] @llvm.spv.wave.readlane.i64([[TY]], i32) #[[#attr:]] + +// CHECK-LABEL: test_uint64_t +uint64_t test_uint64_t(uint64_t expr, uint idx) { + // CHECK-SPIRV: %[[#entry_tok0:]] = call token @llvm.experimental.convergence.entry() + // CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok0]]) ] + // CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]]) + // CHECK: ret [[TY]] %[[RET]] + return WaveReadLaneAt(expr, idx); +} + #ifdef __HLSL_ENABLE_16_BIT // CHECK-LABEL: test_int16 int16_t test_int16(int16_t expr, uint idx) { @@ -31,6 +61,15 @@ int16_t test_int16(int16_t expr, uint idx) { // CHECK-DXIL: declare [[TY]] @llvm.dx.wave.readlane.i16([[TY]], i32) #[[#attr:]] // CHECK-SPIRV: declare spir_func [[TY]] @llvm.spv.wave.readlane.i16([[TY]], i32) #[[#attr:]] + +// CHECK-LABEL: test_uint16 +uint16_t test_uint16(uint16_t expr, uint idx) { + // CHECK-SPIRV: %[[#entry_tok1:]] = call token @llvm.experimental.convergence.entry() + // CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i16([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok1]]) ] + // CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i16([[TY]] %[[#]], i32 %[[#]]) + // CHECK: ret [[TY]] %[[RET]] + return WaveReadLaneAt(expr, idx); +} #endif // Test basic lowering to runtime function call with array and float values. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits