Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package spirv-llvm-translator for openSUSE:Factory checked in at 2025-04-08 17:50:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/spirv-llvm-translator (Old) and /work/SRC/openSUSE:Factory/.spirv-llvm-translator.new.1907 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "spirv-llvm-translator" Tue Apr 8 17:50:01 2025 rev:19 rq:1267345 version:20.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/spirv-llvm-translator/spirv-llvm-translator.changes 2025-03-31 11:38:36.084775491 +0200 +++ /work/SRC/openSUSE:Factory/.spirv-llvm-translator.new.1907/spirv-llvm-translator.changes 2025-04-08 17:50:24.648432653 +0200 @@ -1,0 +2,9 @@ +Sat Apr 5 13:56:55 UTC 2025 - Aaron Puchert <aaronpuch...@alice-dsl.net> + +- Update to version 20.1.1. + * Emit select for out-of-range builtin var indices. + * Allow UniformDecoration capability for Uniform (SPIR-V 1.6). + * Fix OpTypeBufferSurfaceINTEL translation for opaque pointers. + * Deprecate SPV_INTEL_token_type. + +------------------------------------------------------------------- Old: ---- SPIRV-LLVM-Translator-20.1.0.tar.gz New: ---- SPIRV-LLVM-Translator-20.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ spirv-llvm-translator.spec ++++++ --- /var/tmp/diff_new_pack.OeMonQ/_old 2025-04-08 17:50:25.076450593 +0200 +++ /var/tmp/diff_new_pack.OeMonQ/_new 2025-04-08 17:50:25.080450760 +0200 @@ -23,7 +23,7 @@ %define sover 20 Name: spirv-llvm-translator -Version: 20.1.0 +Version: 20.1.1 Release: 0 Summary: LLVM/SPIR-V Bi-Directional Translator library License: BSD-3-Clause ++++++ SPIRV-LLVM-Translator-20.1.0.tar.gz -> SPIRV-LLVM-Translator-20.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/SPIRVReader.cpp new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/SPIRVReader.cpp --- old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/SPIRVReader.cpp 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/SPIRVReader.cpp 2025-03-25 15:46:09.000000000 +0100 @@ -469,15 +469,20 @@ } case OpTypeBufferSurfaceINTEL: { auto *PST = static_cast<SPIRVTypeBufferSurfaceINTEL *>(T); - Type *StructTy = getOrCreateOpaqueStructType(M, transVCTypeName(PST)); - Type *PointerTy; - if (UseTPT) - PointerTy = TypedPointerType::get(StructTy, SPIRAS_Global); - else - PointerTy = PointerType::get(StructTy, SPIRAS_Global); - return mapType(T, PointerTy); + Type *Ty = nullptr; + if (UseTPT) { + Type *StructTy = getOrCreateOpaqueStructType(M, transVCTypeName(PST)); + Ty = TypedPointerType::get(StructTy, SPIRAS_Global); + } else { + std::vector<unsigned> Params; + if (PST->hasAccessQualifier()) { + unsigned Access = static_cast<unsigned>(PST->getAccessQualifier()); + Params.push_back(Access); + } + Ty = TargetExtType::get(*Context, "spirv.BufferSurfaceINTEL", {}, Params); + } + return mapType(T, Ty); } - case internal::OpTypeJointMatrixINTEL: { auto *MT = static_cast<SPIRVTypeJointMatrixINTEL *>(T); auto R = static_cast<SPIRVConstant *>(MT->getRows())->getZExtIntValue(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/SPIRVUtil.cpp new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/SPIRVUtil.cpp --- old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/SPIRVUtil.cpp 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/SPIRVUtil.cpp 2025-03-25 15:46:09.000000000 +0100 @@ -606,6 +606,21 @@ } // namespace SPIRV +namespace { + +// Return the value for when the dimension index of a builtin is out of range. +uint64_t getBuiltinOutOfRangeValue(StringRef VarName) { + assert(VarName.starts_with("__spirv_BuiltIn")); + return StringSwitch<uint64_t>(VarName) + .EndsWith("GlobalSize", 1) + .EndsWith("NumWorkgroups", 1) + .EndsWith("WorkgroupSize", 1) + .EndsWith("EnqueuedWorkgroupSize", 1) + .Default(0); +} + +} // anonymous namespace + // The demangler node hierarchy doesn't use LLVM's RTTI helper functions (as it // also needs to live in libcxxabi). By specializing this implementation here, // we can add support for these functions. @@ -2182,16 +2197,27 @@ for (auto *U : F.users()) { auto *CI = dyn_cast<CallInst>(U); assert(CI && "invalid instruction"); - const DebugLoc &DLoc = CI->getDebugLoc(); - Instruction *NewValue = new LoadInst(GVType, BV, "", CI->getIterator()); - if (DLoc) - NewValue->setDebugLoc(DLoc); + IRBuilder<> Builder(CI); + Value *NewValue = Builder.CreateLoad(GVType, BV); LLVM_DEBUG(dbgs() << "Transform: " << *CI << " => " << *NewValue << '\n'); if (IsVec) { - NewValue = ExtractElementInst::Create(NewValue, CI->getArgOperand(0), - "", CI->getIterator()); - if (DLoc) - NewValue->setDebugLoc(DLoc); + auto *GVVecTy = cast<FixedVectorType>(GVType); + ConstantInt *Bound = Builder.getInt32(GVVecTy->getNumElements()); + // Create a select on the index first, to avoid undefined behaviour + // due to exceeding the vector size by the extractelement. + Value *IndexCmp = Builder.CreateICmpULT(CI->getArgOperand(0), Bound); + Constant *ZeroIndex = + ConstantInt::get(CI->getArgOperand(0)->getType(), 0); + Value *ExtractIndex = + Builder.CreateSelect(IndexCmp, CI->getArgOperand(0), ZeroIndex); + + // Extract from builtin variable. + NewValue = Builder.CreateExtractElement(NewValue, ExtractIndex); + + // Clamp to out-of-range value. + Constant *OutOfRangeVal = ConstantInt::get( + F.getReturnType(), getBuiltinOutOfRangeValue(BuiltinVarName)); + NewValue = Builder.CreateSelect(IndexCmp, NewValue, OutOfRangeVal); LLVM_DEBUG(dbgs() << *NewValue << '\n'); } NewValue->takeName(CI); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/SPIRVWriter.cpp new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/SPIRVWriter.cpp --- old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/SPIRVWriter.cpp 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/SPIRVWriter.cpp 2025-03-25 15:46:09.000000000 +0100 @@ -400,16 +400,6 @@ if (T->isFloatingPointTy()) return mapType(T, BM->addFloatType(T->getPrimitiveSizeInBits())); - if (T->isTokenTy()) { - BM->getErrorLog().checkError( - BM->isAllowedToUseExtension(ExtensionID::SPV_INTEL_token_type), - SPIRVEC_RequiresExtension, - "SPV_INTEL_token_type\n" - "NOTE: LLVM module contains token type, which doesn't have analogs in " - "SPIR-V without extensions"); - return mapType(T, BM->addTokenTypeINTEL()); - } - // A pointer to image or pipe type in LLVM is translated to a SPIRV // (non-pointer) image or pipe type. if (T->isPointerTy()) { @@ -620,6 +610,14 @@ } } + if (T->isTokenTy()) { + BM->getErrorLog().checkError( + false, SPIRVEC_InvalidModule, + "LLVM module contains token type, which doesn't have a counterpart in " + "SPIR-V"); + return nullptr; + } + llvm_unreachable("Not implemented!"); return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/libSPIRV/SPIRVDecorate.h new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/libSPIRV/SPIRVDecorate.h --- old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/libSPIRV/SPIRVDecorate.h 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/libSPIRV/SPIRVDecorate.h 2025-03-25 15:46:09.000000000 +0100 @@ -83,6 +83,10 @@ BuiltIn BI = static_cast<BuiltIn>(Literals.back()); return getCapability(BI); } + case DecorationUniform: + if (Module->isAllowedToUseVersion(VersionNumber::SPIRV_1_6)) + return getVec(CapabilityUniformDecoration); + return getVec(CapabilityShader); default: return getCapability(Dec); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/libSPIRV/SPIRVEnum.h new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/libSPIRV/SPIRVEnum.h --- old/SPIRV-LLVM-Translator-20.1.0/lib/SPIRV/libSPIRV/SPIRVEnum.h 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/lib/SPIRV/libSPIRV/SPIRVEnum.h 2025-03-25 15:46:09.000000000 +0100 @@ -396,7 +396,6 @@ ADD_VEC_INIT(DecorationSample, {CapabilitySampleRateShading}); ADD_VEC_INIT(DecorationInvariant, {CapabilityShader}); ADD_VEC_INIT(DecorationConstant, {CapabilityKernel}); - ADD_VEC_INIT(DecorationUniform, {CapabilityShader}); ADD_VEC_INIT(DecorationSaturatedConversion, {CapabilityKernel}); ADD_VEC_INIT(DecorationStream, {CapabilityGeometryStreams}); ADD_VEC_INIT(DecorationLocation, {CapabilityShader}); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/DebugInfo/builtin-get-global-id.ll new/SPIRV-LLVM-Translator-20.1.1/test/DebugInfo/builtin-get-global-id.ll --- old/SPIRV-LLVM-Translator-20.1.0/test/DebugInfo/builtin-get-global-id.ll 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/DebugInfo/builtin-get-global-id.ll 2025-03-25 15:46:09.000000000 +0100 @@ -33,7 +33,8 @@ ; CHECK-NEXT: [[I3:%[0-9]]] = insertelement <3 x i64> [[I1]], i64 [[I2]], i32 1, !dbg [[DBG]] ; CHECK-NEXT: [[I4:%[0-9]]] = call spir_func i64 @_Z13get_global_idj(i32 2) #1, !dbg [[DBG]] ; CHECK-NEXT: [[I5:%[0-9]]] = insertelement <3 x i64> [[I3]], i64 [[I4]], i32 2, !dbg [[DBG]] -; CHECK-NEXT: %call = extractelement <3 x i64> [[I5]], i32 0, !dbg [[DBG]] +; CHECK-NEXT: [[I6:%[0-9]]] = extractelement <3 x i64> [[I5]], i32 0, !dbg [[DBG]] +; CHECK-NEXT: %call = select i1 true, i64 [[I6]], i64 0, !dbg [[DBG]] store i64 %call, ptr %gid, align 8, !dbg !11 ret void, !dbg !12 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/DecorateUniform.spvasm new/SPIRV-LLVM-Translator-20.1.1/test/DecorateUniform.spvasm --- old/SPIRV-LLVM-Translator-20.1.0/test/DecorateUniform.spvasm 1970-01-01 01:00:00.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/DecorateUniform.spvasm 2025-03-25 15:46:09.000000000 +0100 @@ -0,0 +1,26 @@ +; REQUIRES: spirv-as + +; RUN: spirv-as %s --target-env spv1.6 -o %t.spv +; RUN: spirv-val %t.spv +; RUN: llvm-spirv -to-text -o - %t.spv | FileCheck %s + +; Check that the translator does not add the Shader/Matrix capability +; requirements for SPIR-V 1.6. + +; CHECK-NOT: Capability Matrix +; CHECK-NOT: Capability Shader + + OpCapability Addresses + OpCapability Kernel + OpCapability UniformDecoration + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %2 "test" + OpDecorate %uint_0 Uniform + %uint = OpTypeInt 32 0 + %uint_0 = OpConstant %uint 0 + %void = OpTypeVoid + %1 = OpTypeFunction %void + %2 = OpFunction %void None %1 + %3 = OpLabel + OpReturn + OpFunctionEnd diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.ll new/SPIRV-LLVM-Translator-20.1.1/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.ll --- old/SPIRV-LLVM-Translator-20.1.0/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.ll 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.ll 1970-01-01 01:00:00.000000000 +0100 @@ -1,44 +0,0 @@ -; RUN: llvm-as < %s -o %t.bc -; RUN: llvm-spirv %t.bc -o %t.spv --spirv-allow-unknown-intrinsics --spirv-ext=+SPV_INTEL_token_type -; RUN: llvm-spirv %t.spv -to-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV -; RUN: llvm-spirv -r %t.spv -o %t.rev.bc -; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefix=CHECK-LLVM - -; CHECK-SPIRV: Capability TokenTypeINTEL -; CHECK-SPIRV: Extension "SPV_INTEL_token_type" -; CHECK-SPIRV: Name [[#FUN:]] "llvm.tokenfoo" -; CHECK-SPIRV: TypeTokenINTEL [[#TYPE:]] -; CHECK-SPIRV: TypeFunction [[#FUN_TYPE:]] [[#TYPE]] -; CHECK-SPIRV: Function {{.*}} [[#FUN]] {{.*}} [[#FUN_TYPE]] - - -; ModuleID = 'token.bc' -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024" -target triple = "spir-unknown-unknown" - -; CHECK-LLVM: declare token @llvm.tokenfoo() -declare token @llvm.tokenfoo() - -; Function Attrs: nounwind -define spir_kernel void @foo() #0 !kernel_arg_addr_space !2 !kernel_arg_access_qual !2 !kernel_arg_type !2 !kernel_arg_type_qual !2 !kernel_arg_base_type !2 { -entry: -; CHECK-LLVM: call token @llvm.tokenfoo() - %tok = call token @llvm.tokenfoo() - ret void -} - -attributes #0 = { nounwind } - -!spirv.MemoryModel = !{!0} -!opencl.enable.FP_CONTRACT = !{} -!spirv.Source = !{!1} -!opencl.spir.version = !{!0} -!opencl.ocl.version = !{!0} -!opencl.used.extensions = !{!2} -!opencl.used.optional.core.features = !{!2} -!spirv.Generator = !{!3} - -!0 = !{i32 1, i32 2} -!1 = !{i32 3, i32 102000} -!2 = !{} -!3 = !{i16 6, i16 14} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.spt new/SPIRV-LLVM-Translator-20.1.1/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.spt --- old/SPIRV-LLVM-Translator-20.1.0/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.spt 1970-01-01 01:00:00.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/extensions/INTEL/SPV_INTEL_token_type/token_type_intel.spt 2025-03-25 15:46:09.000000000 +0100 @@ -0,0 +1,50 @@ +; RUN: llvm-spirv %s -to-binary -o %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.rev.bc +; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefix=CHECK-LLVM + +; CHECK-LLVM: declare token @llvm.tokenfoo() + +119734787 65536 393230 13 0 +2 Capability Addresses +2 Capability Linkage +2 Capability Kernel +2 Capability TokenTypeINTEL +7 Extension "SPV_INTEL_token_type" +5 ExtInstImport 1 "OpenCL.std" +3 MemoryModel 1 2 +4 EntryPoint 6 10 "foo" +3 Source 3 102000 +6 Name 4 "llvm.tokenfoo" +3 Name 7 "foo" +4 Name 8 "entry" +3 Name 9 "tok" + +8 Decorate 4 LinkageAttributes "llvm.tokenfoo" Import +5 Decorate 7 LinkageAttributes "foo" Export +2 TypeTokenINTEL 2 +3 TypeFunction 3 2 +2 TypeVoid 5 +3 TypeFunction 6 5 + + + +5 Function 2 4 0 3 + +1 FunctionEnd + +5 Function 5 7 0 6 + +2 Label 8 +4 FunctionCall 2 9 4 +1 Return + +1 FunctionEnd + +5 Function 5 10 0 6 + +2 Label 11 +4 FunctionCall 5 12 7 +1 Return + +1 FunctionEnd + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/extensions/INTEL/SPV_INTEL_vector_compute/buffer_surface_intel.ll new/SPIRV-LLVM-Translator-20.1.1/test/extensions/INTEL/SPV_INTEL_vector_compute/buffer_surface_intel.ll --- old/SPIRV-LLVM-Translator-20.1.0/test/extensions/INTEL/SPV_INTEL_vector_compute/buffer_surface_intel.ll 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/extensions/INTEL/SPV_INTEL_vector_compute/buffer_surface_intel.ll 2025-03-25 15:46:09.000000000 +0100 @@ -1,20 +1,20 @@ ; RUN: llvm-as %s -o %t.bc ; RUN: llvm-spirv %t.bc -o %t.spv --spirv-ext=+SPV_INTEL_vector_compute --spirv-allow-unknown-intrinsics ; RUN: llvm-spirv %t.spv -o %t.spt --to-text -; RUN: llvm-spirv -r %t.spv -o %t.bc +; RUN: llvm-spirv -r %t.spv -o %t.bc --spirv-target-env=SPV-IR ; RUN: llvm-dis %t.bc -o %t.ll ; RUN: FileCheck %s --input-file %t.spt -check-prefix=SPV ; RUN: FileCheck %s --input-file %t.ll -check-prefix=LLVM target triple = "spir" -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_ro_t(ptr addrspace(1)) -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_wo_t(ptr addrspace(1)) -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_rw_t(ptr addrspace(1)) -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_rw_t(ptr addrspace(1)) -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_buffer_wo_t(ptr addrspace(1)) -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image2d_wo_t(ptr addrspace(1)) -; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image3d_ro_t(ptr addrspace(1)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_ro_t(target("spirv.BufferSurfaceINTEL", 0)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_wo_t(target("spirv.BufferSurfaceINTEL", 1)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_rw_t(target("spirv.BufferSurfaceINTEL", 2)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_rw_t(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 2)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_buffer_wo_t(target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 1)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image2d_wo_t(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1)) +; LLVM-DAG: declare i32 @llvm.some.unknown.intrinsic.i32.p1.image3d_ro_t(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0)) declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_ro_t(target("spirv.BufferSurfaceINTEL", 0)) declare i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_wo_t(target("spirv.BufferSurfaceINTEL", 1)) @@ -42,16 +42,16 @@ ; SPV-DAG: TypeFunction {{[0-9]+}} [[INT]] [[IMAGE3D_RO]]{{(^|[^0-9])}} ; SPV-DAG: TypeFunction {{[0-9]+}} [[VOID]] [[BUFRO]] [[BUFWO]] [[BUFRW]] [[IMAGE1D_RW]] [[IMAGE1D_BUF_WO]] [[IMAGE2D_WO]] [[IMAGE3D_RO]]{{(^|[^0-9])}} -; LLVM-DAG: define spir_kernel void @test(ptr addrspace(1) %buf_ro, ptr addrspace(1) %buf_wo, ptr addrspace(1) %buf_rw, ptr addrspace(1) %im1d, ptr addrspace(1) %im1db, ptr addrspace(1) %im2d, ptr addrspace(1) %im3d) +; LLVM-DAG: define spir_kernel void @test(target("spirv.BufferSurfaceINTEL", 0) %buf_ro, target("spirv.BufferSurfaceINTEL", 1) %buf_wo, target("spirv.BufferSurfaceINTEL", 2) %buf_rw, target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 2) %im1d, target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 1) %im1db, target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1) %im2d, target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %im3d) define spir_kernel void @test(target("spirv.BufferSurfaceINTEL", 0) %buf_ro, target("spirv.BufferSurfaceINTEL", 1) %buf_wo, target("spirv.BufferSurfaceINTEL", 2) %buf_rw, target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 2) %im1d, target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 1) %im1db, target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1) %im2d, target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %im3d) #0 { entry: -; LLVM: %0 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_ro_t(ptr addrspace(1) %buf_ro) -; LLVM: %1 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_wo_t(ptr addrspace(1) %buf_wo) -; LLVM: %2 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_rw_t(ptr addrspace(1) %buf_rw) -; LLVM: %3 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_rw_t(ptr addrspace(1) %im1d) -; LLVM: %4 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_buffer_wo_t(ptr addrspace(1) %im1db) -; LLVM: %5 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image2d_wo_t(ptr addrspace(1) %im2d) -; LLVM: %6 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image3d_ro_t(ptr addrspace(1) %im3d) +; LLVM: %0 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_ro_t(target("spirv.BufferSurfaceINTEL", 0) %buf_ro) +; LLVM: %1 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_wo_t(target("spirv.BufferSurfaceINTEL", 1) %buf_wo) +; LLVM: %2 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_rw_t(target("spirv.BufferSurfaceINTEL", 2) %buf_rw) +; LLVM: %3 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_rw_t(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 2) %im1d) +; LLVM: %4 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image1d_buffer_wo_t(target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 1) %im1db) +; LLVM: %5 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image2d_wo_t(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1) %im2d) +; LLVM: %6 = call i32 @llvm.some.unknown.intrinsic.i32.p1.image3d_ro_t(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %im3d) ; LLVM: ret void %0 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_ro_t(target("spirv.BufferSurfaceINTEL", 0) %buf_ro) %1 = call i32 @llvm.some.unknown.intrinsic.i32.p1.buffer_wo_t(target("spirv.BufferSurfaceINTEL", 1) %buf_wo) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/get_global_size.cl new/SPIRV-LLVM-Translator-20.1.1/test/get_global_size.cl --- old/SPIRV-LLVM-Translator-20.1.0/test/get_global_size.cl 1970-01-01 01:00:00.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/get_global_size.cl 2025-03-25 15:46:09.000000000 +0100 @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple spir64 -fdeclare-opencl-builtins -finclude-default-header -emit-llvm-bc %s -o %t.bc +// RUN: llvm-spirv %t.bc -o %t.spv +// RUN: spirv-val %t.spv +// RUN: llvm-spirv %t.bc -spirv-text -o - | FileCheck %s + +// Check that out of range dimension index values are handled according to the +// OpenCL C specification. + +kernel void ggs(global size_t *out, uint x) { + // CHECK-DAG: Constant [[#]] [[#CONST64_1:]] 1 0 + // CHECK-DAG: Constant [[#]] [[#CONST3:]] 3 + // CHECK-DAG: Constant [[#]] [[#CONST0:]] 0 + // CHECK-DAG: ConstantTrue [[#]] [[#CONSTTRUE:]] + // CHECK-DAG: ConstantFalse [[#]] [[#CONSTFALSE:]] + + // CHECK: FunctionParameter [[#]] [[#PARAMOUT:]] + // CHECK: FunctionParameter [[#]] [[#PARAMX:]] + + // CHECK: Load [[#]] [[#LD0:]] + // CHECK: CompositeExtract [[#]] [[#SCAL0:]] [[#LD0]] 0 + // CHECK: Select [[#]] [[#RES0:]] [[#CONSTTRUE]] [[#SCAL0]] [[#CONST64_1]] + // CHECK: Store [[#]] [[#RES0]] + out[0] = get_global_size(0); + + // CHECK: Load [[#]] [[#LD1:]] + // CHECK: CompositeExtract [[#]] [[#SCAL1:]] [[#LD1]] 0 + // CHECK: Select [[#]] [[#RES1:]] [[#CONSTFALSE]] [[#SCAL1]] [[#CONST64_1]] + // CHECK: Store [[#]] [[#RES1]] + out[1] = get_global_size(3); + + // CHECK: Load [[#]] [[#LD2:]] + // CHECK: ULessThan [[#]] [[#CMP:]] [[#PARAMX]] [[#CONST3]] + // CHECK: Select [[#]] [[#SEL:]] [[#CMP]] [[#PARAMX]] [[#CONST0]] + // CHECK: VectorExtractDynamic 2 [[#SCAL2:]] [[#LD2:]] [[#SEL]] + // CHECK: Select [[#]] [[#RES2:]] [[#CMP]] [[#SCAL2]] [[#CONST64_1]] + // CHECK: Store [[#]] [[#RES2]] + out[2] = get_global_size(x); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SPIRV-LLVM-Translator-20.1.0/test/negative/feature_requires_extension.ll new/SPIRV-LLVM-Translator-20.1.1/test/negative/feature_requires_extension.ll --- old/SPIRV-LLVM-Translator-20.1.0/test/negative/feature_requires_extension.ll 2025-02-13 17:47:15.000000000 +0100 +++ new/SPIRV-LLVM-Translator-20.1.1/test/negative/feature_requires_extension.ll 2025-03-25 15:46:09.000000000 +0100 @@ -1,13 +1,9 @@ ; Check whether the translator reports an error for a module with token type -; if SPV_INTEL_token_type extension is not used. ; RUN: llvm-as < %s -o %t.bc ; RUN: not llvm-spirv %t.bc 2>&1 --spirv-allow-unknown-intrinsics | FileCheck %s -; CHECK: RequiresExtension: Feature requires the following SPIR-V extension: -; CHECK-NEXT: SPV_INTEL_token_type -; CHECK-NEXT: NOTE: LLVM module contains token type, which doesn't have analogs -; CHECK-SAME: in SPIR-V without extensions +; CHECK: InvalidModule: Invalid SPIR-V module: LLVM module contains token type, which doesn't have a counterpart in SPIR-V ; ModuleID = 'token.bc' target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024"