LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。
8.2 章 Long Branchのサポート
第8章の前半はLongBranchのサポート。これは読んでみたがあまりよく分からない。 BAL命令(Branch and Link命令?)向けのサポートだが、RISC-Vには該当する命令が存在しないのでとりあえず追加だけしておいてテストはしない。
8.3章 不要なJump命令のサポート
8.3章は、不要なJump命令の削除するPassを追加する。 これにより、Passを追加することで以下のように生成されていたコードが、
lw x10, 12(x2) lw x11, 8(x2) add x10, x10, x11 sw x10, 12(x2) lw x10, 8(x2) addi x10, x10, -1 sw x10, 8(x2) jal $BB0_9 $BB0_9: # %if.end7 jal $BB0_10 $BB0_10: # %if.end8 lw x10, 4(x2) ... lw x10, 12(x2) addi x2, x2, 16 ret
以下のように不要なJumpが削除される。
lw x10, 12(x2) lw x11, 8(x2) add x10, x10, x11 sw x10, 12(x2) lw x10, 8(x2) addi x10, x10, -1 sw x10, 8(x2) $BB0_9: # %if.end7 $BB0_10: # %if.end8 lw x10, 4(x2) ...
8.4 Delayed SlotのFill
RISC-VにはDelayed Slotが存在しないので不要。