diff --git a/lib/SPIRV/SPIRVInternal.h b/lib/SPIRV/SPIRVInternal.h index d5ab665958..17ea07dd0b 100644 --- a/lib/SPIRV/SPIRVInternal.h +++ b/lib/SPIRV/SPIRVInternal.h @@ -319,6 +319,7 @@ const static char ConstantPipeStorage[] = "ConstantPipeStorage"; const static char VmeImageINTEL[] = "VmeImageINTEL"; const static char JointMatrixINTEL[] = "JointMatrixINTEL"; const static char CooperativeMatrixKHR[] = "CooperativeMatrixKHR"; +const static char BufferSurfaceINTEL[] = "BufferSurfaceINTEL"; } // namespace kSPIRVTypeName namespace kSPR2TypeName { @@ -976,6 +977,7 @@ template <> inline void SPIRVMap::init() { _SPIRV_OP(AvcRefResultINTEL) _SPIRV_OP(AvcSicResultINTEL) _SPIRV_OP(VmeImageINTEL) + _SPIRV_OP(BufferSurfaceINTEL) _SPIRV_OP(CooperativeMatrixKHR) #undef _SPIRV_OP add("JointMatrixINTEL", internal::OpTypeJointMatrixINTEL); diff --git a/lib/SPIRV/SPIRVWriter.cpp b/lib/SPIRV/SPIRVWriter.cpp index f167624bd9..b8ebfdc107 100644 --- a/lib/SPIRV/SPIRVWriter.cpp +++ b/lib/SPIRV/SPIRVWriter.cpp @@ -814,8 +814,12 @@ SPIRVType *LLVMToSPIRVBase::transSPIRVOpaqueType(StringRef STName, return SaveType(BM->addQueueType()); else if (TN == kSPIRVTypeName::PipeStorage) return SaveType(BM->addPipeStorageType()); - else if (TN == kSPIRVTypeName::JointMatrixINTEL) { + else if (TN == kSPIRVTypeName::JointMatrixINTEL) return SaveType(transSPIRVJointMatrixINTELType(Postfixes)); + else if (BM->isAllowedToUseExtension(ExtensionID::SPV_INTEL_vector_compute) && + TN == kSPIRVTypeName::BufferSurfaceINTEL) { + auto Access = getAccessQualifier(STName); + return SaveType(BM->addBufferSurfaceINTELType(Access)); } else return SaveType( BM->addOpaqueGenericType(SPIRVOpaqueTypeOpCodeMap::map(TN))); diff --git a/test/transcoding/spirv-target-types-buffer.ll b/test/transcoding/spirv-target-types-buffer.ll new file mode 100644 index 0000000000..4de5ad32fb --- /dev/null +++ b/test/transcoding/spirv-target-types-buffer.ll @@ -0,0 +1,23 @@ +; Check translation of the buffer surface target extension type +; +; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv -spirv-ext=+SPV_INTEL_vector_compute %t.bc -spirv-text -o %t.spv.txt +; RUN: FileCheck < %t.spv.txt %s --check-prefix=CHECK-SPIRV +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" + +; CHECK-SPIRV: Capability VectorComputeINTEL +; CHECK-SPIRV: Extension "SPV_INTEL_vector_compute" +; CHECK-SPIRV: Name [[#FuncName:]] "foo" +; CHECK-SPIRV: Name [[#ParamName:]] "a" +; CHECK-SPIRV: TypeVoid [[#VoidT:]] +; CHECK-SPIRV: TypeBufferSurfaceINTEL [[#BufferID:]] +; CHECK-SPIRV: Function [[#VoidT]] [[#FuncID:]] +; CHECK-SPIRV-NEXT: FunctionParameter [[#BufferID]] [[#ParamName]] + +define spir_kernel void @foo(target("spirv.BufferSurfaceINTEL", 0) %a) #0 { + entry: + ret void + } + +attributes #0 = { noinline norecurse nounwind readnone "VCFunction"} \ No newline at end of file