Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pku-minic/koopa
Library for generating/parsing/optimizing Koopa IR.
https://github.com/pku-minic/koopa
compiler ir
Last synced: 1 day ago
JSON representation
Library for generating/parsing/optimizing Koopa IR.
- Host: GitHub
- URL: https://github.com/pku-minic/koopa
- Owner: pku-minic
- License: gpl-3.0
- Created: 2021-07-28T02:57:50.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-03-24T02:55:53.000Z (8 months ago)
- Last Synced: 2024-04-24T20:26:35.870Z (7 months ago)
- Topics: compiler, ir
- Language: Rust
- Homepage:
- Size: 766 KB
- Stars: 83
- Watchers: 1
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Koopa
[](https://github.com/pku-minic/koopa)
[](https://crates.io/crates/koopa)
[](https://docs.rs/koopa)
[](https://github.com/pku-minic/koopa/actions?query=branch%3Amaster)Library for generating/parsing/optimizing Koopa IR.
Koopa IR is the next generation of education-oriented intermediate representation designed for compiler courses at Peking University.
## Usage
```
cargo add koopa
```## Koopa IR
Here is a "Hello, world!" program in Koopa IR:
```koopa
// `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 is a strongly-typed, SSA form based intermediate representation. It's simple but powerful enough to support compilation of code into machine instructions, or some advanced optimizations of it.
For more details, see [the document of Koopa IR](https://pku-minic.github.io/online-doc/#/misc-app-ref/koopa) (Chinese).
## Examples
See the [`examples` directory](examples), which contains three examples:
* [`opt`](examples/opt): a simple Koopa IR optimizer.
* [`brainfuck`](examples/brainfuck): a brainfuck to Koopa IR compiler.
* [`interpreter`](examples/interpreter): a simple Koopa IR interpreter.And there are some more complex examples:
* [`kira-rs`](https://github.com/pku-minic/kira-rs): The Kira compiler (Rust version), which compiles SysY language into Koopa IR and RISC-V assembly.
* [`kira-cpp`](https://github.com/pku-minic/kira-cpp): The Kira compiler (C++ version).## References
Koopa IR library is heavily influenced by [LLVM](https://llvm.org/) and [Cranelift](https://wasmtime.dev/).
## Changelog
See [CHANGELOG.md](CHANGELOG.md).
## License
Copyright (C) 2010-2023 MaxXing. License GPLv3.