*参照元 [#x7ba8097] #backlinks *説明 [#hd7dc067] FIXME: なにをするもの? -とぴっく --解説 **参考 [#abc53b88] -RTL に関連する変数や定義を行う際に、 rtl.def と DEF_RTL_EXPR マクロを用いたお作法がある。 --[[gcc-8.3/gcc/DEF_RTL_EXPR()]] **関連モジュール [#dc5284ee] -RTL をダンプする関数 --[[gcc-8.3/gcc/rtx_writer/print_rtx()]] -RTL のデータ構造 --[[gcc-8.3/gcc/rtx_def]] -RTL の定義 --[[gcc-8.3/DEF_RTL_EXPR()]] -RTL の種類 --code メンバが保持している整数値でわかる。直接参照せず GET_CODE(rtx) を使う。 --[[gcc-8.3/gcc/GET_CODE()]] -RTL のオペランド --オペランドの中身は rtx_def.u.fld[] で参照できるが、union 型なので、整数として解釈するのか、RTX として解釈するのか、知る必要がある。 --いくつオペランドを持っているかは、RTL の定義の FORMAT を見ればわかる。 例えば insn なら format は "uuBeiie" なので、7個持っている。 ---[[gcc-8.3/gcc/rtunion]] --オペランドの型を知る方法は GET_RTX_FORMAT() にて解説している。オペランドの型の情報は rtx_format が保持している。 ---[[gcc-8.3/gcc/GET_RTX_FORMAT()]] ---[[gcc-8.3/gcc/rtx_format(global)]] ** insn 関連 [#dcb1eff4] -insn の UID と前後の命令 --insn は UID という通し番号を持っている。参照は INSN_UID() でできる。 デバッガで見るなら rtx->u2.insn_uid で参照すると早い。 --[[gcc-8.3/gcc/INSN_UID()]] --insn の format は "uuBeiie" で、最初の uu は自身の前の命令、自身の後の命令を指しているようだ。 オペランド型 'u' は RTX として解釈すれば良いようなので、 デバッガなどで rtx->u.fld[0].rt_rtx.u2.insn_uid で参照すると 1つ前の命令の UID が見える。 *コメント [#ye27b383]