[Mlir-commits] [mlir] [mlir][EmitC] Fail on memrefs with 0 dims in type conversion (PR #111965)
Simon Camphausen
llvmlistbot at llvm.org
Fri Oct 11 01:36:16 PDT 2024
https://github.com/simon-camp created https://github.com/llvm/llvm-project/pull/111965
This let's the type conversion fail instead of generating invalid array types.
>From 0bcb320b630488c9d51c92dd9f619b7fce5ee244 Mon Sep 17 00:00:00 2001
From: Simon Camphausen <simon.camphausen at iml.fraunhofer.de>
Date: Fri, 11 Oct 2024 08:33:16 +0000
Subject: [PATCH] [mlir][EmitC] Fail on memrefs with 0 dims in type conversion
---
.../Conversion/MemRefToEmitC/MemRefToEmitC.cpp | 4 +++-
.../MemRefToEmitC/memref-to-emitc-failed.mlir | 16 ++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
index 2b7ac4b529cf0d..39532d34f616eb 100644
--- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
+++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
@@ -167,7 +167,9 @@ void mlir::populateMemRefToEmitCTypeConversion(TypeConverter &typeConverter) {
typeConverter.addConversion(
[&](MemRefType memRefType) -> std::optional<Type> {
if (!memRefType.hasStaticShape() ||
- !memRefType.getLayout().isIdentity() || memRefType.getRank() == 0) {
+ !memRefType.getLayout().isIdentity() || memRefType.getRank() == 0 ||
+ llvm::any_of(memRefType.getShape(),
+ [](int64_t dim) { return dim == 0; })) {
return {};
}
Type convertedElementType =
diff --git a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-failed.mlir b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-failed.mlir
index dee9cc97a14493..fda01974d3fc85 100644
--- a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-failed.mlir
+++ b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-failed.mlir
@@ -41,6 +41,22 @@ func.func @zero_rank() {
// -----
+func.func @zero_dim_rank_1() {
+ // expected-error at +1 {{failed to legalize operation 'memref.alloca'}}
+ %0 = memref.alloca() : memref<0xf32>
+ return
+}
+
+// -----
+
+func.func @zero_dim_rank_3() {
+ // expected-error at +1 {{failed to legalize operation 'memref.alloca'}}
+ %0 = memref.alloca() : memref<2x0x4xf32>
+ return
+}
+
+// -----
+
// expected-error at +1 {{failed to legalize operation 'memref.global'}}
memref.global "nested" constant @nested_global : memref<3x7xf32>
More information about the Mlir-commits
mailing list