図9-1は、ソースプログラムmatmult.cからHIRが生成された時の様子をCoVisで表示したものである。図の左上は制御フローグラフ、左下は制御フローグラフに関する情報、右上はHIR、右下はソースプログラムである。それぞれ赤や青の色のついた部分が 対応している。この図の中央上のボタンが示すように、(1)HIRが生成された時、 (2)HIRでの最適化後、(3)LIRが生成された時、(4)LIRでの最適化後、 の4つの時点でこのような表示をすることが出来る。
-coins:debuginfo,snapshotdebuginfo オプションは、 ソースファイルの行番号情報を LIR に渡すためのオプション であり、 snapshot オプションは、 COINS 内部表現を XML として出力するためのオプションである。
出力される情報は、以下の4ヶ所での情報である。いずれも、 coins.driver.Driverのメソッドcompileの中で出力される。
java -classpath ./classes covis.CoVis [XML ファイル]表示は関数単位で表示される。表示される内容は、ソースプログラム、制御フローグラフまたは支配木(dominator tree)、 制御フローグラフまたは支配木の中で選択されたノードに関する情報、 HIRまたはLIR(選択されたノードに対応する部分のハイライト)、LIRのC表現、 などである。何を表示するかは、タブ、あるいはボタンを使って選ぶことが出来る。
図9-2は、コード生成過程のトレース表示をしたものである。左の欄にはトレース情報 をとった時点の名前が入っている。右上にはソースプログラム、右下には ある時点でのトレース情報が表示されている。右下の下半分あたりにLIRと マシン命令記述とのパターンマッチングの様子が示されている。 右下の上半分あたりには、そのパターンマッチングの前の時点での ある基本ブロックの中のLIRの列が表示されている。
そこにある[<<]をクリックすると、その基本ブロックが一つ前の時点で どうなっていたかを見ることが出来る。また、[>>]をクリックすると、 その基本ブロックが一つ後の時点でどうなるかを見ることが出来る。
-coins:debuginfo,trace=xxxのようなオプション指定をする必要がある。その出力結果を
java coins.driver.Driver -coins:debuginfo,... > trace.java perl trace2html.pl -o trace -c trace.javaのようにperlのファイルtrace2html.plで処理すればtrace.htmlファイルが作成されるので、それをブラウザで表示すれば良い。
traceオプションの指定の仕方は「2.2. コンパイラ・ドライバの使い方」の その他にあるが、ここで関係するものには以下のものがある。
ToCFG, ToLinear, ToMachineCode, EarlyRewriting, LateRewriting, Restruct, InstSel, AggregateByReference, ConvToAsm, NamingFloatConst, ReplaceFloatConst, RewriteConvUF, AugmentCFG, IntroVirReg, JumpCanon, JumpOpt, LoopInversion, PreHeaders, SimpleOpt, Ssa(pruned), Ssa(minimal), LiveRange, RegisterAllocation
より詳しくは トレース情報表示ツールを参照されたい。