参照元

説明

FIXME: なにをするもの?

GIMPLE は GCC 内部では gimple と tree というデータ型で表現されているようだ。

gimple のおおざっぱな見方

gimple *stmt;

print_gimple_stmt (stdout, stmt, 2);
GCC のバージョンによっては、もう一つ 0 を渡す必要があるかも。

tree のおおざっぱな見方

tree val があったとする。

種類を見る

  • val->base.code をみると、SSA_NAME のような tree_code 型の定数が入っている。 コード上で扱う際は TREE_CODE() マクロで取る。
  • tree_node は色んな型の union だが、どの型も必ず先頭に tree_base 型相当のメンバを持っているので、 base.code にアクセスしても大丈夫なはず。相変わらず GCC はむちゃくちゃな作りだ。

適した型でダンプ

  • code が SSA_NAME だとしたら、tree_ssa_name 型の ssa_name を見れば良い。code と名前がほぼ一致しているから、わかるはず。

やや特殊なもの

  • 関数名や変数名を見たいとき。
    • code が FUNCTION_DECL or VAR_DECL の場合、decl_minimal.name を見る。
    • IDENTIFIER_NODE になっているはずなので、identifier.id.str を見ると名前がわかる。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-03-25 (木) 18:00:01 (217d)