<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/125174>125174</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
how to define an array in mlir?
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Shaquille-Wu
</td>
</tr>
</table>
<pre>
hello, llvm&mlir experts
I have a trouble about defining a array in mlir.
first, I define a Dialect named as lunar, it is very simple dialect like this in .td file:
```
#ifndef LIB_DIALECT_LUNAR_LUNARDIALECT_TD_
#define LIB_DIALECT_LUNAR_LUNARDIALECT_TD_
include "mlir/IR/OpBase.td"
def Lunar_Dialect : Dialect {
let name = "lunar";
let summary = "A dialect for elementwise math";
let description = [{
The lunar dialect defines types and operations for elementwise computation.
}];
let cppNamespace = "::mlir::lunar";
let useDefaultTypePrinterParser = 1;
}
#endif // LIB_DIALECT_LUNAR_LUNARDIALECT_TD_
```
second, I define a datatype named as "array" in another .td file, like this:
```
#ifndef LIB_DIALECT_LUNAR_LUNARTYPES_TD_
#define LIB_DIALECT_LUNAR_LUNARTYPES_TD_
include "LunarDialect.td"
include "mlir/IR/AttrTypeBase.td"
include "mlir/IR/BuiltinTypes.td"
include "mlir/IR/BuiltinTypeInterfaces.td"
// A base class for all types in this dialect
class Lunar_Type<string name, string typeMnemonic, list<Trait> traits = []> : TypeDef<Lunar_Dialect, name, traits> {
let mnemonic = typeMnemonic;
}
def ArrayData : Lunar_Type<"ArrayData", "array"> {
let summary = "A array data";
let description = [{
A type for array.
}];
let parameters = (ins "Type":$dataType, "int":$size);
let assemblyFormat = [{ `<` $dataType `x` $size `>` }];
}
#endif // LIB_DIALECT_LUNAR_LUNARTYPES_TD_
```
the third, I modify my the .cpp file about LunarDialect like this:
```
#include "LunarDialect.h"
#include "LunarTypes.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/DialectImplementation.h"
#include "llvm/ADT/TypeSwitch.h"
#include "Dialect/Lunar/LunarDialect.cpp.inc"
#define GET_TYPEDEF_CLASSES
#include "Dialect/Lunar/LunarTypes.cpp.inc"
namespace mlir {
namespace lunar {
void LunarDialect::initialize() {
addTypes<
#define GET_TYPEDEF_LIST
#include "Dialect/Lunar/LunarTypes.cpp.inc"
>();
}
} // namespace poly
} // namespace mlir
```
the forth, I modify my verify tool(named as "lunar-opt"), and the .cpp file like this:
```
#include "mlir/InitAllDialects.h"
#include "mlir/InitAllPasses.h"
#include "mlir/Pass/PassManager.h"
#include "mlir/Pass/PassRegistry.h"
#include "mlir/Tools/mlir-opt/MlirOptMain.h"
#include "Dialect/Lunar/LunarDialect.h"
int main(int argc, char **argv) {
mlir::DialectRegistry registry;
registry.insert<mlir::lunar::LunarDialect>();
mlir::registerAllDialects(registry);
mlir::registerAllPasses();
return mlir::asMainReturnCode(
mlir::MlirOptMain(argc, argv, "lunar_opt Pass Driver", registry));
}
```
at last, I execute the "lunar-opt", and it throws the errors as following:
```
lunar_test_0.mlir:2:39: error: expected non-function type
func.func @main(%arg0: !lunar.array<i32x10>) -> !lunar.array<i32x10> {
^
lunar_test_0.mlir:2:39: error: failed to parse ArrayData parameter 'dataType' which is to be a `Type`
func.func @main(%arg0: !lunar.array<i32x10>) -> !lunar.array<i32x10> {
```
I guess the "i32" is not in the enums of mlir.Type according to above errors,
I don't know why the mlir cannot accept the "i32"
So, is there anyone would like to teach me how to fix this trouble?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8WN1u47oRfhr6hoghU3FsX_hC8U8RIHvOYuOi6FVAiyOLPRSpkpQd9-mLISVbyiYn3hY4wCIrUcP54_fNDM2dkwcNsCTTRzJdj3jjS2OXLyX_dyOVgrt_NKO9EedlCUoZwlZUqWNF2EOlpKXwVoP1jiTZEy35ESin3ppmr4DyvWk8FVBILfWBcsqt5WcqNcWdY5JkhbTOo8anKIa715IryD3VvAJBuaOq0dyikPRUOnoEe6ZOVrUCKlpZJf8A6kvpUPnYC1pIBSTNSJKRh6T9l2SEpbLQAgr6_PT4un7Knjer3evz33_LfsS_3dJu_RrFW69uE08yqXPVCKCEMQyRsO3TD8K2v9eP3MHYC8JYFAw-YFyvXbgkzS6hk9kjSTJKFcQ0UJKuUWebCUbS63fXVBW3504ku-SkMJaCggq0P0kHtOK-fLdXgMutrL00Ou6fPnamKd2VEFN_0RiT4ag_1-Ao14KaGizH7e4nc7mp6saHj-OgkczWZLqO5nEBHcjr-jdegat5fgkSjy3NQvrC00dBNw7WUPBG-d25hu9Wag_2O7cObFAzac3M1tEYYSloIQtKCdsStr3xQHvQcZAbLd5BVXDPMRlXrBLGAsgJYwhFro0vwV4hieTpsPo_4HP3z--bl1vRORAeYDMgrwXbBZWfYDfz3mKSBwj-RPaxkcpLjeLuF2Sf8PQKnvc2hfjCSWV0zxFOirsIMq5Ui0CpI-dbfJIki1KRWKiZpCvnLRYfPCHMfvuKCr5pqIyWeTwU50m62lkuPUk31OODu5ACcbsJFEWtayhIuhrQF3V0JuLesKHH46q1FnQOzA-hiqefIYTW3PNgchAOUrz7iqliqz7mekY_rA2xAIt274WKXxeDLLgc8486PqZ00FNzyyvwYNv0sbnUgRghgshvdo8-xIUQgNT-8snJ_wBhiz7fuXNQ7dV5a2zFfc89isRJV-QhoT2luPrWrqG2KLUJK32Xf7U8DBjV460vA6NtWx8qI2RxptWZ4odxXteB_G0_7JPvq2LwCWXLliQ_S0Tqffj9PfkE2BslL5T-Urp18AmbM3aCWP4_3BZniG223hG2RfUvJ-nz8mPhC8u2z7EbbAf5yOt6LHXeKx1dafzbZveKp7bebF9Xz9nLy-blVuUx5Peq9aVdheknMuS6GBtmXCVJdjRSDA48tjSppZdcBZzPCVtcCgUXIphFSH8WxvPTy-7_iIEiEYLV9ySYrTv4X-OpjTp_9i0cfPIetgj5wlicNYZcOILFJ2-MImze75ghaXemDiWALXAjDhdD8tzMlA6PWvpMqTYxX2A3yn7HMvPnkijS_veNa34Ae6v4DzhI5-35T-V3xijcgK8xIdtvStrfa_-Ny0-I9AU3ygt0pfa04lKHiuwpt4fQ-vISEcsywjJuD8ceHK8zWKusi4Ha9qGt0d3rWGoHFhvp-_EtPA6JMEBhz1ZUBrZ3eITNLxavjeHDLfEMBwAPDvrG6t4O7jChP8LyyojAw9jp-np7uSds3iUsZml1Qe6rqT1Fu3Rt5RFs25b7Hr8jWw-73FPFuzsQvEHeeAjI_4kXkRTSU19ac3JBCKw11iGNCqOUOUl9-Jke0UkPzr8m4zY4bLXpAqeLoCI8vNWQexBUG31XNDoPkwC2fcwMLozxDyX3SYsiwqbcHhLcTNgkmBnHSSRdyZS9TULTZQt6F-aST0U6vJHp5nZ3Cy4VCOoNDhwOejPTZQChhM2uc8aMnkqZl3iF9IbucX4nD0n4FtJE_4oYB2ULr8yHBpzrDlymLFwcHNXGx_EWKOimctQU8dIcxhue58aKMMcanCqOHRICLFGtMJqwmad_aHOipzJOIqFj5Vyjcp7nUPuh4ejTS7jiy-CUBcr12WigJ9Mo0RZhQz3wvKQV0NKc8L2Qb3EUb6_-JN1GZSOxTMUiXfARLCezdJ4m6WR2PyqXYr7P-TQV-4fJ_QMTXIj9A_D5A5skxWQxZyO5ZAmbJpN0kkyni_R-nM4X6WK-mPJkzyaQJuQ-gYpLNcZJYmzsYSSda2A5YVM0ofgelAu_aXTllZHpemSXKH-3bw6O3Cc497urBi-9gmUbVHfN08PfLUi6HTVWLUvv69CMQl88SF82-3FucKhpZ5tgqLbmX7E8B_ewurceHpfsvwEAAP__I0NiVQ">