# Programming Languages Intermediate RepresentatiON [![Status](https://github.com/vaivaswatha/pliron/actions/workflows/ci.yml/badge.svg)](https://github.com/vaivaswatha/pliron/actions/workflows/ci.yml) `pliron` is an extensible compiler IR framework, inspired by [MLIR](https://mlir.llvm.org/docs/LangRef/) and written in safe Rust. ## Build and Test * Install the [rust toolchain](https://www.rust-lang.org/tools/install). * `cargo build` and `cargo test` should build the compiler and run the testsuite. * To see a simple IR constructed (by the [print_simple](tests/ir_construct.rs) test), use the following command: cargo test print_simple -- --show-output It should print something like: ```mlir builtin.module @bar { ^block_1v1(): builtin.func @foo: builtin.function<() -> (builtin.int)> { ^entry_block_2v1(): c0_op_3v1_res0 = test.constant builtin.integer <0x0: builtin.int>; test.return c0_op_3v1_res0 } } ``` * `pliron` provides an [`llvm-opt` tool](pliron-llvm/README.md) that can parse LLVM-IR bitcode into the LLVM dialect and output LLVM-IR bitcode. ## Using the Library `pliron` is currently in a nascent stage and not yet useful for real-world use. In the future it can be used by just adding a dependence to the [crate](https://crates.io/crates/pliron) in your Rust project. ## Documentation * Introduction and motivation are covered in the [introductory wiki article](https://github.com/vaivaswatha/pliron/wiki/Introduction). * The wiki also has a [comparison](https://github.com/vaivaswatha/pliron/wiki/Comparison-with-other-compiler-frameworks) of `pliron` with other compiler projects, touching upon some design decisions. * Code documentation can be found on [docs.rs](https://docs.rs/pliron/latest/pliron/).