[Mlir-commits] [mlir] 0bd0765 - EmitC: Allow arrays of size zero (#123292)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Jan 17 00:06:08 PST 2025
Author: Matthias Gehre
Date: 2025-01-17T09:06:04+01:00
New Revision: 0bd07652524ebacdee166eb609fef48c50769b09
URL: https://github.com/llvm/llvm-project/commit/0bd07652524ebacdee166eb609fef48c50769b09
DIFF: https://github.com/llvm/llvm-project/commit/0bd07652524ebacdee166eb609fef48c50769b09.diff
LOG: EmitC: Allow arrays of size zero (#123292)
This is allowed as a GCC extension, see
https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html.
Added:
Modified:
mlir/docs/Dialects/emitc.md
mlir/lib/Dialect/EmitC/IR/EmitC.cpp
mlir/test/Dialect/EmitC/invalid_types.mlir
mlir/test/Dialect/EmitC/types.mlir
Removed:
################################################################################
diff --git a/mlir/docs/Dialects/emitc.md b/mlir/docs/Dialects/emitc.md
index 743d70959f3d8e..e2288f518dae1a 100644
--- a/mlir/docs/Dialects/emitc.md
+++ b/mlir/docs/Dialects/emitc.md
@@ -16,6 +16,8 @@ The following convention is followed:
floating types.
* If `__bf16` is used, the code requires a compiler that supports it, such as
GCC or Clang.
+* If `emitc.array` with a dimension of size zero is used, then the code
+ requires [a GCC extension](https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html).
* Else the generated code is compatible with C99.
These restrictions are neither inherent to the EmitC dialect itself nor to the
diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp
index fdc21d6c6e24b9..c818dd18a3d248 100644
--- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp
+++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp
@@ -971,8 +971,8 @@ LogicalResult emitc::ArrayType::verify(
return emitError() << "shape must not be empty";
for (int64_t dim : shape) {
- if (dim <= 0)
- return emitError() << "dimensions must have positive size";
+ if (dim < 0)
+ return emitError() << "dimensions must have non-negative size";
}
if (!elementType)
diff --git a/mlir/test/Dialect/EmitC/invalid_types.mlir b/mlir/test/Dialect/EmitC/invalid_types.mlir
index 302a345c7c4f42..c39a881ff26ade 100644
--- a/mlir/test/Dialect/EmitC/invalid_types.mlir
+++ b/mlir/test/Dialect/EmitC/invalid_types.mlir
@@ -36,14 +36,6 @@ func.func @illegal_array_missing_x(
// -----
-func.func @illegal_array_non_positive_dimenson(
- // expected-error @+1 {{dimensions must have positive size}}
- %arg0: !emitc.array<0xi32>
-) {
-}
-
-// -----
-
func.func @illegal_array_missing_type(
// expected-error @+1 {{expected non-function type}}
%arg0: !emitc.array<10x>
diff --git a/mlir/test/Dialect/EmitC/types.mlir b/mlir/test/Dialect/EmitC/types.mlir
index e3462bffc5b0de..d4dd94457f39b9 100644
--- a/mlir/test/Dialect/EmitC/types.mlir
+++ b/mlir/test/Dialect/EmitC/types.mlir
@@ -17,7 +17,9 @@ func.func @array_types(
// CHECK-SAME: !emitc.array<30x!emitc.ssize_t>
%arg5: !emitc.array<30x!emitc.ssize_t>,
// CHECK-SAME: !emitc.array<30x!emitc.ptr
diff _t>
- %arg6: !emitc.array<30x!emitc.ptr
diff _t>
+ %arg6: !emitc.array<30x!emitc.ptr
diff _t>,
+ // CHECK-SAME: !emitc.array<0xi64>
+ %arg7: !emitc.array<0xi64>
) {
return
}
More information about the Mlir-commits
mailing list