6 个版本
0.0.7 | 2023 年 6 月 2 日 |
---|---|
0.0.6 | 2023 年 1 月 12 日 |
0.0.5 | 2022 年 3 月 9 日 |
0.0.4 | 2022 年 2 月 21 日 |
0.0.1 | 2021 年 9 月 14 日 |
#331 在 开发工具
970 每月下载量
230KB
6K SLoC
Koopa
用于生成/解析/优化 Koopa IR 的库。
Koopa IR 是为北京大学编译课程设计的面向教育的下一代中间表示。
使用方法
cargo add koopa
Koopa IR
以下是一个 Koopa IR 中的 "Hello, world!" 程序示例
// `putchar` function in libc.
decl @putchar(i32): i32
// A helper function for printing strings (integer arrays).
fun @putstr(@arr: *i32) {
%entry:
jump %loop_entry(@arr)
%loop_entry(%ptr: *i32):
%cur = load %ptr
br %cur, %loop_body, %end
%loop_body:
call @putchar(%cur)
%next = getptr %ptr, 1
jump %loop_entry(%next)
%end:
ret
}
// String "Hello, world!\n\0".
global @str = alloc [i32, 15], {
72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33, 10, 0
}
// `main` function, the entry point of the program.
fun @main(): i32 {
%entry:
%str = getelemptr @str, 0
call @putstr(%str)
ret 0
}
Koopa IR 是一个基于强类型 SSA 形式的中间表示。它简单但功能强大,足以支持将代码编译成机器指令或对其进行一些高级优化。
更多详细信息,请参阅 Koopa IR 文档(中文)。
示例
请参阅 examples
目录,其中包含三个示例
opt
:一个简单的 Koopa IR 优化器。brainfuck
:一个从 brainfuck 编译到 Koopa IR 的编译器。interpreter
:一个简单的 Koopa IR 解释器。
还有一些更复杂的示例
参考文献
Koopa IR 库深受 LLVM 和 Cranelift 的影响。
变更日志
请参阅 CHANGELOG.md。
许可证
版权 (C) 2010-2023 MaxXing。许可证 GPLv3。
依赖
~0.1–9.5MB
~53K SLoC