[llvm] [SPIR-V] Diagnose integer dot builtins without SPV_KHR_integer_dot_product (PR #218599)

Arseniy Obolenskiy via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 24 23:50:49 PDT 2026


https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/218599

None

>From 8a1d9cd3a0de0c578b2c2a490d88caa6bb2e6137 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Tue, 25 Aug 2026 08:50:11 +0200
Subject: [PATCH] [SPIR-V] Diagnose integer dot builtins without
 SPV_KHR_integer_dot_product

---
 llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp                | 10 +++++++---
 .../SPV_KHR_integer_dot_product_OCLtoSPIRV_int.ll      |  3 +++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp b/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
index 01bf7d0926b15..0978a6c6e5c95 100644
--- a/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
@@ -1928,9 +1928,13 @@ static bool generateDotOrFMulInst(StringRef DemangledCall,
 
   const auto *ST =
       static_cast<const SPIRVSubtarget *>(&MIRBuilder.getMF().getSubtarget());
-  if (GR->isScalarOrVectorOfType(Call->ReturnRegister, SPIRV::OpTypeInt) &&
-      (ST->canUseExtension(SPIRV::Extension::SPV_KHR_integer_dot_product) ||
-       ST->isAtLeastSPIRVVer(VersionTuple(1, 6)))) {
+  if (GR->isScalarOrVectorOfType(Call->ReturnRegister, SPIRV::OpTypeInt)) {
+    if (!ST->canUseExtension(SPIRV::Extension::SPV_KHR_integer_dot_product) &&
+        !ST->isAtLeastSPIRVVer(VersionTuple(1, 6)))
+      report_fatal_error(Twine(Call->Builtin->name()) +
+                             ": the builtin requires the following SPIR-V "
+                             "extension: SPV_KHR_integer_dot_product",
+                         false);
     const SPIRV::DemangledBuiltin *Builtin = Call->Builtin;
     const SPIRV::IntegerDotProductBuiltin *IntDot =
         SPIRV::lookupIntegerDotProductBuiltin(Builtin->name());
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_integer_dot_product/SPV_KHR_integer_dot_product_OCLtoSPIRV_int.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_integer_dot_product/SPV_KHR_integer_dot_product_OCLtoSPIRV_int.ll
index 52ddc39265442..a387d57494017 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_integer_dot_product/SPV_KHR_integer_dot_product_OCLtoSPIRV_int.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_integer_dot_product/SPV_KHR_integer_dot_product_OCLtoSPIRV_int.ll
@@ -2,6 +2,9 @@
 ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32v1.6-unknown-unknown %s -o - -filetype=obj | spirv-val %}
 ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_integer_dot_product %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-EXT
 ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_integer_dot_product %s -o - -filetype=obj | spirv-val %}
+; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+
+; CHECK-ERROR: LLVM ERROR: {{.*}}: the builtin requires the following SPIR-V extension: SPV_KHR_integer_dot_product
 
 ; CHECK: Capability DotProduct
 ; CHECK: Capability DotProductInput4x8BitPacked



More information about the llvm-commits mailing list