Skip to content

Commit 7771429

Browse files
author
Simon Camphausen
authored
[mlir][EmitC] Fail on memrefs with 0 dims in type conversion (#111965)
This let's the type conversion fail instead of generating invalid array types.
1 parent 7b0d56b commit 7771429

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,9 @@ void mlir::populateMemRefToEmitCTypeConversion(TypeConverter &typeConverter) {
167167
typeConverter.addConversion(
168168
[&](MemRefType memRefType) -> std::optional<Type> {
169169
if (!memRefType.hasStaticShape() ||
170-
!memRefType.getLayout().isIdentity() || memRefType.getRank() == 0) {
170+
!memRefType.getLayout().isIdentity() || memRefType.getRank() == 0 ||
171+
llvm::any_of(memRefType.getShape(),
172+
[](int64_t dim) { return dim == 0; })) {
171173
return {};
172174
}
173175
Type convertedElementType =

mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-failed.mlir

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,22 @@ func.func @zero_rank() {
4141

4242
// -----
4343

44+
func.func @zero_dim_rank_1() {
45+
// expected-error@+1 {{failed to legalize operation 'memref.alloca'}}
46+
%0 = memref.alloca() : memref<0xf32>
47+
return
48+
}
49+
50+
// -----
51+
52+
func.func @zero_dim_rank_3() {
53+
// expected-error@+1 {{failed to legalize operation 'memref.alloca'}}
54+
%0 = memref.alloca() : memref<2x0x4xf32>
55+
return
56+
}
57+
58+
// -----
59+
4460
// expected-error@+1 {{failed to legalize operation 'memref.global'}}
4561
memref.global "nested" constant @nested_global : memref<3x7xf32>
4662

0 commit comments

Comments
 (0)