blob: 2d445d1f14dd68789b3569cd6bd498dbd0926488 [file] [log] [blame] [edit]
// RUN: clspv %s -o %t.spv -int8 -no-inline-single
// RUN: spirv-dis -o %t.spvasm %t.spv
// RUN: FileCheck %s < %t.spvasm
// RUN: spirv-val --target-env vulkan1.0 %t.spv
char bar(char a, char b) { return a + b; }
kernel void foo(global char* in, global char* out, int idx) {
char x = in[idx];
char y = in[idx + 1];
out[idx] = bar(x, y);
}
// CHECK-DAG: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0
// CHECK-DAG: [[int:%[a-zA-Z0-9_]+]] = OpTypeInt 32 0
// CHECK-DAG: [[ptr:%[a-zA-Z0-9_]+]] = OpTypePointer StorageBuffer [[char]]
// CHECK-DAG: [[zero:%[a-zA-Z0-9_]+]] = OpConstant [[int]] 0
// CHECK-DAG: [[one:%[a-zA-Z0-9_]+]] = OpConstant [[int]] 1
// CHECK: [[bar:%[a-zA-Z0-9_]+]] = OpFunction [[char]]
// CHECK: [[a:%[a-zA-Z0-9_]+]] = OpFunctionParameter [[char]]
// CHECK: [[b:%[a-zA-Z0-9_]+]] = OpFunctionParameter [[char]]
// CHECK: [[add:%[a-zA-Z0-9_]+]] = OpIAdd [[char]] [[b]] [[a]]
// CHECK: OpReturnValue [[add]]
// CHECK: OpFunction
// CHECK: [[idx:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[int]]
// CHECK-DAG: [[idx1:%[a-zA-Z0-9_]+]] = OpIAdd [[int]] [[idx]] [[one]]
// CHECK-DAG: [[gepx:%[a-zA-Z0-9_]+]] = OpAccessChain [[ptr]] {{.*}} [[zero]] [[idx]]
// CHECK-DAG: [[gepy:%[a-zA-Z0-9_]+]] = OpAccessChain [[ptr]] {{.*}} [[zero]] [[idx1]]
// CHECK-DAG: [[ldx:%[a-zA-Z0-9_]+]] = OpLoad [[char]] [[gepx]]
// CHECK-DAG: [[ldy:%[a-zA-Z0-9_]+]] = OpLoad [[char]] [[gepy]]
// CHECK: [[call:%[a-zA-Z0-9_]+]] = OpFunctionCall [[char]] [[bar]] [[ldx]] [[ldy]]
// CHECK: [[out_gep:%[a-zA-Z0-9_]+]] = OpAccessChain [[ptr]] {{.*}} [[zero]] [[idx]]
// CHECK: OpStore [[out_gep]] [[call]]