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.dot
とfilename.isel.dot
が生成された。
dot -Tpng filename.combine1.dot > filename.combine1.png dot -Tpng filename.isel.dot > filename.isel.png