blob: 9c5300fdb080efc6d1ffca3e86139be6b4bf1850 [file] [edit]
; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv-vulkan-unknown %s -o - | FileCheck %s
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-vulkan-unknown %s -o - -filetype=obj | spirv-val %}
; CHECK-DAG: OpDecorate %[[#WorkgroupId:]] BuiltIn WorkgroupId
; CHECK-DAG: OpDecorateId %[[#UniformVar:]] UniformId %[[#Scope:]]
; CHECK-DAG: %[[#uint:]] = OpTypeInt 32 0
; CHECK-DAG: %[[#uint_0:]] = OpConstant %[[#uint]] 0
; CHECK-DAG: %[[#v3uint:]] = OpTypeVector %[[#uint]] 3
; CHECK-DAG: %[[#ptr_Input_uint:]] = OpTypePointer Input %[[#uint]]
; CHECK-DAG: %[[#ptr_Input_v3uint:]] = OpTypePointer Input %[[#v3uint]]
; CHECK-DAG: %[[#WorkgroupId:]] = OpVariable %[[#ptr_Input_v3uint]] Input
; CHECK-DAG: %[[#Scope]] = OpConstant %[[#uint]] 2
@var = external local_unnamed_addr addrspace(7) externally_initialized constant <3 x i32>, align 16, !spirv.Decorations !0
@uvar = external local_unnamed_addr addrspace(7) externally_initialized constant i32, !spirv.Decorations !2
define i32 @foo() {
entry:
; CHECK: %[[#ptr:]] = OpAccessChain %[[#ptr_Input_uint]] %[[#WorkgroupId]] %[[#uint_0]]
; CHECK: %[[#res:]] = OpLoad %[[#uint]] %[[#ptr]]
; CHECK: OpReturnValue %[[#res]]
%0 = load i32, ptr addrspace(7) @var, align 16
ret i32 %0
}
define i32 @bar() {
entry:
%0 = load i32, ptr addrspace(7) @uvar
ret i32 %0
}
!0 = !{!1}
!1 = !{i32 11, i32 26}
!2 = !{!3}
!3 = !{i32 27, i32 2} ; 27 is UniformId decoration, 2 is Workgroup scope