Skip to content

Commit 1462c26

Browse files
authored
[HLSL] Add WaveReadLaneAt unsigned integer overloads (llvm#133520)
Add WaveReadLaneAt unsigned integer overloads 2nd argument of WaveReadLaneAt should be a uint32_t and not an int32_t add tests Closes llvm#133473
1 parent e29f228 commit 1462c26

File tree

2 files changed

+98
-28
lines changed

2 files changed

+98
-28
lines changed

clang/lib/Headers/hlsl/hlsl_alias_intrinsics.h

Lines changed: 59 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2358,77 +2358,108 @@ __attribute__((convergent)) bool WaveIsFirstLane();
23582358
// the specified wave.
23592359

23602360
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2361-
__attribute__((convergent)) bool WaveReadLaneAt(bool, int32_t);
2361+
__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
23622362
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2363-
__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, int32_t);
2363+
__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
23642364
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2365-
__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, int32_t);
2365+
__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
23662366
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2367-
__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, int32_t);
2367+
__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
23682368

23692369
#ifdef __HLSL_ENABLE_16_BIT
23702370
_HLSL_AVAILABILITY(shadermodel, 6.0)
23712371
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2372-
__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, int32_t);
2372+
__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
23732373
_HLSL_AVAILABILITY(shadermodel, 6.0)
23742374
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2375-
__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, int32_t);
2375+
__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
23762376
_HLSL_AVAILABILITY(shadermodel, 6.0)
23772377
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2378-
__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, int32_t);
2378+
__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
23792379
_HLSL_AVAILABILITY(shadermodel, 6.0)
23802380
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2381-
__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, int32_t);
2381+
__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2382+
2383+
_HLSL_AVAILABILITY(shadermodel, 6.0)
2384+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2385+
__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2386+
_HLSL_AVAILABILITY(shadermodel, 6.0)
2387+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2388+
__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2389+
_HLSL_AVAILABILITY(shadermodel, 6.0)
2390+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2391+
__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2392+
_HLSL_AVAILABILITY(shadermodel, 6.0)
2393+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2394+
__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
23822395
#endif
23832396

23842397
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
23852398
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2386-
__attribute__((convergent)) half WaveReadLaneAt(half, int32_t);
2399+
__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
23872400
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
23882401
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2389-
__attribute__((convergent)) half2 WaveReadLaneAt(half2, int32_t);
2402+
__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
23902403
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
23912404
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2392-
__attribute__((convergent)) half3 WaveReadLaneAt(half3, int32_t);
2405+
__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
23932406
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
23942407
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2395-
__attribute__((convergent)) half4 WaveReadLaneAt(half4, int32_t);
2408+
__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2409+
2410+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2411+
__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2412+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2413+
__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2414+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2415+
__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2416+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2417+
__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2418+
2419+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2420+
__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2421+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2422+
__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2423+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2424+
__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2425+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2426+
__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
23962427

23972428
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2398-
__attribute__((convergent)) int WaveReadLaneAt(int, int32_t);
2429+
__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
23992430
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2400-
__attribute__((convergent)) int2 WaveReadLaneAt(int2, int32_t);
2431+
__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
24012432
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2402-
__attribute__((convergent)) int3 WaveReadLaneAt(int3, int32_t);
2433+
__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
24032434
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2404-
__attribute__((convergent)) int4 WaveReadLaneAt(int4, int32_t);
2435+
__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
24052436

24062437
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2407-
__attribute__((convergent)) float WaveReadLaneAt(float, int32_t);
2438+
__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
24082439
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2409-
__attribute__((convergent)) float2 WaveReadLaneAt(float2, int32_t);
2440+
__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
24102441
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2411-
__attribute__((convergent)) float3 WaveReadLaneAt(float3, int32_t);
2442+
__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
24122443
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2413-
__attribute__((convergent)) float4 WaveReadLaneAt(float4, int32_t);
2444+
__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
24142445

24152446
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2416-
__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, int32_t);
2447+
__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
24172448
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2418-
__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, int32_t);
2449+
__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
24192450
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2420-
__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, int32_t);
2451+
__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
24212452
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2422-
__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, int32_t);
2453+
__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
24232454

