FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Writing an LLVM Backendをやってみる(1. RISCV64プロジェクトを作成)

f:id:msyksphinz:20181111134229p:plain

LLVMのバックエンドについてより理解するために良さそうな資料を見つけたので一通り触ってみることにした。 Writing an LLVM Backendという。

Writing an LLVM Backend — LLVM 8 documentation

この資料では、新しいターゲットアーキテクチャを追加するにあたって何が必要なのかについて説明してある。 Target Machine Descriptionの記述から、レジスタファイルの定義、命令の定義などについて記述していく。

LLVMソースコードにはすでにRISCVターゲットのソースが入っているが、現時点では32‐bit版?しか対応していない(もしかしたら64-bitでも動くのかもしれない。ソースを眺めていると64‐bitの記述がいくつか散見される)ので、64-bit版のRISC-Vのターゲットを追加する練習をしてみようと思い立った。

lib/Target/Mipsをコピーして、lib/Target/RISCV64を作ってみることにした。 ディレクトリをコピーして、まずはMipsという記述を片っ端からRISCV64に置き換えていく。

ターゲットアーキテクチャにRISCV64を追加した。

  • lib/Target/LLVMBuild.txt
diff --git a/lib/Target/LLVMBuild.txt b/lib/Target/LLVMBuild.txt
index 0d899a9c782..33baa669987 100644
--- a/lib/Target/LLVMBuild.txt
+++ b/lib/Target/LLVMBuild.txt
@@ -33,6 +33,7 @@ subdirectories =
  Nios2
  PowerPC
  RISCV
+ RISCV64
  Sparc
  SystemZ
  WebAssembly

あとはひたすらビルドを行う。

mkdir llvm-riscv64
cd llvm-riscv64
cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_TO_BUILD="RISCV64" ../llvm
cmake --build .

まずこれでかなりの時間を要してしまった。次から、やっとターゲットアーキテクチャ向けに改造を行っていく。