[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