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)

Reply via email to