[llvm] [SPIR-V] Allow FPFastMathMode decoration on OpFmaKHR (PR #206143)
Arseniy Obolenskiy via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 29 05:38:30 PDT 2026
https://github.com/aobolensk updated https://github.com/llvm/llvm-project/pull/206143
>From 30d04127d92d735c4a3e30b48e3ddb0645eae50a Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Fri, 26 Jun 2026 20:24:16 +0200
Subject: [PATCH 1/2] [SPIR-V] Allow FPFastMathMode decoration on OpFmaKHR
---
llvm/lib/Target/SPIRV/SPIRVInstrInfo.cpp | 1 +
llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll | 10 ++++++++++
2 files changed, 11 insertions(+)
diff --git a/llvm/lib/Target/SPIRV/SPIRVInstrInfo.cpp b/llvm/lib/Target/SPIRV/SPIRVInstrInfo.cpp
index 1a65e9635d855..49dcaf772b53a 100644
--- a/llvm/lib/Target/SPIRV/SPIRVInstrInfo.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVInstrInfo.cpp
@@ -147,6 +147,7 @@ bool SPIRVInstrInfo::canUseFastMathFlags(const MachineInstr &MI,
case SPIRV::OpFDivV:
case SPIRV::OpFRemV:
case SPIRV::OpFMod:
+ case SPIRV::OpFmaKHR:
return true;
case SPIRV::OpFNegateV:
case SPIRV::OpFNegate:
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll
index 684e3104c05d8..8cee42450516e 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll
@@ -4,10 +4,12 @@
; CHECK: OpCapability FmaKHR
; CHECK: OpExtension "SPV_KHR_fma"
+; CHECK: OpDecorate %[[#FMAFAST:]] FPFastMathMode NotNaN|NotInf
; CHECK: %[[#TYPE_FLOAT:]] = OpTypeFloat 32
; CHECK: %[[#TYPE_VEC:]] = OpTypeVector %[[#TYPE_FLOAT]] 4
; CHECK: OpFmaKHR %[[#TYPE_FLOAT]] %[[#]]
; CHECK: OpFmaKHR %[[#TYPE_VEC]] %[[#]]
+; CHECK: %[[#FMAFAST]] = OpFmaKHR %[[#TYPE_FLOAT]] %[[#]]
; CHECK: OpFmaKHR %[[#TYPE_FLOAT]] %[[#]]
; CHECK-NO-EXT-NOT: OpCapability FmaKHR
@@ -17,6 +19,7 @@
; CHECK-NO-EXT: OpExtInst %[[#TYPE_FLOAT]] %[[#]] fma
; CHECK-NO-EXT: OpExtInst %[[#TYPE_VEC]] %[[#]] fma
; CHECK-NO-EXT: OpExtInst %[[#TYPE_FLOAT]] %[[#]] fma
+; CHECK-NO-EXT: OpExtInst %[[#TYPE_FLOAT]] %[[#]] fma
define spir_func float @test_fma_scalar(float %a, float %b, float %c) {
entry:
@@ -30,6 +33,13 @@ entry:
ret <4 x float> %result
}
+; Case to test that fast-math flags are emitted as an FPFastMathMode decoration.
+define spir_func float @test_fma_fast_math(float %a, float %b, float %c) {
+entry:
+ %result = call nnan ninf float @llvm.fma.f32(float %a, float %b, float %c)
+ ret 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:
>From 329a7f5fb8f6791c5a5682816e88c1e596039624 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Mon, 29 Jun 2026 14:20:08 +0200
Subject: [PATCH 2/2] spirv-val
---
llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll
index 8cee42450516e..0f8d9e1fee411 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_fma/fma.ll
@@ -1,6 +1,6 @@
; RUN: llc -verify-machineinstrs -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_fma %s -o - | FileCheck %s
; RUN: llc -verify-machineinstrs -mtriple=spirv64-unknown-unknown < %s | FileCheck --check-prefix=CHECK-NO-EXT %s
-; TODO: Add spirv-val validation once the extension is supported.
+; RUN: %if spirv-tools %{ llc -verify-machineinstrs -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_fma %s -o - -filetype=obj | spirv-val %}
; CHECK: OpCapability FmaKHR
; CHECK: OpExtension "SPV_KHR_fma"
More information about the llvm-commits
mailing list