# LLVM Dialect for [pliron](../README.md) This crate provides the following functionality: 1. Dialect definitions of LLVM ops, types and attributes. 2. A wrapper around [inkwell](https://thedan64.github.io/inkwell/), converting b/w our LLVM dialect and `inkwell`'s LLVM representation. The latter uses [llvm-sys](https://thedan64.github.io/inkwell/), which requires LLVM to be installed on your system. We currently support LLVM-17, and hence LLVM-17 needs to be on your computer. On Ubuntu, this means, you require the `libllvm17` and `libpolly-17-dev` [packages](https://apt.llvm.org/). ## llvm-opt tool The `llvm-opt` binary is provided to enable parsing LLVM bitcode binaries into `pliron`'s LLVM dialect and to emit LLVM bitcode back from the dialect. Example usage: 1. Compile [fib.c](tests/resources/fib.c) into LLVM-IR: `$clang-17 -c -emit-llvm -o /tmp/fib.bc tests/resources/fib.c ` 2. Convert the LLVM bitcode to LLVM dialect in `pliron` and back to LLVM bitcode (the binary `llvm-opt`, produced in your cargo's target directory must be in $PATH): `$llvm-opt -S -i /tmp/fib.bc -o /tmp/fib.opt.ll` 3. Compile the output fibonacci LLVM-IR, along with a [main function](tests/resources/fib-main.c) into a binary: `$clang-17 -o /tmp/fib /tmp/fib.out.ll tests/resources/fib-main.c` 4. Run the fibonacci binary to see the first few fibonacci numbers printed. `$/tmp/fib` ``` fib(0): 0 fib(1): 0 fib(2): 1 fib(3): 1 fib(4): 2 ``` **Note**: Implementation of the LLVM dialect is not complete, and the above is just a proof-of-concept.