24242455
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2425-
__attribute__((convergent)) double WaveReadLaneAt(double, int32_t);
2456+
__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
24262457
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2427-
__attribute__((convergent)) double2 WaveReadLaneAt(double2, int32_t);
2458+
__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
24282459
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2429-
__attribute__((convergent)) double3 WaveReadLaneAt(double3, int32_t);
2460+
__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
24302461
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2431-
__attribute__((convergent)) double4 WaveReadLaneAt(double4, int32_t);
2462+
__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
24322463

24332464
//===----------------------------------------------------------------------===//
24342465
// WaveActiveMax builtins

clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,36 @@ int test_int(int expr, uint idx) {
1919
// CHECK-DXIL: declare [[TY]] @llvm.dx.wave.readlane.i32([[TY]], i32) #[[#attr:]]
2020
// CHECK-SPIRV: declare spir_func [[TY]] @llvm.spv.wave.readlane.i32([[TY]], i32) #[[#attr:]]
2121

22+
// CHECK-LABEL: test_uint
23+
uint test_uint(uint expr, uint idx) {
24+
// CHECK-SPIRV: %[[#entry_tok0:]] = call token @llvm.experimental.convergence.entry()
25+
// CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i32([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok0]]) ]
26+
// CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i32([[TY]] %[[#]], i32 %[[#]])
27+
// CHECK: ret [[TY]] %[[RET]]
28+
return WaveReadLaneAt(expr, idx);
29+
}
30+
31+
// CHECK-LABEL: test_int64_t
32+
int64_t test_int64_t(int64_t expr, uint idx) {
33+
// CHECK-SPIRV: %[[#entry_tok0:]] = call token @llvm.experimental.convergence.entry()
34+
// CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok0]]) ]
35+
// CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]])
36+
// CHECK: ret [[TY]] %[[RET]]
37+
return WaveReadLaneAt(expr, idx);
38+
}
39+
40+
// CHECK-DXIL: declare [[TY]] @llvm.dx.wave.readlane.i64([[TY]], i32) #[[#attr:]]
41+
// CHECK-SPIRV: declare spir_func [[TY]] @llvm.spv.wave.readlane.i64([[TY]], i32) #[[#attr:]]
42+
43+
// CHECK-LABEL: test_uint64_t
44+
uint64_t test_uint64_t(uint64_t expr, uint idx) {
45+
// CHECK-SPIRV: %[[#entry_tok0:]] = call token @llvm.experimental.convergence.entry()
46+
// CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok0]]) ]
47+
// CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i64([[TY]] %[[#]], i32 %[[#]])
48+
// CHECK: ret [[TY]] %[[RET]]
49+
return WaveReadLaneAt(expr, idx);
50+
}
51+
2252
#ifdef __HLSL_ENABLE_16_BIT
2353
// CHECK-LABEL: test_int16
2454
int16_t test_int16(int16_t expr, uint idx) {
@@ -31,6 +61,15 @@ int16_t test_int16(int16_t expr, uint idx) {
3161

3262
// CHECK-DXIL: declare [[TY]] @llvm.dx.wave.readlane.i16([[TY]], i32) #[[#attr:]]
3363
// CHECK-SPIRV: declare spir_func [[TY]] @llvm.spv.wave.readlane.i16([[TY]], i32) #[[#attr:]]
64+
65+
// CHECK-LABEL: test_uint16
66+
uint16_t test_uint16(uint16_t expr, uint idx) {
67+
// CHECK-SPIRV: %[[#entry_tok1:]] = call token @llvm.experimental.convergence.entry()
68+
// CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.i16([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok1]]) ]
69+
// CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.i16([[TY]] %[[#]], i32 %[[#]])
70+
// CHECK: ret [[TY]] %[[RET]]
71+
return WaveReadLaneAt(expr, idx);
72+
}
3473
#endif
3574

3675
// Test basic lowering to runtime function call with array and float values.

0 commit comments

Comments
 (0)