Thing I missed. No memory manager. allocate() but never free().
This makes the stats a little bit darker.
You can't use it for anything other than this compiler. And adding a memory manager would possibly have added 3x more code and complexity than what's here.
Binary size of compiler is 300kb where libc is the only dependency.
My test case shows generated binary takes 3x time during execution compared with gcc -O2. Not surprising as it's not optimizing compiler.
I would say excellent.