| ; 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 |