119734787 65536 393230 15 0
2 Capability Addresses
2 Capability Kernel
3 MemoryModel 1 2
5 EntryPoint 6 4 "test"
8 String 14 "kernel_arg_type.test."
3 Source 3 102000
4 Name 5 "entry"
4 TypeInt 6 32 0
4 Constant 6 7 2
4 Constant 6 8 528
4 Constant 6 9 272
4 Constant 6 10 2064
4 Constant 6 11 784
4 Constant 6 12 2320
4 Constant 6 13 2832
2 TypeVoid 2
3 TypeFunction 3 2

5 Function 2 4 0 3

2 Label 5
4 ControlBarrier 7 7 8
4 ControlBarrier 7 7 9
4 ControlBarrier 7 7 10
4 ControlBarrier 7 7 11
4 ControlBarrier 7 7 12
4 ControlBarrier 7 7 13
1 Return

1 FunctionEnd

; RUN: llvm-spirv %s -to-binary -o %t.spv
; RUN: spirv-val %t.spv

; RUN: llvm-spirv -r -emit-opaque-pointers %t.spv -o %t1.bc --spirv-target-env="CL1.2"
; RUN: llvm-dis < %t1.bc | FileCheck %s --check-prefix=CHECK-LLVM-12

; CHECK-LLVM-12: call spir_func void @_Z7barrierj(i32 2) [[attr:#[0-9]+]]
; CHECK-LLVM-12: call spir_func void @_Z7barrierj(i32 1) [[attr]]
; CHECK-LLVM-12: call spir_func void @_Z7barrierj(i32 4) [[attr]]
; CHECK-LLVM-12: call spir_func void @_Z7barrierj(i32 3) [[attr]]
; CHECK-LLVM-12: call spir_func void @_Z7barrierj(i32 5) [[attr]]
; CHECK-LLVM-12: call spir_func void @_Z7barrierj(i32 7) [[attr]]
; CHECK-LLVM-12: attributes [[attr]] = { convergent nounwind }

; RUN: llvm-spirv -r -emit-opaque-pointers %t.spv -o %t2.bc --spirv-target-env="CL2.0"
; RUN: llvm-dis < %t2.bc | FileCheck %s --check-prefix=CHECK-LLVM-20

; CHECK-LLVM-20: call spir_func void @_Z18work_group_barrierj12memory_scope(i32 2, i32 1) [[attr:#[0-9]+]]
; CHECK-LLVM-20: call spir_func void @_Z18work_group_barrierj12memory_scope(i32 1, i32 1) [[attr]]
; CHECK-LLVM-20: call spir_func void @_Z18work_group_barrierj12memory_scope(i32 4, i32 1) [[attr]]
; CHECK-LLVM-20: call spir_func void @_Z18work_group_barrierj12memory_scope(i32 3, i32 1) [[attr]]
; CHECK-LLVM-20: call spir_func void @_Z18work_group_barrierj12memory_scope(i32 5, i32 1) [[attr]]
; CHECK-LLVM-20: call spir_func void @_Z18work_group_barrierj12memory_scope(i32 7, i32 1) [[attr]]
; CHECK-LLVM-20: attributes [[attr]] = { convergent nounwind }

; RUN: llvm-spirv -r -emit-opaque-pointers %t.spv -o %t3.bc --spirv-target-env="SPV-IR"
; RUN: llvm-dis < %t3.bc | FileCheck %s --check-prefix=CHECK-LLVM-SPV-IR

; CHECK-LLVM-SPV-IR: call spir_func void @_Z22__spirv_ControlBarrieriii(i32 2, i32 2, i32 528) [[attr:#[0-9]+]]
; CHECK-LLVM-SPV-IR: call spir_func void @_Z22__spirv_ControlBarrieriii(i32 2, i32 2, i32 272) [[attr]]
; CHECK-LLVM-SPV-IR: call spir_func void @_Z22__spirv_ControlBarrieriii(i32 2, i32 2, i32 2064) [[attr]]
; CHECK-LLVM-SPV-IR: call spir_func void @_Z22__spirv_ControlBarrieriii(i32 2, i32 2, i32 784) [[attr]]
; CHECK-LLVM-SPV-IR: call spir_func void @_Z22__spirv_ControlBarrieriii(i32 2, i32 2, i32 2320) [[attr]]
; CHECK-LLVM-SPV-IR: call spir_func void @_Z22__spirv_ControlBarrieriii(i32 2, i32 2, i32 2832) [[attr]]
; CHECK-LLVM-SPV-IR: attributes [[attr]] = { convergent nounwind }
