• Stars
    star
    390
  • Rank 110,242 (Top 3 %)
  • Language
    Rust
  • License
    MIT License
  • Created over 5 years ago
  • Updated almost 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

(Toy) Compiler Infrastructure influenced by LLVM written in Rust

Sericum

CircleCI

Compiler Infrastructure influenced by LLVM written in Rust

Do not expect too much stuff!

To Do

  • Implement basic block parameters
  • Make it possible to generate code for multiple targets without rebuilding sericum itself
  • Verify IR
  • More optimizations for IR
  • Support returning struct as value
  • Write documents

Build

Requirement: Rust nightly

cargo test           --features x86_64                          # build for x86_64
cargo test brainfuxk --features x86_64 --release -- --nocapture # this is fun. just try it.
cargo test           --features aarch64                         # build for aarch64. a few features are implemented.
cargo test           --features riscv64                         # currently doesn't work. need help.

Example

cargo test demo --features $ARCH -- --nocapture # $ARCH is x86_64 or aarch64
  • Useful macro is available to describe IR
let fibo = sericum_ir!(m; define [i32] f [(i32)] {
    entry:
        cond = icmp le (%arg.0), (i32 2);
        br (%cond) l1, l2;
    l1:
        ret (i32 1);
    l2:
        a1 = sub (%arg.0), (i32 1);
        r1 = call f [(%a1)];
        a2 = sub (%arg.0), (i32 2);
        r2 = call f [(%a2)];
        r3 = add (%r1), (%r2);
        ret (%r3);
});

Make your own language using sericum as backend

./minilang and ./sericumcc may help you.