*参照元 [#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 を見ると名前がわかる。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS