[Mlir-commits] [mlir] [mlir][SPIR-V] Deduce capabilities from spec constant types in update-vce (PR #228067)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Oct 1 06:07:58 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: Arseniy Obolenskiy (aobolensk)

<details>
<summary>Changes</summary>

Spec constant ops have no results, so the pass skipped their types and missed capabilities such as Int64 for an i64 spec constant

---
Full diff: https://github.com/llvm/llvm-project/pull/228067.diff


2 Files Affected:

- (modified) mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp (+10) 
- (modified) mlir/test/Dialect/SPIRV/Transforms/vce-deduction.mlir (+26) 


``````````diff
diff --git a/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp
index be8fa3a0b81c3..19511b0c18402 100644
--- a/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp
+++ b/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp
@@ -205,6 +205,16 @@ void UpdateVCEPass::runOnOperation() {
           return WalkResult::interrupt();
     }
 
+    // Spec constants have no results, so their types are conveyed by
+    // attributes.
+    if (auto specConst = dyn_cast<spirv::SpecConstantOp>(op))
+      valueTypes.push_back(specConst.getDefaultValue().getType());
+    if (auto specComposite = dyn_cast<spirv::SpecConstantCompositeOp>(op))
+      valueTypes.push_back(specComposite.getType());
+    if (auto specReplicate =
+            dyn_cast<spirv::EXTSpecConstantCompositeReplicateOp>(op))
+      valueTypes.push_back(specReplicate.getType());
+
     if (auto funcOp = dyn_cast<spirv::FuncOp>(op))
       if (auto linkage = funcOp.getLinkageAttributes())
         if (failed(requireLinkage(linkage->getLinkageType().getValue())))
diff --git a/mlir/test/Dialect/SPIRV/Transforms/vce-deduction.mlir b/mlir/test/Dialect/SPIRV/Transforms/vce-deduction.mlir
index e4514835e8175..b8fd3374e56bd 100644
--- a/mlir/test/Dialect/SPIRV/Transforms/vce-deduction.mlir
+++ b/mlir/test/Dialect/SPIRV/Transforms/vce-deduction.mlir
@@ -174,6 +174,32 @@ spirv.module Logical GLSL450 attributes {
   }
 }
 
+// CHECK: requires #spirv.vce<v1.0, [Int64, Shader, Matrix], []>
+spirv.module Logical GLSL450 attributes {
+  spirv.target_env = #spirv.target_env<
+    #spirv.vce<v1.3, [Shader, Int64], []>, #spirv.resource_limits<>>
+} {
+  spirv.SpecConstant @sc_i64 = 1 : i64
+}
+
+// CHECK: requires #spirv.vce<v1.0, [Vector16, Shader, Kernel, Matrix], []>
+spirv.module Logical GLSL450 attributes {
+  spirv.target_env = #spirv.target_env<
+    #spirv.vce<v1.3, [Shader, Vector16], []>, #spirv.resource_limits<>>
+} {
+  spirv.SpecConstant @sc = 1 : i32
+  spirv.SpecConstantComposite @scc (@sc, @sc, @sc, @sc, @sc, @sc, @sc, @sc) : vector<8xi32>
+}
+
+// CHECK: requires #spirv.vce<v1.0, [ReplicatedCompositesEXT, Vector16, Shader, Kernel, Matrix], [SPV_EXT_replicated_composites]>
+spirv.module Logical GLSL450 attributes {
+  spirv.target_env = #spirv.target_env<
+    #spirv.vce<v1.3, [Shader, Vector16, ReplicatedCompositesEXT], [SPV_EXT_replicated_composites]>, #spirv.resource_limits<>>
+} {
+  spirv.SpecConstant @sc = 1 : i32
+  spirv.EXT.SpecConstantCompositeReplicate @scc (@sc) : vector<8xi32>
+}
+
 //===----------------------------------------------------------------------===//
 // Extension
 //===----------------------------------------------------------------------===//

``````````

</details>


https://github.com/llvm/llvm-project/pull/228067


More information about the Mlir-commits mailing list