blob: 0c9b29de890d4f8ef0f555ae00c01145f2b9a3fd [file]
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
; CHECK-DAG: OpName %[[#WD:]] "__spirv_BuiltInWorkDim"
; CHECK-DAG: OpName %[[#GS:]] "__spirv_BuiltInGlobalSize"
; CHECK-DAG: OpName %[[#GII:]] "__spirv_BuiltInGlobalInvocationId"
; CHECK-DAG: OpName %[[#WS:]] "__spirv_BuiltInWorkgroupSize"
; CHECK-DAG: OpName %[[#EWS:]] "__spirv_BuiltInEnqueuedWorkgroupSize"
; CHECK-DAG: OpName %[[#LLI:]] "__spirv_BuiltInLocalInvocationId"
; CHECK-DAG: OpName %[[#NW:]] "__spirv_BuiltInNumWorkgroups"
; CHECK-DAG: OpName %[[#WI:]] "__spirv_BuiltInWorkgroupId"
; CHECK-DAG: OpName %[[#GO:]] "__spirv_BuiltInGlobalOffset"
; CHECK-DAG: OpName %[[#GLI:]] "__spirv_BuiltInGlobalLinearId"
; CHECK-DAG: OpName %[[#LLII:]] "__spirv_BuiltInLocalInvocationIndex"
; CHECK-DAG: OpName %[[#SS:]] "__spirv_BuiltInSubgroupSize"
; CHECK-DAG: OpName %[[#SMS:]] "__spirv_BuiltInSubgroupMaxSize"
; CHECK-DAG: OpName %[[#NS:]] "__spirv_BuiltInNumSubgroups"
; CHECK-DAG: OpName %[[#NES:]] "__spirv_BuiltInNumEnqueuedSubgroups"
; CHECK-DAG: OpName %[[#SI:]] "__spirv_BuiltInSubgroupId"
; CHECK-DAG: OpName %[[#SLII:]] "__spirv_BuiltInSubgroupLocalInvocationId"
; CHECK-DAG: OpDecorate %[[#NW]] BuiltIn NumWorkgroups
; CHECK-DAG: OpDecorate %[[#WS]] BuiltIn WorkgroupSize
; CHECK-DAG: OpDecorate %[[#WI]] BuiltIn WorkgroupId
; CHECK-DAG: OpDecorate %[[#LLI]] BuiltIn LocalInvocationId
; CHECK-DAG: OpDecorate %[[#GII]] BuiltIn GlobalInvocationId
; CHECK-DAG: OpDecorate %[[#LLII]] BuiltIn LocalInvocationIndex
; CHECK-DAG: OpDecorate %[[#WD]] BuiltIn WorkDim
; CHECK-DAG: OpDecorate %[[#GS]] BuiltIn GlobalSize
; CHECK-DAG: OpDecorate %[[#EWS]] BuiltIn EnqueuedWorkgroupSize
; CHECK-DAG: OpDecorate %[[#GO]] BuiltIn GlobalOffset
; CHECK-DAG: OpDecorate %[[#GLI]] BuiltIn GlobalLinearId
; CHECK-DAG: OpDecorate %[[#SS]] BuiltIn SubgroupSize
; CHECK-DAG: OpDecorate %[[#SMS]] BuiltIn SubgroupMaxSize
; CHECK-DAG: OpDecorate %[[#NS]] BuiltIn NumSubgroups
; CHECK-DAG: OpDecorate %[[#NES]] BuiltIn NumEnqueuedSubgroups
; CHECK-DAG: OpDecorate %[[#SI]] BuiltIn SubgroupId
; CHECK-DAG: OpDecorate %[[#SLII]] BuiltIn SubgroupLocalInvocationId
; CHECK-DAG: %[[#SizeT:]] = OpTypeInt 64 0
; CHECK-DAG: %[[#Int32:]] = OpTypeInt 32 0
; CHECK-DAG: %[[#SizeTPtr:]] = OpTypePointer Input %[[#SizeT]]
; CHECK-DAG: %[[#Int32Ptr:]] = OpTypePointer Input %[[#Int32]]
; CHECK-DAG: %[[#GLI]] = OpVariable %[[#SizeTPtr]] Input
; CHECK-DAG: %[[#LLII]] = OpVariable %[[#SizeTPtr]] Input
; CHECK-DAG: %[[#WD]] = OpVariable %[[#Int32Ptr]] Input
; CHECK-DAG: %[[#SS]] = OpVariable %[[#Int32Ptr]] Input
; CHECK-DAG: %[[#SMS]] = OpVariable %[[#Int32Ptr]] Input
; CHECK-DAG: %[[#NS]] = OpVariable %[[#Int32Ptr]] Input
; CHECK-DAG: %[[#NES]] = OpVariable %[[#Int32Ptr]] Input
; CHECK-DAG: %[[#SI]] = OpVariable %[[#Int32Ptr]] Input
; CHECK-DAG: %[[#SLII]] = OpVariable %[[#Int32Ptr]] Input
; CHECK: OpFunction
; CHECK: %[[#]] = OpLoad %[[#SizeT]] %[[#GLI]]
; CHECK: %[[#]] = OpLoad %[[#SizeT]] %[[#LLII]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#WD]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SS]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SMS]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#NS]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#NES]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SI]]
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SLII]]
@__spirv_BuiltInWorkDim = external addrspace(1) global i32
@__spirv_BuiltInGlobalSize = external addrspace(1) global <3 x i32>
@__spirv_BuiltInGlobalInvocationId = external addrspace(1) global <3 x i32>
@__spirv_BuiltInWorkgroupSize = external addrspace(1) global <3 x i32>
@__spirv_BuiltInEnqueuedWorkgroupSize = external addrspace(1) global <3 x i32>
@__spirv_BuiltInLocalInvocationId = external addrspace(1) global <3 x i32>
@__spirv_BuiltInNumWorkgroups = external addrspace(1) global <3 x i32>
@__spirv_BuiltInWorkgroupId = external addrspace(1) global <3 x i32>
@__spirv_BuiltInGlobalOffset = external addrspace(1) global <3 x i32>
@__spirv_BuiltInGlobalLinearId = external addrspace(1) global i32
@__spirv_BuiltInLocalInvocationIndex = external addrspace(1) global i32
@__spirv_BuiltInSubgroupSize = external addrspace(1) global i32
@__spirv_BuiltInSubgroupMaxSize = external addrspace(1) global i32
@__spirv_BuiltInNumSubgroups = external addrspace(1) global i32
@__spirv_BuiltInNumEnqueuedSubgroups = external addrspace(1) global i32
@__spirv_BuiltInSubgroupId = external addrspace(1) global i32
@__spirv_BuiltInSubgroupLocalInvocationId = external addrspace(1) global i32
define spir_kernel void @_Z1wv() {
entry:
%r1 = tail call spir_func i64 @get_global_linear_id()
%r2 = tail call spir_func i64 @get_local_linear_id()
%r3 = tail call spir_func i32 @get_work_dim()
%r4 = tail call spir_func i32 @get_sub_group_size()
%r5 = tail call spir_func i32 @get_max_sub_group_size()
%r6 = tail call spir_func i32 @get_num_sub_groups()
%r7 = tail call spir_func i32 @get_enqueued_num_sub_groups()
%r8 = tail call spir_func i32 @get_sub_group_id()
%r9 = tail call spir_func i32 @get_sub_group_local_id()
ret void
}
declare spir_func i64 @get_global_linear_id()
declare spir_func i64 @get_local_linear_id()
declare spir_func i32 @get_work_dim()
declare spir_func i32 @get_sub_group_size()
declare spir_func i32 @get_max_sub_group_size()
declare spir_func i32 @get_num_sub_groups()
declare spir_func i32 @get_enqueued_num_sub_groups()
declare spir_func i32 @get_sub_group_id()
declare spir_func i32 @get_sub_group_local_id()