Skip to content

Commit 4a88caa

Browse files
Built-in Variables: mapping from an OpenCL C built-in function to the SPIR-V BuiltIn
1 parent 4e49103 commit 4a88caa

File tree

3 files changed

+69
-21
lines changed

3 files changed

+69
-21
lines changed

llvm/lib/Target/SPIRV/SPIRVBuiltins.td

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,6 +1325,15 @@ multiclass DemangledGetBuiltin<string name, InstructionSet set, BuiltinGroup gro
13251325
}
13261326

13271327
// Builtin variable records:
1328+
defm : DemangledGetBuiltin<"get_global_linear_id", OpenCL_std, Variable, GlobalLinearId>;
1329+
defm : DemangledGetBuiltin<"get_local_linear_id", OpenCL_std, Variable, LocalInvocationIndex>;
1330+
defm : DemangledGetBuiltin<"get_work_dim", OpenCL_std, Variable, WorkDim>;
1331+
defm : DemangledGetBuiltin<"get_sub_group_size", OpenCL_std, Variable, SubgroupSize>;
1332+
defm : DemangledGetBuiltin<"get_max_sub_group_size", OpenCL_std, Variable, SubgroupMaxSize>;
1333+
defm : DemangledGetBuiltin<"get_num_sub_groups", OpenCL_std, Variable, NumSubgroups>;
1334+
defm : DemangledGetBuiltin<"get_enqueued_num_sub_groups", OpenCL_std, Variable, NumEnqueuedSubgroups>;
1335+
defm : DemangledGetBuiltin<"get_sub_group_id", OpenCL_std, Variable, SubgroupId>;
1336+
defm : DemangledGetBuiltin<"get_sub_group_local_id", OpenCL_std, Variable, SubgroupLocalInvocationId>;
13281337
defm : DemangledGetBuiltin<"get_sub_group_eq_mask", OpenCL_std, Variable, SubgroupEqMask>;
13291338
defm : DemangledGetBuiltin<"get_sub_group_ge_mask", OpenCL_std, Variable, SubgroupGeMask>;
13301339
defm : DemangledGetBuiltin<"get_sub_group_gt_mask", OpenCL_std, Variable, SubgroupGtMask>;
@@ -1341,6 +1350,7 @@ defm : DemangledGetBuiltin<"get_global_size", OpenCL_std, GetQuery, GlobalSize>;
13411350
defm : DemangledGetBuiltin<"get_group_id", OpenCL_std, GetQuery, WorkgroupId>;
13421351
defm : DemangledGetBuiltin<"get_enqueued_local_size", OpenCL_std, GetQuery, EnqueuedWorkgroupSize>;
13431352
defm : DemangledGetBuiltin<"get_num_groups", OpenCL_std, GetQuery, NumWorkgroups>;
1353+
defm : DemangledGetBuiltin<"get_global_offset", OpenCL_std, GetQuery, GlobalOffset>;
13441354
defm : DemangledGetBuiltin<"__hlsl_wave_get_lane_index", GLSL_std_450, Wave, SubgroupLocalInvocationId>;
13451355

13461356
//===----------------------------------------------------------------------===//

llvm/test/CodeGen/SPIRV/builtin_vars-decorate.ll

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
2+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
23

