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 在 编程语言
1,889 每月下载量
用于 autophagy-mlir
385KB
11K SLoC
Melior
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(®istry);
let context = Context::new();
context.append_dialect_registry(®istry);
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
。
- 这是因为我们需要借用
参考资料
- 原始C绑定生成依赖于 femtomc/mlir-sys。
- 整体设计灵感来源于 TheDan64/inkwell。
许可证
依赖项
~7–15MB
~203K SLoC