#mlir #llvm #llvm-ir #bindings #api #attributes #rustic

melior

Rust 语言中的 rustic MLIR 绑定

62 个版本 (17 个重大更新)

0.18.5 2024年6月26日
0.18.1 2024年5月4日
0.17.0 2024年3月14日
0.15.0 2023年12月19日
0.1.0 2022年7月10日

#203编程语言

Download history 787/week @ 2024-05-03 606/week @ 2024-05-10 531/week @ 2024-05-17 448/week @ 2024-05-24 1307/week @ 2024-05-31 761/week @ 2024-06-07 633/week @ 2024-06-14 629/week @ 2024-06-21 308/week @ 2024-06-28 307/week @ 2024-07-05 231/week @ 2024-07-12 274/week @ 2024-07-19 702/week @ 2024-07-26 332/week @ 2024-08-02 239/week @ 2024-08-09 578/week @ 2024-08-16

1,889 每月下载量
用于 autophagy-mlir

Apache-2.0 协议

385KB
11K SLoC

Melior

GitHub Action Crate License

Melior 是 Rust 的 MLIR 绑定。它旨在提供一个简单、安全、完整的 API,用于 MLIR,并通过 Rust 的类型系统表示一个合理的所有权模型。

此软件包是对 MLIR C API 的封装。

示例

构建一个用于添加整数的函数

use melior::{
    Context,
    dialect::{arith, DialectRegistry, func},
    ir::{*, attribute::{StringAttribute, TypeAttribute}, r#type::FunctionType},
    utility::register_all_dialects,
};

let registry = DialectRegistry::new();
register_all_dialects(&registry);

let context = Context::new();
context.append_dialect_registry(&registry);
context.load_all_available_dialects();

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

let index_type = Type::index(&context);

module.body().append_operation(func::func(
    &context,
    StringAttribute::new(&context, "add"),
    TypeAttribute::new(FunctionType::new(&context, &[index_type, index_type], &[index_type]).into()),
    {
        let block = Block::new(&[(index_type, location), (index_type, location)]);

        let sum = block.append_operation(arith::addi(
            block.argument(0).unwrap().into(),
            block.argument(1).unwrap().into(),
            location
        ));

        block.append_operation(func::r#return( &[sum.result(0).unwrap().into()], location));

        let region = Region::new();
        region.append_block(block);
        region
    },
    &[],
    location,
));

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

安装

cargo add melior

依赖项

LLVM/MLIR 17 需要在您的系统上安装。在 Linux 和 macOS 上,您可以通过 Homebrew 安装。

brew install llvm@17

文档

GitHub Pages 上查看文档。

贡献

贡献是受欢迎的!请参阅贡献指南

技术说明

  • 请注意,API 是不稳定的,可能会在未来的版本中发生变化。
  • 我们支持 UTF-8 字符编码作为字符串编码。
    • 内部缓存了 Rust 和 C 之间的字符串转换。

命名约定

  • 代码中的命名遵循 Rust 的命名约定。
  • MLIR 对象命名
  • MLIR 对象的命名遵循 MLIR 的命名约定。
    • 如果结果对象引用了 &self,它们将被命名为 <X>::as_<Y>
    • 否则,它们只被命名为 <X>::<Y>,并且可能有参数,例如位置索引。

安全性

虽然Melior旨在实现完全类型安全,但当前API的一部分并不安全。

  • 访问未在上下文中加载的方言中的操作、类型或属性可能导致运行时错误或最坏情况下的段错误。
    • 修复计划:在创建上下文时默认加载所有方言,并为高级用户提供上下文的不安全构造函数。
  • 从移动参数所有权的函数返回的IR对象引用可能会稍后被无效化。
    • 这是因为我们需要借用 &self 而不是 &mut self 来返回此类引用。
    • 例如 Region::append_block()
    • 修复计划:对这些对象使用动态检查,例如 RefCell

参考资料

许可证

Apache 2.0

依赖项

~7–15MB
~203K SLoC