[llvm] e0c0075 - [SPIRV][AMD] Disable SPV_KHR_float_control2 for AMD flavored SPIRV (#169659)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 27 07:16:25 PST 2025
Author: Juan Manuel Martinez CaamaƱo
Date: 2025-11-27T16:16:21+01:00
New Revision: e0c0075819f4fe30c1522a1972b683641e66507a
URL: https://github.com/llvm/llvm-project/commit/e0c0075819f4fe30c1522a1972b683641e66507a
DIFF: https://github.com/llvm/llvm-project/commit/e0c0075819f4fe30c1522a1972b683641e66507a.diff
LOG: [SPIRV][AMD] Disable SPV_KHR_float_control2 for AMD flavored SPIRV (#169659)
AMD uses the translator to recover LLVM-IR from SPIRV.
Currently, the translator doesn't implement the
`SPV_KHR_float_controls2` extension (I'm working on it).
If this extension is used by the SPIRV module, we cannot translate it
back to LLVM-IR.
I'm working on the extension, but in the meantime, lets just disable it
when the target triple's vendor is `amd`.
Added:
llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_float_controls2/disabled-on-amd.ll
Modified:
llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
index ac09b937a584a..d394b3ac243a9 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
@@ -248,5 +248,11 @@ SPIRVExtensionsParser::getValidExtensions(const Triple &TT) {
R.insert(ExtensionEnum);
}
+ if (TT.getVendor() == Triple::AMD) {
+ // AMD uses the translator to recover LLVM-IR from SPIRV. Currently, the
+ // translator doesn't implement the SPV_KHR_float_controls2 extension.
+ R.erase(SPIRV::Extension::SPV_KHR_float_controls2);
+ }
+
return R;
}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_float_controls2/disabled-on-amd.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_float_controls2/disabled-on-amd.ll
new file mode 100644
index 0000000000000..879aab4de4808
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_float_controls2/disabled-on-amd.ll
@@ -0,0 +1,22 @@
+; RUN: llc -mtriple=spirv64-- --spirv-ext=all < %s | FileCheck %s --check-prefix=CHECK
+; No need to validate the output of the first command, we just want to ensure that we are on a path that triggers the use of SPV_KHR_float_controls2
+
+; RUN: llc -mtriple=spirv64-amd-amdhsa --spirv-ext=all < %s | FileCheck %s --check-prefix=CHECK-AMD
+; RUN: %if spirv-tools %{ llc -mtriple=spirv64-amd-amdhsa --spirv-ext=all < %s -filetype=obj | spirv-val %}
+
+; RUN: llc -mtriple=spirv64-amd-amdhsa --spirv-ext=+SPV_KHR_float_controls2 < %s | FileCheck %s --check-prefix=CHECK-AMD
+; RUN: %if spirv-tools %{ llc -mtriple=spirv64-amd-amdhsa --spirv-ext=+SPV_KHR_float_controls2 < %s -filetype=obj | spirv-val %}
+
+; Check that SPV_KHR_float_controls2 is not present when the target is AMD.
+; AMD's SPIRV implementation uses the translator to get bitcode from SPIRV,
+; which at the moment doesn't implement the SPV_KHR_float_controls2 extension.
+
+; CHECK: SPV_KHR_float_controls2
+; CHECK-AMD-NOT: SPV_KHR_float_controls2
+
+define spir_kernel void @foo(float %a, float %b) {
+entry:
+ ; Use contract to trigger a use of SPV_KHR_float_controls2
+ %r1 = fadd contract float %a, %b
+ ret void
+}
More information about the llvm-commits
mailing list