14

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

このために、私は最初に、GIMPLE形式のコードを生成してファイルに保存する方法を知る必要があります。だから私はいくつかのドキュメントと例を探しています。また、誰かがそのようなことを扱ったことがある場合、中間コードにコードを挿入するというこのタスクの複雑さを知ることができますか?

4

3 に答える 3

18

GCCのプラグインを作成する方が簡単な場合があります。これにより、GIMPLE生成をフックして、GCC内で変更できます。これにより、保存、編集、GIMPLEフォームからのコンパイルのダウンタイムが短縮されます。MELTはそのようなプラグインの1つです(ただし、低レベルの表現を変更するだけではありません)GIMPLE変更プラグインに関する素晴らしいPDFもここにあります。

それ以外の場合は、 GCCのGIMPLEがどのように機能するかについての情報をここで確認できます。GIMPLEをダンプすることに関して:

フラグ-fdump-tree-gimpleを使用して、GIMPLEフォームのCのような表現をダンプするように要求できます。

于 2012-02-01T17:01:39.753 に答える
12

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

プラグインを作成したい場合は、パスがGCCでどのように機能するかに興味があるかもしれません。次の形式のフラグを使用して、各パスの出力を確認できます。

-fdump-<ir>-<passname>

どこにあるir可能性があります:

  • tree:GIMPLEの手順内パス
  • ipa:GIMPLEの手続き間パス
  • rtl:RTLの手順内パス

<passname> = allすべてのダンプを表示するために使用します。例: -fdump-ipa-all

于 2012-07-13T12:23:05.510 に答える
1

旗を試してみました-fdump-tree-gimple。これはC/C ++言語でのみ機能し、Java、Ada、Fortran、Objective-Cなどの他の言語では機能しません。

于 2012-09-18T18:12:40.623 に答える