blob: 7479d6a5ab74944fd84940ba0eb996844e75a46c [file] [edit]
; RUN: clspv-opt -ReplaceOpenCLBuiltin %s -o %t.ll
; RUN: FileCheck %s < %t.ll
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
define void @global(i32 addrspace(1)* %atomic) {
entry:
%cast = addrspacecast i32 addrspace(1)* %atomic to i32 addrspace(4)*
%add0 = call spir_func i32 @_Z16atomic_fetch_addPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%add1 = call spir_func i32 @_Z25atomic_fetch_add_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%add2 = call spir_func i32 @_Z25atomic_fetch_add_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%sub0 = call spir_func i32 @_Z16atomic_fetch_subPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%sub1 = call spir_func i32 @_Z25atomic_fetch_sub_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%sub2 = call spir_func i32 @_Z25atomic_fetch_sub_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%or0 = call spir_func i32 @_Z15atomic_fetch_orPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%or1 = call spir_func i32 @_Z24atomic_fetch_or_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%or2 = call spir_func i32 @_Z24atomic_fetch_or_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%xor0 = call spir_func i32 @_Z16atomic_fetch_xorPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%xor1 = call spir_func i32 @_Z25atomic_fetch_xor_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%xor2 = call spir_func i32 @_Z25atomic_fetch_xor_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%and0 = call spir_func i32 @_Z16atomic_fetch_andPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%and1 = call spir_func i32 @_Z25atomic_fetch_and_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%and2 = call spir_func i32 @_Z25atomic_fetch_and_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%smin0 = call spir_func i32 @_Z16atomic_fetch_minPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%smin1 = call spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%smin2 = call spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%umin0 = call spir_func i32 @_Z16atomic_fetch_minPU3AS4VU7_Atomicjj(i32 addrspace(4)* %cast, i32 100)
%umin1 = call spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicjj12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%umin2 = call spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicjj12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%smax0 = call spir_func i32 @_Z16atomic_fetch_maxPU3AS4VU7_Atomicii(i32 addrspace(4)* %cast, i32 100)
%smax1 = call spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%smax2 = call spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
%umax0 = call spir_func i32 @_Z16atomic_fetch_maxPU3AS4VU7_Atomicjj(i32 addrspace(4)* %cast, i32 100)
%umax1 = call spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicjj12memory_order(i32 addrspace(4)* %cast, i32 101, i32 0)
%umax2 = call spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicjj12memory_order12memory_scope(i32 addrspace(4)* %cast, i32 102, i32 0, i32 4)
ret void
}
declare spir_func i32 @_Z16atomic_fetch_addPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_add_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_add_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_subPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_sub_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_sub_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)* %cast, i32, i32, i32)
declare spir_func i32 @_Z15atomic_fetch_orPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z24atomic_fetch_or_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z24atomic_fetch_or_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_xorPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_xor_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_xor_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_andPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_and_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_and_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_minPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_minPU3AS4VU7_Atomicjj(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicjj12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_min_explicitPU3AS4VU7_Atomicjj12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_maxPU3AS4VU7_Atomicii(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicii12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicii12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
declare spir_func i32 @_Z16atomic_fetch_maxPU3AS4VU7_Atomicjj(i32 addrspace(4)*, i32)
declare spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicjj12memory_order(i32 addrspace(4)*, i32, i32)
declare spir_func i32 @_Z25atomic_fetch_max_explicitPU3AS4VU7_Atomicjj12memory_order12memory_scope(i32 addrspace(4)*, i32, i32, i32)
; CHECK-LABEL: global
; CHECK: call i32 @_Z8spirv.op.234.{{.*}}(i32 234, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.234.{{.*}}(i32 234, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.234.{{.*}}(i32 234, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.235.{{.*}}(i32 235, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.235.{{.*}}(i32 235, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.235.{{.*}}(i32 235, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.241.{{.*}}(i32 241, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.241.{{.*}}(i32 241, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.241.{{.*}}(i32 241, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.242.{{.*}}(i32 242, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.242.{{.*}}(i32 242, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.242.{{.*}}(i32 242, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.240.{{.*}}(i32 240, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.240.{{.*}}(i32 240, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.240.{{.*}}(i32 240, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.236.{{.*}}(i32 236, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.236.{{.*}}(i32 236, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.236.{{.*}}(i32 236, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.237.{{.*}}(i32 237, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.237.{{.*}}(i32 237, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.237.{{.*}}(i32 237, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.238.{{.*}}(i32 238, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.238.{{.*}}(i32 238, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.238.{{.*}}(i32 238, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)
; CHECK: call i32 @_Z8spirv.op.239.{{.*}}(i32 239, i32 addrspace(1)* %atomic, i32 1, i32 72, i32 100)
; CHECK: call i32 @_Z8spirv.op.239.{{.*}}(i32 239, i32 addrspace(1)* %atomic, i32 1, i32 64, i32 101)
; CHECK: call i32 @_Z8spirv.op.239.{{.*}}(i32 239, i32 addrspace(1)* %atomic, i32 3, i32 64, i32 102)