3-
; CHECK: OpName %[[#WD:]] "__spirv_BuiltInWorkDim"
4-
; CHECK: OpName %[[#GS:]] "__spirv_BuiltInGlobalSize"
5-
; CHECK: OpName %[[#GII:]] "__spirv_BuiltInGlobalInvocationId"
6-
; CHECK: OpName %[[#WS:]] "__spirv_BuiltInWorkgroupSize"
7-
; CHECK: OpName %[[#EWS:]] "__spirv_BuiltInEnqueuedWorkgroupSize"
8-
; CHECK: OpName %[[#LLI:]] "__spirv_BuiltInLocalInvocationId"
9-
; CHECK: OpName %[[#NW:]] "__spirv_BuiltInNumWorkgroups"
10-
; CHECK: OpName %[[#WI:]] "__spirv_BuiltInWorkgroupId"
11-
; CHECK: OpName %[[#GO:]] "__spirv_BuiltInGlobalOffset"
12-
; CHECK: OpName %[[#GLI:]] "__spirv_BuiltInGlobalLinearId"
13-
; CHECK: OpName %[[#LLII:]] "__spirv_BuiltInLocalInvocationIndex"
14-
; CHECK: OpName %[[#SS:]] "__spirv_BuiltInSubgroupSize"
15-
; CHECK: OpName %[[#SMS:]] "__spirv_BuiltInSubgroupMaxSize"
16-
; CHECK: OpName %[[#NS:]] "__spirv_BuiltInNumSubgroups"
17-
; CHECK: OpName %[[#NES:]] "__spirv_BuiltInNumEnqueuedSubgroups"
18-
; CHECK: OpName %[[#SI:]] "__spirv_BuiltInSubgroupId"
19-
; CHECK: OpName %[[#SLII:]] "__spirv_BuiltInSubgroupLocalInvocationId"
4+
; CHECK-DAG: OpName %[[#WD:]] "__spirv_BuiltInWorkDim"
5+
; CHECK-DAG: OpName %[[#GS:]] "__spirv_BuiltInGlobalSize"
6+
; CHECK-DAG: OpName %[[#GII:]] "__spirv_BuiltInGlobalInvocationId"
7+
; CHECK-DAG: OpName %[[#WS:]] "__spirv_BuiltInWorkgroupSize"
8+
; CHECK-DAG: OpName %[[#EWS:]] "__spirv_BuiltInEnqueuedWorkgroupSize"
9+
; CHECK-DAG: OpName %[[#LLI:]] "__spirv_BuiltInLocalInvocationId"
10+
; CHECK-DAG: OpName %[[#NW:]] "__spirv_BuiltInNumWorkgroups"
11+
; CHECK-DAG: OpName %[[#WI:]] "__spirv_BuiltInWorkgroupId"
12+
; CHECK-DAG: OpName %[[#GO:]] "__spirv_BuiltInGlobalOffset"
13+
; CHECK-DAG: OpName %[[#GLI:]] "__spirv_BuiltInGlobalLinearId"
14+
; CHECK-DAG: OpName %[[#LLII:]] "__spirv_BuiltInLocalInvocationIndex"
15+
; CHECK-DAG: OpName %[[#SS:]] "__spirv_BuiltInSubgroupSize"
16+
; CHECK-DAG: OpName %[[#SMS:]] "__spirv_BuiltInSubgroupMaxSize"
17+
; CHECK-DAG: OpName %[[#NS:]] "__spirv_BuiltInNumSubgroups"
18+
; CHECK-DAG: OpName %[[#NES:]] "__spirv_BuiltInNumEnqueuedSubgroups"
19+
; CHECK-DAG: OpName %[[#SI:]] "__spirv_BuiltInSubgroupId"
20+
; CHECK-DAG: OpName %[[#SLII:]] "__spirv_BuiltInSubgroupLocalInvocationId"
2021

2122
; CHECK-DAG: OpDecorate %[[#NW]] BuiltIn NumWorkgroups
2223
; CHECK-DAG: OpDecorate %[[#WS]] BuiltIn WorkgroupSize
@@ -35,6 +36,21 @@
3536
; CHECK-DAG: OpDecorate %[[#NES]] BuiltIn NumEnqueuedSubgroups
3637
; CHECK-DAG: OpDecorate %[[#SI]] BuiltIn SubgroupId
3738
; CHECK-DAG: OpDecorate %[[#SLII]] BuiltIn SubgroupLocalInvocationId
39+
40+
; CHECK-DAG: %[[#SizeT:]] = OpTypeInt 64 0
41+
; CHECK-DAG: %[[#Int32:]] = OpTypeInt 32 0
42+
43+
; CHECK: OpFunction
44+
; CHECK: %[[#]] = OpLoad %[[#SizeT]] %[[#GLI]]
45+
; CHECK: %[[#]] = OpLoad %[[#SizeT]] %[[#LLII]]
46+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#WD]]
47+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SS]]
48+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SMS]]
49+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#NS]]
50+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#NES]]
51+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SI]]
52+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SLII]]
53+
3854
@__spirv_BuiltInWorkDim = external addrspace(1) global i32
3955
@__spirv_BuiltInGlobalSize = external addrspace(1) global <3 x i32>
4056
@__spirv_BuiltInGlobalInvocationId = external addrspace(1) global <3 x i32>
@@ -55,5 +71,24 @@
5571

5672
define spir_kernel void @_Z1wv() {
5773
entry:
74+
%r1 = tail call spir_func i64 @get_global_linear_id()
75+
%r2 = tail call spir_func i64 @get_local_linear_id()
76+
%r3 = tail call spir_func i32 @get_work_dim()
77+
%r4 = tail call spir_func i32 @get_sub_group_size()
78+
%r5 = tail call spir_func i32 @get_max_sub_group_size()
79+
%r6 = tail call spir_func i32 @get_num_sub_groups()
80+
%r7 = tail call spir_func i32 @get_enqueued_num_sub_groups()
81+
%r8 = tail call spir_func i32 @get_sub_group_id()
82+
%r9 = tail call spir_func i32 @get_sub_group_local_id()
5883
ret void
5984
}
85+
86+
declare spir_func i64 @get_global_linear_id()
87+
declare spir_func i64 @get_local_linear_id()
88+
declare spir_func i32 @get_work_dim()
89+
declare spir_func i32 @get_sub_group_size()
90+
declare spir_func i32 @get_max_sub_group_size()
91+
declare spir_func i32 @get_num_sub_groups()
92+
declare spir_func i32 @get_enqueued_num_sub_groups()
93+
declare spir_func i32 @get_sub_group_id()
94+
declare spir_func i32 @get_sub_group_local_id()

llvm/test/CodeGen/SPIRV/transcoding/builtin_vars.ll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
22
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
33

4-
; CHECK-SPIRV: OpDecorate %[[#Id:]] BuiltIn GlobalLinearId
5-
; CHECK-SPIRV: %[[#Id:]] = OpVariable %[[#]]
4+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
5+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
6+
7+
; CHECK: OpDecorate %[[#Id:]] BuiltIn GlobalLinearId
8+
; CHECK: %[[#Id:]] = OpVariable %[[#]]
69

710
@__spirv_BuiltInGlobalLinearId = external addrspace(1) global i32
811

0 commit comments

Comments
 (0)