Melior

GitHub Action Crate License

The rustic MLIR bindings for Rust

This crate is a wrapper of the MLIR C API.

```rust use melior::{ Context, dialect, ir::*, utility::registeralldialects, };

let registry = dialect::Registry::new(); registeralldialects(&registry);

let context = Context::new(); context.appenddialectregistry(&registry); context.getorload_dialect("func");

let location = Location::unknown(&context); let module = Module::new(location);

let integer_type = Type::integer(&context, 64);

let function = { let region = Region::new(); let block = Block::new(&[(integertype, location), (integertype, location)]);

let sum = block.append_operation(
    operation::Builder::new("arith.addi", location)
        .add_operands(&[*block.argument(0).unwrap(), *block.argument(1).unwrap()])
        .add_results(&[integer_type])
        .build(),
);

block.append_operation(
    operation::Builder::new("func.return", Location::unknown(&context))
        .add_operands(&[*sum.result(0).unwrap()])
        .build(),
);

region.append_block(block);

operation::Builder::new("func.func", Location::unknown(&context))
    .add_attributes(&[
        (
            Identifier::new(&context, "function_type"),
            Attribute::parse(&context, "(i64, i64) -> i64").unwrap(),
        ),
        (
            Identifier::new(&context, "sym_name"),
            Attribute::parse(&context, "\"add\"").unwrap(),
        ),
    ])
    .add_regions(vec![region])
    .build()

};

module.body().append_operation(function);

assert!(module.as_operation().verify()); ```

Goals

Melior aims to provide a simple, safe, and complete API for MLIR with a reasonably sane ownership model represented by the type system in Rust.

Install

sh cargo add melior

Dependencies

LLVM/MLIR 15 needs to be installed on your system. On Linux and macOS, you can install it via Homebrew.

sh brew install llvm@15

Contribution

Contribution is welcome! But, Melior is still in the alpha stage as well as the MLIR C API. Note that the API is unstable and can have breaking changes in the future.

Technical notes

Naming conventions

References

License

Apache 2.0