[Mlir-commits] [mlir] [MLIR][Spirv] Don't lower tensors that can't be represented by an ArrayType (PR #171002)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Sat Dec 6 15:43:30 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-spirv
Author: Stefan Weigl-Bosker (sweiglbosker)
<details>
<summary>Changes</summary>
I noticed this because of https://github.com/llvm/llvm-project/issues/159738, though it was only caught by his fuzzer because it wrapped to 0.
Also, is there a reason for the usage of `unsigned` for sizes in spirv types? I believe most of the builtin types use `int64_t` for sizes, so it may make sense to do the same for spirv.
---
Full diff: https://github.com/llvm/llvm-project/pull/171002.diff
1 Files Affected:
- (modified) mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp (+5)
``````````diff
diff --git a/mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp b/mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp
index cb9b7f6ec2fd2..f07307fcd2f9d 100644
--- a/mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp
+++ b/mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp
@@ -502,6 +502,11 @@ static Type convertTensorType(const spirv::TargetEnv &targetEnv,
<< type << " illegal: cannot handle zero-element tensors\n");
return nullptr;
}
+ if (arrayElemCount > std::numeric_limits<unsigned>::max()) {
+ LLVM_DEBUG(llvm::dbgs()
+ << type << " illegal: cannot fit tensor into target type\n");
+ return nullptr;
+ }
Type arrayElemType = convertScalarType(targetEnv, options, scalarType);
if (!arrayElemType)
``````````
</details>
https://github.com/llvm/llvm-project/pull/171002
More information about the Mlir-commits
mailing list