|
| 1 | +// RUN: %clang_cc1 -Wno-unused-value -O0 -internal-isystem %S/../../lib/Headers -include __clang_spirv_builtins.h -triple spirv64 -emit-llvm %s -fsycl-is-device -o - | FileCheck %s -check-prefixes=CHECK64 |
| 2 | +// RUN: %clang_cc1 -Wno-unused-value -O0 -internal-isystem %S/../../lib/Headers -include __clang_spirv_builtins.h -triple spirv64 -emit-llvm %s -x cl -o - | FileCheck %s -check-prefixes=CHECK64 |
| 3 | +// RUN: %clang_cc1 -Wno-unused-value -O0 -internal-isystem %S/../../lib/Headers -include __clang_spirv_builtins.h -triple spirv32 -emit-llvm %s -fsycl-is-device -o - | FileCheck %s -check-prefixes=CHECK32 |
| 4 | +// RUN: %clang_cc1 -Wno-unused-value -O0 -internal-isystem %S/../../lib/Headers -include __clang_spirv_builtins.h -triple spirv32 -emit-llvm %s -x cl -o - | FileCheck %s -check-prefixes=CHECK32 |
| 5 | +// RUN: %clang_cc1 -Wno-unused-value -O0 -internal-isystem %S/../../lib/Headers -include __clang_spirv_builtins.h -triple nvptx64 -emit-llvm %s -fsycl-is-device -o - | FileCheck %s -check-prefixes=NV |
| 6 | + |
| 7 | + |
| 8 | +// CHECK64: call i64 @llvm.spv.num.workgroups.i64(i32 0) |
| 9 | +// CHECK64: call i64 @llvm.spv.num.workgroups.i64(i32 1) |
| 10 | +// CHECK64: call i64 @llvm.spv.num.workgroups.i64(i32 2) |
| 11 | +// CHECK64: call i64 @llvm.spv.workgroup.size.i64(i32 0) |
| 12 | +// CHECK64: call i64 @llvm.spv.workgroup.size.i64(i32 1) |
| 13 | +// CHECK64: call i64 @llvm.spv.workgroup.size.i64(i32 2) |
| 14 | +// CHECK64: call i64 @llvm.spv.group.id.i64(i32 0) |
| 15 | +// CHECK64: call i64 @llvm.spv.group.id.i64(i32 1) |
| 16 | +// CHECK64: call i64 @llvm.spv.group.id.i64(i32 2) |
| 17 | +// CHECK64: call i64 @llvm.spv.thread.id.in.group.i64(i32 0) |
| 18 | +// CHECK64: call i64 @llvm.spv.thread.id.in.group.i64(i32 1) |
| 19 | +// CHECK64: call i64 @llvm.spv.thread.id.in.group.i64(i32 2) |
| 20 | +// CHECK64: call i64 @llvm.spv.thread.id.i64(i32 0) |
| 21 | +// CHECK64: call i64 @llvm.spv.thread.id.i64(i32 1) |
| 22 | +// CHECK64: call i64 @llvm.spv.thread.id.i64(i32 2) |
| 23 | +// CHECK64: call i64 @llvm.spv.global.size.i64(i32 0) |
| 24 | +// CHECK64: call i64 @llvm.spv.global.size.i64(i32 1) |
| 25 | +// CHECK64: call i64 @llvm.spv.global.size.i64(i32 2) |
| 26 | +// CHECK64: call i64 @llvm.spv.global.offset.i64(i32 0) |
| 27 | +// CHECK64: call i64 @llvm.spv.global.offset.i64(i32 1) |
| 28 | +// CHECK64: call i64 @llvm.spv.global.offset.i64(i32 2) |
| 29 | +// CHECK32: call i32 @llvm.spv.num.workgroups.i32(i32 0) |
| 30 | +// CHECK32: call i32 @llvm.spv.num.workgroups.i32(i32 1) |
| 31 | +// CHECK32: call i32 @llvm.spv.num.workgroups.i32(i32 2) |
| 32 | +// CHECK32: call i32 @llvm.spv.workgroup.size.i32(i32 0) |
| 33 | +// CHECK32: call i32 @llvm.spv.workgroup.size.i32(i32 1) |
| 34 | +// CHECK32: call i32 @llvm.spv.workgroup.size.i32(i32 2) |
| 35 | +// CHECK32: call i32 @llvm.spv.group.id.i32(i32 0) |
| 36 | +// CHECK32: call i32 @llvm.spv.group.id.i32(i32 1) |
| 37 | +// CHECK32: call i32 @llvm.spv.group.id.i32(i32 2) |
| 38 | +// CHECK32: call i32 @llvm.spv.thread.id.in.group.i32(i32 0) |
| 39 | +// CHECK32: call i32 @llvm.spv.thread.id.in.group.i32(i32 1) |
| 40 | +// CHECK32: call i32 @llvm.spv.thread.id.in.group.i32(i32 2) |
| 41 | +// CHECK32: call i32 @llvm.spv.thread.id.i32(i32 0) |
| 42 | +// CHECK32: call i32 @llvm.spv.thread.id.i32(i32 1) |
| 43 | +// CHECK32: call i32 @llvm.spv.thread.id.i32(i32 2) |
| 44 | +// CHECK32: call i32 @llvm.spv.global.size.i32(i32 0) |
| 45 | +// CHECK32: call i32 @llvm.spv.global.size.i32(i32 1) |
| 46 | +// CHECK32: call i32 @llvm.spv.global.size.i32(i32 2) |
| 47 | +// CHECK32: call i32 @llvm.spv.global.offset.i32(i32 0) |
| 48 | +// CHECK32: call i32 @llvm.spv.global.offset.i32(i32 1) |
| 49 | +// CHECK32: call i32 @llvm.spv.global.offset.i32(i32 2) |
| 50 | +// CHECK: call i32 @llvm.spv.subgroup.size() |
| 51 | +// CHECK: call i32 @llvm.spv.subgroup.max.size() |
| 52 | +// CHECK: call i32 @llvm.spv.num.subgroups() |
| 53 | +// CHECK: call i32 @llvm.spv.subgroup.id() |
| 54 | +// CHECK: call i32 @llvm.spv.subgroup.local.invocation.id() |
| 55 | + |
| 56 | +// NV: call noundef i64 @_Z21__spirv_NumWorkgroupsi(i32 noundef 0) #2 |
| 57 | +// NV: call noundef i64 @_Z21__spirv_NumWorkgroupsi(i32 noundef 1) #2 |
| 58 | +// NV: call noundef i64 @_Z21__spirv_NumWorkgroupsi(i32 noundef 2) #2 |
| 59 | +// NV: call noundef i64 @_Z21__spirv_WorkgroupSizei(i32 noundef 0) #2 |
| 60 | +// NV: call noundef i64 @_Z21__spirv_WorkgroupSizei(i32 noundef 1) #2 |
| 61 | +// NV: call noundef i64 @_Z21__spirv_WorkgroupSizei(i32 noundef 2) #2 |
| 62 | +// NV: call noundef i64 @_Z19__spirv_WorkgroupIdi(i32 noundef 0) #2 |
| 63 | +// NV: call noundef i64 @_Z19__spirv_WorkgroupIdi(i32 noundef 1) #2 |
| 64 | +// NV: call noundef i64 @_Z19__spirv_WorkgroupIdi(i32 noundef 2) #2 |
| 65 | +// NV: call noundef i64 @_Z25__spirv_LocalInvocationIdi(i32 noundef 0) #2 |
| 66 | +// NV: call noundef i64 @_Z25__spirv_LocalInvocationIdi(i32 noundef 1) #2 |
| 67 | +// NV: call noundef i64 @_Z25__spirv_LocalInvocationIdi(i32 noundef 2) #2 |
| 68 | +// NV: call noundef i64 @_Z26__spirv_GlobalInvocationIdi(i32 noundef 0) #2 |
| 69 | +// NV: call noundef i64 @_Z26__spirv_GlobalInvocationIdi(i32 noundef 1) #2 |
| 70 | +// NV: call noundef i64 @_Z26__spirv_GlobalInvocationIdi(i32 noundef 2) #2 |
| 71 | +// NV: call noundef i64 @_Z18__spirv_GlobalSizei(i32 noundef 0) #2 |
| 72 | +// NV: call noundef i64 @_Z18__spirv_GlobalSizei(i32 noundef 1) #2 |
| 73 | +// NV: call noundef i64 @_Z18__spirv_GlobalSizei(i32 noundef 2) #2 |
| 74 | +// NV: call noundef i64 @_Z20__spirv_GlobalOffseti(i32 noundef 0) #2 |
| 75 | +// NV: call noundef i64 @_Z20__spirv_GlobalOffseti(i32 noundef 1) #2 |
| 76 | +// NV: call noundef i64 @_Z20__spirv_GlobalOffseti(i32 noundef 2) #2 |
| 77 | +// NV: call noundef i32 @_Z20__spirv_SubgroupSizev() #2 |
| 78 | +// NV: call noundef i32 @_Z23__spirv_SubgroupMaxSizev() #2 |
| 79 | +// NV: call noundef i32 @_Z20__spirv_NumSubgroupsv() #2 |
| 80 | +// NV: call noundef i32 @_Z18__spirv_SubgroupIdv() #2 |
| 81 | +// NV: call noundef i32 @_Z33__spirv_SubgroupLocalInvocationIdv() #2 |
| 82 | + |
| 83 | +void test_id_and_range() { |
| 84 | + __spirv_NumWorkgroups(0); |
| 85 | + __spirv_NumWorkgroups(1); |
| 86 | + __spirv_NumWorkgroups(2); |
| 87 | + __spirv_WorkgroupSize(0); |
| 88 | + __spirv_WorkgroupSize(1); |
| 89 | + __spirv_WorkgroupSize(2); |
| 90 | + __spirv_WorkgroupId(0); |
| 91 | + __spirv_WorkgroupId(1); |
| 92 | + __spirv_WorkgroupId(2); |
| 93 | + __spirv_LocalInvocationId(0); |
| 94 | + __spirv_LocalInvocationId(1); |
| 95 | + __spirv_LocalInvocationId(2); |
| 96 | + __spirv_GlobalInvocationId(0); |
| 97 | + __spirv_GlobalInvocationId(1); |
| 98 | + __spirv_GlobalInvocationId(2); |
| 99 | + __spirv_GlobalSize(0); |
| 100 | + __spirv_GlobalSize(1); |
| 101 | + __spirv_GlobalSize(2); |
| 102 | + __spirv_GlobalOffset(0); |
| 103 | + __spirv_GlobalOffset(1); |
| 104 | + __spirv_GlobalOffset(2); |
| 105 | + unsigned int ssize = __spirv_SubgroupSize(); |
| 106 | + unsigned int smax = __spirv_SubgroupMaxSize(); |
| 107 | + unsigned int snum = __spirv_NumSubgroups(); |
| 108 | + unsigned int sid = __spirv_SubgroupId(); |
| 109 | + unsigned int sinvocid = __spirv_SubgroupLocalInvocationId(); |
| 110 | +} |
0 commit comments