LC3b-llvm is a project mainly written in C++ and D, it's free.
A llvm backend for the LC3b architecture
float %t1(int %a, int %p) { %C = seteq int %a, 0 br bool %C, label %T, label %F T: store int 123, int %p br label %F F: ret float undef }
codegens to this:
t1: save -96, %o6, %o6
subcc %i0, 0, %l0
bne .LBBt1_2 ! F nop .LBBt1_1: ! T or %g0, 123, %l0 st %l0, [%i1] .LBBt1_2: ! F restore %g0, %g0, %g0 retl nop
should be replaced with a brz in V9 mode.
int %t1(int %a, int %b) { %C = seteq int %a, 0 %D = select bool %C, int %a, int %b ret int %D }
Emit MULX/[SU]DIVX instructions in V9 mode instead of fiddling with the Y register, if they are faster.
Codegen bswap(load)/store(bswap) -> load/store ASI
Implement frame pointer elimination, e.g. eliminate save/restore for leaf fns.
Fill delay slots
Implement JIT support