Open
Description
Hi all,
I would like to build a small EDSL. The idea is to have the dsl frontend in python and handle lowering in c++.
Here is a very small example which I wrote to reproduce the error:
from mlir.ir import Context, Module, get_dialect_registry
from mlir.ir import InsertionPoint, Location, F32Type
from mlir.dialects import func, arith
from mlir.dialects import arith
from edsl_cpp import entry
def main():
registry = get_dialect_registry()
context = Context()
context.append_dialect_registry(registry)
module = None
with context:
module = Module.create(Location.unknown())
with InsertionPoint(module.body), Location.unknown():
fp_type = F32Type.get()
function = func.FuncOp("test", ([fp_type, fp_type, fp_type], [fp_type]))
with InsertionPoint(function.add_entry_block()) as block:
one = function.arguments[0]
two = function.arguments[1]
mult_res = arith.MulFOp(one, two)
three = function.arguments[2]
res = arith.AddFOp(mult_res, three)
func.ReturnOp([res])
entry(module._CAPIPtr)
if __name__ == "__main__":
main()
#include <pybind11/pybind11.h>
#include "mlir/CAPI/IR.h"
#include "mlir-c/IR.h"
#include "mlir-c/RegisterEverything.h"
#include "mlir-c/Bindings/Python/Interop.h"
#include "mlir/CAPI/Support.h"
#include <stdexcept>
PYBIND11_MODULE(edsl_cpp, m) {
m.doc() = "edsl python bindings";
m.def("entry", [](pybind11::object capsule){
MlirModule mlirModule = mlirPythonCapsuleToModule(capsule.ptr());
if (mlirModuleIsNull(mlirModule)) {
throw std::runtime_error("empty module");
}
MlirContext context = mlirModuleGetContext(mlirModule);
if (mlirContextIsNull(context)) {
throw std::runtime_error("empty context");
}
auto module = unwrap(mlirModule);
module->dump();
});
}
If necessary, I can share the whole source code. Anyway, when I am executing the python script I get the following error:
dialect has no registered type printing hook
UNREACHABLE executed at <path-to-llvm>/llvm-project/mlir/include/mlir/IR/Dialect.h:111!
Does anybody have an idea what is missing in my example?
I can dump a module in python without any problem by something is wrong in the cpp-part.
I am using 461274b81d8641eab64d494accddc81d7db8a09e
commit but I bet it is going to be the same with the main
branch.