2012-02-01 5 views
7

this articleによれば、gccはコードを生成する前にいくつかの中間形式を使用します。私はGIMPLE形式では3つのアドレスコードを使用していますが、これは使用するのが最も簡単な中間言語のようです。しかし、中間コードを取得して最終コードを生成する前にいくつかのコードを挿入できるツールを構築する必要があるので、もっと詳細が必要です。このためgccの中間形式で再生する

私が最初にどのように私もGIMPLE形式のコードを生成し、それをファイルに保存することができます知っている必要があります。だから私はいくつかの文書や例を探しています。また、誰かがこのようなことをしてきたのであれば、中間コードにいくつかのコードを挿入するというこの作業の複雑さを知ることはできますか?

+2

これはリンクの1つです。http://gcc.gnu.org/wiki/GimpleFrontEnd – MetallicPriest

+0

良い例がhttp://gcc.gnu.org/onlinedocs/gcc-4.3.4/gccint/GIMPLE-Example.html – MetallicPriest

+0

です。コードを生成する方法をお探しの場合は、llvmをご覧ください。少なくともそれは文書化されている方がはるかに優れています。 –

答えて

13

GCCのためにpluginを書くほうが簡単かもしれませんが、GIMPLE生成をフックしてGCC内で変更すると、GIMPLE形式からのコンパイル時の保存、編集、そしてダウンタイムがなくなります。 MELTはこのようなプラグインの1つです(ただし、下位レベルの表現を変更するだけではなく、の方法を提供しています)。 GIMPLE変更プラグインには、hereという素晴らしいPDFもあります。

そうでなければ、あなたはGCCのGIMPLEがどのように機能するかについては、hereを見ることができます。 GIMPLEを投棄の面で :

あなたはフラグ-fdumpツリー-GIMPLEとGIMPLE形式のCのような表現をダンプすることを要求することができます。

+10

私はMELTの主な開発者ですが、数日前にhttp://gcc-melt.org/GCC-MELT-HiPEAC2012.pdfに新しいチュートリアルスライドを追加しました(http://gcc-melt.org/の他のものもあります...) –

5

フラグ-fdump-tree-gimpleを使用すると、任意のファイルのGIMPLE表現を簡単に生成できます。

あなたがプラグインを作成したい場合は、GCCの仕事を渡す方法に興味があるかもしれません。あなたは、それぞれの出力は、フォームのフラグを渡す見ることができます:

irは可能性があり
-fdump-<ir>-<passname> 

  • tree:プロシージャ内ではGIMPLE
  • ipaに渡し:プロシージャー間は、GIMPLE
  • に渡しますrtl:プロシージャ内では
RTLに渡します

<passname> = allを使用して、すべてのダンプを表示します。 -fdump-ipa-all

-1

私はフラグ-fdump-tree-gimpleを試しました。 C/C++言語でのみ動作し、Java、Ada、Fortran、Objective-Cなどの言語では動作しません)

+2

質問にはタグが付けられています。他の言語は意味がありません。 – Mysticial

関連する問題