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 2026-02-19 14:18:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/spirv-llvm-translator (Old)
and /work/SRC/openSUSE:Factory/.spirv-llvm-translator.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "spirv-llvm-translator"
Thu Feb 19 14:18:37 2026 rev:29 rq:1333593 version:21.1.4
Changes:
--------
---
/work/SRC/openSUSE:Factory/spirv-llvm-translator/spirv-llvm-translator.changes
2025-12-16 15:50:17.751666678 +0100
+++
/work/SRC/openSUSE:Factory/.spirv-llvm-translator.new.1977/spirv-llvm-translator.changes
2026-02-19 14:19:03.444006908 +0100
@@ -1,0 +2,8 @@
+Sun Feb 15 22:56:43 UTC 2026 - Aaron Puchert <[email protected]>
+
+- Update to version 21.1.4.
+ * Implement SPV_KHR_fma extension.
+ * Fix FMA name check in LLVM->SPIRV.
+ * Enhance handling of umul_with_overflow in reverse translation.
+
+-------------------------------------------------------------------
Old:
----
SPIRV-LLVM-Translator-21.1.3.tar.gz
New:
----
SPIRV-LLVM-Translator-21.1.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ spirv-llvm-translator.spec ++++++
--- /var/tmp/diff_new_pack.69CBzD/_old 2026-02-19 14:19:03.976028739 +0100
+++ /var/tmp/diff_new_pack.69CBzD/_new 2026-02-19 14:19:03.976028739 +0100
@@ -1,7 +1,7 @@
#
# spec file for package spirv-llvm-translator
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
# Copyright (c) 2023, Martin Hauke <[email protected]>
#
# All modifications and additions to the file contributed by third parties
@@ -23,7 +23,7 @@
%define sover 21
Name: spirv-llvm-translator
-Version: 21.1.3
+Version: 21.1.4
Release: 0
Summary: LLVM/SPIR-V Bi-Directional Translator library
License: BSD-3-Clause
++++++ SPIRV-LLVM-Translator-21.1.3.tar.gz ->
SPIRV-LLVM-Translator-21.1.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/.github/workflows/check-in-tree-build.yml
new/SPIRV-LLVM-Translator-21.1.4/.github/workflows/check-in-tree-build.yml
--- old/SPIRV-LLVM-Translator-21.1.3/.github/workflows/check-in-tree-build.yml
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/.github/workflows/check-in-tree-build.yml
2026-01-27 14:52:37.000000000 +0100
@@ -119,11 +119,11 @@
- name: Build
run: |
cd build
- make llvm-spirv -j2
+ make llvm-spirv -j$(nproc)
- name: Build tests & test
run: |
cd build
- make check-llvm-spirv -j2
+ make check-llvm-spirv -j$(nproc)
build_windows:
name: Windows
@@ -218,7 +218,7 @@
- name: Build
run: |
cd build
- make llvm-spirv -j2
+ make llvm-spirv -j$(sysctl -n hw.logicalcpu)
# FIXME: Testing is disabled at the moment as it requires clang to
be present
# - name: Build tests & test
# run: |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/.github/workflows/check-out-of-tree-build.yml
new/SPIRV-LLVM-Translator-21.1.4/.github/workflows/check-out-of-tree-build.yml
---
old/SPIRV-LLVM-Translator-21.1.3/.github/workflows/check-out-of-tree-build.yml
2025-11-20 15:38:37.000000000 +0100
+++
new/SPIRV-LLVM-Translator-21.1.4/.github/workflows/check-out-of-tree-build.yml
2026-01-27 14:52:37.000000000 +0100
@@ -104,8 +104,8 @@
- name: Build
run: |
cd build
- make llvm-spirv -j2
+ make llvm-spirv -j$(nproc)
- name: Build tests & test
run: |
cd build
- make check-llvm-spirv -j2
+ make check-llvm-spirv -j$(nproc)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/include/LLVMSPIRVExtensions.inc
new/SPIRV-LLVM-Translator-21.1.4/include/LLVMSPIRVExtensions.inc
--- old/SPIRV-LLVM-Translator-21.1.3/include/LLVMSPIRVExtensions.inc
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/include/LLVMSPIRVExtensions.inc
2026-01-27 14:52:37.000000000 +0100
@@ -18,6 +18,7 @@
EXT(SPV_KHR_shader_clock)
EXT(SPV_KHR_cooperative_matrix)
EXT(SPV_KHR_untyped_pointers)
+EXT(SPV_KHR_fma)
EXT(SPV_INTEL_subgroups)
EXT(SPV_INTEL_media_block_io)
EXT(SPV_INTEL_device_side_avc_motion_estimation)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/SPIRVReader.cpp
new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/SPIRVReader.cpp
--- old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/SPIRVReader.cpp 2025-11-20
15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/SPIRVReader.cpp 2026-01-27
14:52:37.000000000 +0100
@@ -1141,7 +1141,8 @@
FPEncodingWrap DstEnc = GetEncodingAndUpdateType(SPVDstTy);
if (IsFP4OrFP8Encoding(SrcEnc) || IsFP4OrFP8Encoding(DstEnc) ||
SPVSrcTy->isTypeInt(4) || SPVDstTy->isTypeInt(4)) {
- FPConversionDesc FPDesc = {SrcEnc, DstEnc, BC->getOpCode()};
+ FPConversionDesc FPDesc = {
+ SrcEnc, DstEnc, static_cast<SPIRV::SPIRVWord>(BC->getOpCode())};
auto Conv = SPIRV::FPConvertToEncodingMap::rmap(FPDesc);
std::vector<Value *> Ops = {Src};
std::vector<Type *> OpsTys = {Src->getType()};
@@ -3061,6 +3062,10 @@
return mapValue(
BV, Builder.CreateIntrinsic(Intrinsic::arithmetic_fence, RetTy, Val));
}
+ case OpFmaKHR: {
+ auto *BC = static_cast<SPIRVFmaKHR *>(BV);
+ return mapValue(BV, transBuiltinFromInst("fma", BC, BB));
+ }
case internal::OpMaskedGatherINTEL: {
IRBuilder<> Builder(BB);
auto *Inst = static_cast<SPIRVMaskedGatherINTELInst *>(BV);
@@ -3526,6 +3531,20 @@
M, Intrinsic::memset, {FT->getParamType(0), FT->getParamType(2)})
->getName();
}
+
+ // Special handling for spirv.llvm_umul_with_overflow_* functions
+ // These were created during forward translation by lowering intrinsics.
+ // During reverse translation, we replace them with intrinsic calls.
+ if (FuncNameRef.starts_with("spirv.llvm_umul_with_overflow_")) {
+ Type *OverloadTy = FT->getParamType(0);
+ Function *F = Intrinsic::getOrInsertDeclaration(
+ M, Intrinsic::umul_with_overflow, {OverloadTy});
+ F = cast<Function>(mapValue(BF, F));
+ mapFunction(BF, F);
+ return F; // Skip body translation - intrinsic will be used instead
+ }
+
+ // Normal function handling.
if (FuncNameRef.consume_front("spirv.")) {
FuncNameRef.consume_back(".volatile");
FuncName = FuncNameRef.str();
@@ -3534,21 +3553,12 @@
Function *F = M->getFunction(FuncName);
if (!F)
F = Function::Create(FT, Linkage, AS, FuncName, M);
+
F = cast<Function>(mapValue(BF, F));
mapFunction(BF, F);
if (F->isIntrinsic()) {
- if (F->getIntrinsicID() != Intrinsic::umul_with_overflow)
- return F;
- std::string Name = F->getName().str();
- auto *ST = cast<StructType>(F->getReturnType());
- auto *FT = F->getFunctionType();
- auto *NewST = StructType::get(ST->getContext(), ST->elements());
- auto *NewFT = FunctionType::get(NewST, FT->params(), FT->isVarArg());
- F->setName("old_" + Name);
- auto *NewFn = Function::Create(NewFT, F->getLinkage(),
F->getAddressSpace(),
- Name, F->getParent());
- return NewFn;
+ return F;
}
F->setCallingConv(IsKernel ? CallingConv::SPIR_KERNEL
@@ -3940,6 +3950,7 @@
case OpUDotAccSatKHR:
case OpSUDotAccSatKHR:
case OpReadClockKHR:
+ case OpFmaKHR:
case internal::OpJointMatrixLoadINTEL:
case OpCooperativeMatrixLoadKHR:
case internal::OpCooperativeMatrixLoadCheckedINTEL:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/SPIRVWriter.cpp
new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/SPIRVWriter.cpp
--- old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/SPIRVWriter.cpp 2025-11-20
15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/SPIRVWriter.cpp 2026-01-27
14:52:37.000000000 +0100
@@ -4459,13 +4459,14 @@
case Intrinsic::fma: {
if (!checkTypeForSPIRVExtendedInstLowering(II, BM))
break;
- SPIRVWord ExtOp = OpenCLLIB::Fma;
SPIRVType *STy = transType(II->getType());
std::vector<SPIRVValue *> Ops{transValue(II->getArgOperand(0), BB),
transValue(II->getArgOperand(1), BB),
transValue(II->getArgOperand(2), BB)};
- return BM->addExtInst(STy, BM->getExtInstSetId(SPIRVEIS_OpenCL), ExtOp,
Ops,
- BB);
+ if (BM->isAllowedToUseExtension(ExtensionID::SPV_KHR_fma))
+ return BM->addInstTemplate(OpFmaKHR, BM->getIds(Ops), BB, STy);
+ return BM->addExtInst(STy, BM->getExtInstSetId(SPIRVEIS_OpenCL),
+ OpenCLLIB::Fma, Ops, BB);
}
case Intrinsic::abs: {
if (!checkTypeForSPIRVExtendedInstLowering(II, BM))
@@ -4536,9 +4537,14 @@
std::vector<SPIRVValue *> Args{transValue(II->getArgOperand(0), BB),
transValue(II->getArgOperand(1), BB),
transValue(II->getArgOperand(2), BB)};
- auto *BI = BM->addExtInst(transType(II->getType()),
- BM->getExtInstSetId(SPIRVEIS_OpenCL),
- OpenCLLIB::Fma, Args, BB);
+ SPIRVInstruction *BI;
+ if (BM->isAllowedToUseExtension(ExtensionID::SPV_KHR_fma))
+ BI = BM->addInstTemplate(OpFmaKHR, BM->getIds(Args), BB,
+ transType(II->getType()));
+ else
+ BI = BM->addExtInst(transType(II->getType()),
+ BM->getExtInstSetId(SPIRVEIS_OpenCL), OpenCLLIB::Fma,
+ Args, BB);
return applyRoundingModeConstraint(II->getOperand(3), BI);
}
case Intrinsic::experimental_constrained_fptoui: {
@@ -5697,6 +5703,11 @@
transScavengedType(CI),
BM->getIds(transValue(getArguments(CI), BB)), BB);
}
+ } else if (DemangledName == "__spirv_ocl_fma") {
+ if (BM->isAllowedToUseExtension(ExtensionID::SPV_KHR_fma))
+ return BM->addInstTemplate(OpFmaKHR,
+ BM->getIds(transValue(getArguments(CI),
BB)),
+ BB, transScavengedType(CI));
}
return addDecorations(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/libSPIRV/SPIRVInstruction.h
new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/libSPIRV/SPIRVInstruction.h
--- old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/libSPIRV/SPIRVInstruction.h
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/libSPIRV/SPIRVInstruction.h
2026-01-27 14:52:37.000000000 +0100
@@ -4600,5 +4600,20 @@
_SPIRV_OP(ClampStochasticRoundFToF, true, 5, true)
_SPIRV_OP(ClampStochasticRoundFToS, true, 5, true)
#undef _SPIRV_OP
+
+class SPIRVFmaKHRInstBase : public SPIRVInstTemplateBase {
+public:
+ SPIRVCapVec getRequiredCapability() const override {
+ return getVec(CapabilityFMAKHR);
+ }
+
+ std::optional<ExtensionID> getRequiredExtension() const override {
+ return ExtensionID::SPV_KHR_fma;
+ }
+};
+
+typedef SPIRVInstTemplate<SPIRVFmaKHRInstBase, OpFmaKHR, true, 6, false>
+ SPIRVFmaKHR;
+
} // namespace SPIRV
#endif // SPIRV_LIBSPIRV_SPIRVINSTRUCTION_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h
new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h
--- old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h
2026-01-27 14:52:37.000000000 +0100
@@ -655,6 +655,7 @@
add(CapabilitySubgroupMatrixMultiplyAccumulateINTEL,
"SubgroupMatrixMultiplyAccumulateINTEL");
add(CapabilityTernaryBitwiseFunctionINTEL, "TernaryBitwiseFunctionINTEL");
+ add(CapabilityFMAKHR, "FMAKHR");
// From spirv_internal.hpp
add(internal::CapabilityTokenTypeINTEL, "TokenTypeINTEL");
add(internal::CapabilityJointMatrixINTEL, "JointMatrixINTEL");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h
new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h
--- old/SPIRV-LLVM-Translator-21.1.3/lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h
2026-01-27 14:52:37.000000000 +0100
@@ -341,6 +341,7 @@
_SPIRV_OP(UntypedPtrAccessChainKHR, 4423)
_SPIRV_OP(UntypedInBoundsPtrAccessChainKHR, 4424)
_SPIRV_OP(UntypedPrefetchKHR, 4426)
+_SPIRV_OP(FmaKHR, 4427)
_SPIRV_OP(GroupNonUniformRotateKHR, 4431)
_SPIRV_OP(SDotKHR, 4450)
_SPIRV_OP(UDotKHR, 4451)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/SPIRV-LLVM-Translator-21.1.3/spirv-headers-tag.conf
new/SPIRV-LLVM-Translator-21.1.4/spirv-headers-tag.conf
--- old/SPIRV-LLVM-Translator-21.1.3/spirv-headers-tag.conf 2025-11-20
15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/spirv-headers-tag.conf 2026-01-27
14:52:37.000000000 +0100
@@ -1 +1 @@
-01e0577914a75a2569c846778c2f93aa8e6feddd
+9268f3057354a2cb65991ba5f38b16d81e803692
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/test/DecorateUniformId.spvasm
new/SPIRV-LLVM-Translator-21.1.4/test/DecorateUniformId.spvasm
--- old/SPIRV-LLVM-Translator-21.1.3/test/DecorateUniformId.spvasm
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/test/DecorateUniformId.spvasm
2026-01-27 14:52:37.000000000 +0100
@@ -15,9 +15,10 @@
OpCapability UniformDecoration
OpMemoryModel Physical64 OpenCL
OpEntryPoint Kernel %2 "test"
- OpDecorateId %uint_0 UniformId %uint_0
+ OpDecorateId %tgt_uint_0 UniformId %op_uint_0
%uint = OpTypeInt 32 0
- %uint_0 = OpConstant %uint 0
+ %op_uint_0 = OpConstant %uint 0
+ %tgt_uint_0 = OpConstant %uint 0
%void = OpTypeVoid
%1 = OpTypeFunction %void
%2 = OpFunction %void None %1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/test/extensions/KHR/SPV_KHR_fma/fma.ll
new/SPIRV-LLVM-Translator-21.1.4/test/extensions/KHR/SPV_KHR_fma/fma.ll
--- old/SPIRV-LLVM-Translator-21.1.3/test/extensions/KHR/SPV_KHR_fma/fma.ll
1970-01-01 01:00:00.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/test/extensions/KHR/SPV_KHR_fma/fma.ll
2026-01-27 14:52:37.000000000 +0100
@@ -0,0 +1,60 @@
+; RUN: llvm-as %s -o %t.bc
+; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_KHR_fma -o %t.spv
+; TODO: enable once spirv-val supports the extension.
+; RUNx: spirv-val %t.spv
+; RUN: llvm-spirv %t.spv -to-text -o %t.spt
+; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV
+; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o %t.rev.ll
+; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
+
+; RUN: llvm-spirv %t.bc -spirv-text -o %t.spt
+; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV-NO-EXT
+; RUN: llvm-spirv %t.bc -o %t.spv
+; RUN: spirv-val %t.spv
+; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o %t.rev.ll
+; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
+
+; CHECK-SPIRV: Capability FMAKHR
+; CHECK-SPIRV: Extension "SPV_KHR_fma"
+; CHECK-SPIRV: TypeFloat [[#TYPE_FLOAT:]] 32
+; CHECK-SPIRV: TypeVector [[#TYPE_VEC:]] [[#TYPE_FLOAT]] 4
+; CHECK-SPIRV: FmaKHR [[#TYPE_FLOAT]] [[#]]
+; CHECK-SPIRV: FmaKHR [[#TYPE_VEC]] [[#]]
+; CHECK-SPIRV: FmaKHR [[#TYPE_FLOAT]] [[#]]
+
+; CHECK-SPIRV-NO-EXT-NOT: Capability FMAKHR
+; CHECK-SPIRV-NO-EXT-NOT: Extension "SPV_KHR_fma"
+; CHECK-SPIRV-NO-EXT: TypeFloat [[#TYPE_FLOAT:]] 32
+; CHECK-SPIRV-NO-EXT: TypeVector [[#TYPE_VEC:]] [[#TYPE_FLOAT]] 4
+; CHECK-SPIRV-NO-EXT: ExtInst [[#TYPE_FLOAT]] [[#]] [[#]] fma
+; CHECK-SPIRV-NO-EXT: ExtInst [[#TYPE_VEC]] [[#]] [[#]] fma
+
+; CHECK-LLVM: %{{.*}} = call spir_func float @_Z3fmafff(float %{{.*}}, float
%{{.*}}, float %{{.*}})
+; CHECK-LLVM: %{{.*}} = call spir_func <4 x float> @_Z3fmaDv4_fS_S_(<4 x
float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
+; CHECK-LLVM: %{{.*}} = call spir_func float @_Z3fmafff(float %{{.*}}, float
%{{.*}}, float %{{.*}})
+
+target datalayout =
"e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir64-unknown-unknown"
+
+define spir_func float @test_fma_scalar(float %a, float %b, float %c) {
+entry:
+ %result = call float @llvm.fma.f32(float %a, float %b, float %c)
+ ret float %result
+}
+
+define spir_func <4 x float> @test_fma_vector(<4 x float> %a, <4 x float> %b,
<4 x float> %c) {
+entry:
+ %result = call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b,
<4 x float> %c)
+ ret <4 x float> %result
+}
+
+; Case to test fma translation via OCL builtins.
+define spir_func float @test_fma_ocl_scalar(float %a, float %b, float %c) {
+entry:
+ %result = call spir_func float @_Z15__spirv_ocl_fmafff(float %a, float %b,
float %c)
+ ret float %result
+}
+
+declare float @llvm.fma.f32(float, float, float)
+declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)
+declare spir_func float @_Z15__spirv_ocl_fmafff(float, float, float)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/test/llvm-intrinsics/umul.with.overflow.ll
new/SPIRV-LLVM-Translator-21.1.4/test/llvm-intrinsics/umul.with.overflow.ll
--- old/SPIRV-LLVM-Translator-21.1.3/test/llvm-intrinsics/umul.with.overflow.ll
2025-11-20 15:38:37.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/test/llvm-intrinsics/umul.with.overflow.ll
2026-01-27 14:52:37.000000000 +0100
@@ -6,7 +6,8 @@
; On LLVM level, we'll check that the intrinsics were generated again in
reverse
; translation, replacing the SPIR-V level implementations.
; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefix=CHECK-LLVM \
-; RUN: "--implicit-check-not=declare {{.*}}
@spirv.llvm_umul_with_overflow_{{.*}}"
+; RUN: "--implicit-check-not=declare {{.*}}
@spirv.llvm_umul_with_overflow_{{.*}}" \
+; RUN: "--implicit-check-not=old_llvm.umul.with.overflow.{{.*}}"
; CHECK-SPIRV: Name [[NAME_UMUL_FUNC_8:[0-9]+]]
"spirv.llvm_umul_with_overflow_i8"
; CHECK-SPIRV: Name [[NAME_UMUL_FUNC_32:[0-9]+]]
"spirv.llvm_umul_with_overflow_i32"
@@ -25,6 +26,8 @@
%umul.value = extractvalue { i8, i1 } %umul, 0
%storemerge = select i1 %cmp, i8 0, i8 %umul.value
store i8 %storemerge, ptr %c, align 1, !tbaa !2
+ ; This test case verifies we don't leave any artifact calls behind (e.g.
old_llvm.umul.with.overflow.i8).
+ %umul2 = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %a, i8 %b)
ret void
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/SPIRV-LLVM-Translator-21.1.3/test/transcoding/fmax.ll
new/SPIRV-LLVM-Translator-21.1.4/test/transcoding/fmax.ll
--- old/SPIRV-LLVM-Translator-21.1.3/test/transcoding/fmax.ll 1970-01-01
01:00:00.000000000 +0100
+++ new/SPIRV-LLVM-Translator-21.1.4/test/transcoding/fmax.ll 2026-01-27
14:52:37.000000000 +0100
@@ -0,0 +1,25 @@
+; RUN: llvm-as %s -o %t.bc
+; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_KHR_fma -o %t.spv
+; RUN: spirv-val %t.spv
+; RUN: llvm-spirv %t.spv -to-text -o %t.spt
+; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV
+; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o %t.rev.ll
+; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
+
+; Check enabling SPV_KHR_fma does not translate fmax to fma.
+
+; CHECK-SPIRV: ExtInst [[#]] [[#]] [[#]] fmax [[#]] [[#]]
+
+; CHECK-LLVM: %{{.*}} = call spir_func float @_Z4fmaxff(float %{{.*}}, float
%{{.*}})
+
+target datalayout =
"e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir64-unknown-unknown"
+
+; Case to test fmax translation via OCL builtins.
+define spir_func float @test_fmax_ocl_scalar(float %a, float %b) {
+entry:
+ %result = call spir_func float @_Z16__spirv_ocl_fmaxff(float %a, float %b)
+ ret float %result
+}
+
+declare spir_func float @_Z16__spirv_ocl_fmaxff(float, float)