FPGA開発日記

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

llcの生成するDAGグラフ生成の出力ファイル名を指定できるようにしたい(2. グラフ毎にsuffixを変える)

LLVMバックエンドコンパイラのグラフ出力にファイル名をつけようプロジェクト、一応成功したのだが少し問題がある。 このDAGグラフ出力は一度に複数のグラフファイルを生成することができる。通常はそのたびにランダムなファイル名が付加されるのだが、ファイル名が指定できる場合、同じファイル名に複数のDAGグラフの出力がされていまい、結果的に1つのdotファイルしか生成されなくなる。

そこで単純な解決策ではあるが、ファイル名にsuffixを付けて、必ずモード毎に必ず異なるファイル名が生成されるようにする。

commit 59ee88a6aa7c67f2445e7de360eedbb23ceaf94d (HEAD -> myriscvx100_impl)
Author: msyksphinz <msyksphinz.dev@gmail.com>
Date:   Wed Apr 15 21:48:30 2020 +0900

    Func: implement dot files specification

diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index f58233080a5e..49cd02b64dd0 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -809,7 +809,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
              CurDAG->dump());

   if (ViewDAGCombine1 && MatchFilterBB)
-    CurDAG->viewGraph("dag-combine1 input for " + BlockName, ViewDagOutputFileName);
+    CurDAG->viewGraph("dag-combine1 input for " + BlockName, ViewDagOutputFileName + ".combine1.dot");

   // Run the DAG combiner in pre-legalize mode.
   {
@@ -831,7 +831,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
   // Second step, hack on the DAG until it only uses operations and types that
   // the target supports.
   if (ViewLegalizeTypesDAGs && MatchFilterBB)
-    CurDAG->viewGraph("legalize-types input for " + BlockName, ViewDagOutputFileName);
+    CurDAG->viewGraph("legalize-types input for " + BlockName, ViewDagOutputFileName + ".legalize-types.dot");

...

これでモード毎に出力されるファイル名が変わるはずだ。LLVMをビルドして確認する。

./bin/llc -march=myriscvx32 -debug -disable-tail-calls \
--view-isel-dags \
--view-dag-combine1-dags \
--output-dag-filename filename \
-filetype=asm \
../../../llvm/llvm-myriscvx80-tests/program/chapter08/object_test.ll -o -

filename.combine1.dotfilename.isel.dotが生成された。

dot -Tpng filename.combine1.dot > filename.combine1.png
dot -Tpng filename.isel.dot > filename.isel.png
f:id:msyksphinz:20200415220032p:plain