blob: ce3c0e4d2f0ce3ae40b9c9a7b62065ffb0557b71 [file] [log] [blame]
// RUN: clspv %s -o %t.spv -no-inline-single -keep-unused-arguments
// RUN: spirv-dis -o %t2.spvasm %t.spv
// RUN: FileCheck %s < %t2.spvasm
// RUN: spirv-val --target-env vulkan1.0 %t.spv
void write_local(__global int* in, __local int* tmp, unsigned int id) {
tmp[id] = in[id];
}
void read_local(__global int* out, __local int* tmp, unsigned int id) {
out[id] = tmp[id];
}
__kernel void local_memory(__global int* in, __global int* out, __local int* temp) {
unsigned int gid = get_global_id(0);
write_local(in, temp, gid);
barrier(CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE);
read_local(out, temp, gid);
}
// CHECK: OpEntryPoint GLCompute [[_46:%[0-9a-zA-Z_]+]] "local_memory" [[_gl_GlobalInvocationID:%[0-9a-zA-Z_]+]]
// CHECK: OpDecorate [[_28:%[0-9a-zA-Z_]+]] Binding 0
// CHECK: OpDecorate [[_29:%[0-9a-zA-Z_]+]] Binding 1
// CHECK-DAG: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0
// CHECK-DAG: [[_void:%[0-9a-zA-Z_]+]] = OpTypeVoid
// CHECK-DAG: [[_28]] = OpVariable {{.*}} StorageBuffer
// CHECK-DAG: [[_29]] = OpVariable {{.*}} StorageBuffer
// CHECK-DAG: [[_1:%[0-9a-zA-Z_]+]] = OpVariable {{.*}} Workgroup
// CHECK: [[_30:%[0-9a-zA-Z_]+]] = OpFunction [[_void]]
// CHECK: [[_35:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_28]]
// CHECK: [[_37:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_1]]
// CHECK: [[_38:%[0-9a-zA-Z_]+]] = OpFunction [[_void]] None
// CHECK: [[_43:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_1]]
// CHECK: [[_45:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_29]]
// CHECK: [[_46:%[0-9a-zA-Z_]+]] = OpFunction [[_void]] None
// CHECK: [[_48:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_1]]
// CHECK: [[_49:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_28]]
// CHECK: [[_50:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_29]]
// CHECK: [[_53:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_void]] [[_30]] [[_49]] [[_48]]
// CHECK: [[_54:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_void]] [[_38]] [[_50]] [[_48]]