FPGA開発日記

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

オリジナルLLVM Backendを追加しよう (23. llvm-projectを使ってテスト環境を構築する)

https://cdn-ak.f.st-hatena.com/images/fotolife/m/msyksphinz/20181123/20181123225150.png

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。

jonathan2251.github.io

関数コールもかなり動くようになってきて、これまでに多くのテストパタンを確認してきたのだが、リグレッションテストを作っておく必要があるように感じている。 とりあえず、マニュアルにあったllvm-projectの環境とテスト環境を使用して、リファレンスのテスト環境が正しく動作することを確認しよう。 LLVM Release 7.0をターゲットに環境を構築する。

github.com

まずは、通常通りllvmのビルドを行う。この時、compiler-rtのプロジェクトもビルドするように設定しておく。compiler-rtはランタイムライブラリやパフォーマンス解析ツールのパッケージらしい。

git clone https://github.com/llvm/llvm-project.git --depth 1 -b release/7.x
cd llvm-project
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_TO_BUILD="X86;Mips" -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV" -DCMAKE_ENABLE_PROJECTS="clang;compiler-rt" ../llvm
cmake --build . -- -j8

次に、テストスイートをダウンロードしてビルドしてみる。

git clone https://github.com/llvm/llvm-test-suite.git test-suite -b release/7.x
cmake -DCMAKE_C_COMPILER=${HOME}/llvm-project/build/bin/clang -DCMAKE_CXX_COMPILER=${HOME}/llvm-project/build/bin/clang++ -C../test-suite/cmake/caches/Debug.cmake ../test-suite
cmake --build .

ビルドが完了すると、テストを実行してみる。

${HOME}/llvm-project/build/bin/llvm-lit -v -j 8 -o results.json .

909個のテストが実行された。全体としては数10分程度かかった。ただし、テストは上手くいったようだ。

size..note.ABI-tag: 32
size..plt: 32
size..rodata: 37
size..text: 1825
**********
PASS: test-suite :: SingleSource/UnitTests/Vectorizer/gcc-loops.test (909 of 909)
********** TEST 'test-suite :: SingleSource/UnitTests/Vectorizer/gcc-loops.test' RESULTS **********
compile_time: 13.9219
exec_time: 43.2344
hash: "65ff90ec20c719ac27991a4a195a56ad"
link_time: 0.2344
size: 95600
size..bss: 229680
size..comment: 56
size..data: 16
size..debug_abbrev: 1420
size..debug_info: 21411
size..debug_line: 6607
size..debug_macinfo: 1
size..debug_pubnames: 5024
size..debug_pubtypes: 2576
size..debug_ranges: 2064
size..debug_str: 14964
size..dynamic: 512
size..dynsym: 576
size..eh_frame: 3336
size..eh_frame_hdr: 812
size..fini: 9
size..fini_array: 8
size..gcc_except_table: 352
size..gnu.hash: 48
size..gnu.version: 48
size..gnu.version_r: 112
size..got: 16
size..got.plt: 184
size..init: 23
size..init_array: 16
size..interp: 28
size..note.ABI-tag: 32
size..plt: 336
size..rodata: 250
size..text: 12561
**********
Testing Time: 807.45s
********************
Failing Tests (1):
    test-suite :: MultiSource/Applications/ClamAV/clamscan.test

  Expected Passes    : 908
  Unexpected Failures: 1