*参照元 [#n4a5e3fb] #backlinks *説明 [#idd2282f] FIXME: なにをするもの? GIMPLE は GCC 内部では gimple と tree というデータ型で表現されているようだ。 -[[gcc-8.3/gcc/gimple]] -[[gcc-8.3/gcc/tree]] --tree は tree_node のポインタ --[[gcc-8.3/gcc/tree_node(gen)]] **gimple のおおざっぱな見方 [#dba601c3] -gimple をダンプする関数 --[[gcc-8.3/gcc/print_gimple_stmt()]] gimple *stmt; print_gimple_stmt (stdout, stmt, 2); GCC のバージョンによっては、もう一つ 0 を渡す必要があるかも。 **tree のおおざっぱな見方 [#uc74c188] -tree をダンプする関数 --[[gcc-8.3/gcc/debug_tree()]] --[[gcc-8.3/gcc/print_node()]] tree val があったとする。 種類を見る -val->base.code をみると、SSA_NAME のような tree_code 型の定数が入っている。 コード上で扱う際は TREE_CODE() マクロで取る。 --[[gcc-8.3/gcc/tree_code]] --[[gcc-8.3/gcc/TREE_CODE()]] -tree_node は色んな型の union だが、どの型も必ず先頭に tree_base 型相当のメンバを持っているので、 base.code にアクセスしても大丈夫なはず。相変わらず GCC はむちゃくちゃな作りだ。 --[[gcc-8.3/gcc/tree_base]] 適した型でダンプ -code が SSA_NAME だとしたら、tree_ssa_name 型の ssa_name を見れば良い。code と名前がほぼ一致しているから、わかるはず。 やや特殊なもの -関数名を見たいとき。 --code が FUNCTION_DECL の場合、decl_minimal.name を見る。 --IDENTIFIER_NODE になっているはずなので、identifier.id.str を見ると関数名がわかる。 -関数名や変数名を見たいとき。 --code が FUNCTION_DECL or VAR_DECL の場合、decl_minimal.name を見る。 --IDENTIFIER_NODE になっているはずなので、identifier.id.str を見ると名前がわかる。