- Notifications
You must be signed in to change notification settings - Fork1
Optimizing Compiler Backend
License
vxcc-backend/vxcc-old
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
IMPORTANT: This is currently beeing completely rewritten and redesigned inhttp://github.com/vxcc-backend/vxcc-new
optimizing, small, simple, compiler backend.
VXCC uses SSA IR with block arguments instead of the commonly used phi-nodes.
VXCC is licenced under thepermissive Apache 2.0 license with LLVM Exceptions
- frontend generates non-SSA IR
- backend converts it to SSA
- backend applies optimizations
- backend converts it to "LL IR" (non-SSA + labels) and performs some more optimizations
- simple code generation
- easily modifyable and readable code
- not much special knowladge required
- easy to implement code generation for any architecture
- make it easy for people to learn about compiler backends
- good-ish optimizations
- beat QBE in terms of generated code speed
- reach complexity of GCC or even LLVM
- beat GCC or LLVM
| goal | progress | |
|---|---|---|
| amd64 codegen | ![]() | done (for now) |
| basic optimizations | ![]() | done |
| rv32im codegen | ![]() | in progress |
| proper register allocator & ISEL rework | ![]() | planned |
| floating point numbers | ![]() | planned |
use the./build.sh build
one ofclang,gcc, ortcc: automatically detected. different C compiler can be used by doingCC=someothercc ./build.sh [build|test] (test can be executed afterbuild to run all tests)
python3: it is recommended to create a venv in the repository root usingpython -m venv venv
Link with all files returned by./build.sh libfiles (at time of writing, onlybuild/lib.a)
this is meant to be extremely easy to do (for the frontend developer)
There is some documentation infrontend_dev_doc.md.You can also uselook at theC3C fork in thesrc/compiler/vxcc_* files.
If you have any questions, you can ask me on Discord (alex_s168) or send me anE-Mail
all contributions are welcome! Don't hesitate to ask me if you have any questions.
please do not currently change anything related to:
- codegen system / isel & regalloc (because I want to re-do it in a specific way)
- variable inlining
- duplicate code removal
- cmoves
- tailcall
- simplify loops and ifs
- simple pattern replacement of bit extract and similar
- compile time constant eval
input:
fnvoidstrcpy(char*dest,char*src) @export {for (uszi=0;src[i]!='\0';i++)dest[i]=src[i];}
output:
strcpy:xorr11d,r11d .l0:movr9b, byte[rsi+1*r11]testr9b,r9bje .l1mov byte[rdi+1*r11],r9blear8,[r11+1]movr11,r8jmp .l0 .l1:ret
This will improve in the close future.
You need to complete these tasks (in any order):
- add your target to every place with the comment
// add target.(you can usegit grep -Fn "// add target"to find them) - write a code generator (see ETC.A or X86 backend as reference) and add the file to the
build.c - add support for it to frontends?
About
Optimizing Compiler Backend
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.



