Ygen - Yet another Code Generator
Welcome to Ygen! This repository contains the source code of the ygen project.
Ygen is a toolkit for building fast and clean compilers using a memory safe api.
Why ygen?
You are probably wondering: why would I choose ygen and not llvm or cranelift?? Here are a few reasons:
- Simplicity: One of ygens main focus is simplicity which means to us that as much code as possible is readable and shared
- Similare API: Ygens API is very similar to LLVMs API for example i designed the
IRBuilderto be very similar to theBuilderfrom LLVM - Traits: Ygen uses a lot of traits to overload functions. Great examples are the
Build...functions from theIRBuilderto build ir nodes
[!WARNING] This project is still early in its developement. Bugs and miscompilations are expected. ONLY USE YGEN FOR TOY COMPILERS
Contributions
Simple example
Here is a simple example on how to use Ygen to build an add function:
use Error;
use *;
When executed this simple program builds an add function and dumps it's ir:
define i32 @add( i32 %0, i32 %1 ) {
entry:
%2 = add i32 %0, %1
ret i32 %2
}
You can add following lines (you need to include std::fs::Path) to compile the IR down to assembly:
module.emitToAsmFile?;
Support
Ygen currently supports following architectures
| Name | Full ir | Full isa |
|---|---|---|
| x64 | Yes | No |
Copyright
This project is owned by Cr0a3 and licensed under the Apache2 License