2011-12-14 10 views
2

グループプロジェクトの一環として、私は簡略化された言語のコンパイラを作成しています。オプションの機能の1つとして、私は、コードゲンの出力インテルアセンブリコードを調べて最適化するために、ピープルオプティマイザを追加すると考えました。java peephole optimization初心者コンパイラ

私たちのコンパイラはjavaで行われています。これまでに学んだJavaを使ってこのピープルオプティマイザを作成するのはたくさんの作業になるようです。パターンマッチングの文字列がJavaの良いアプローチのようには聞こえないので、これを可能にするために使用するべきツールがありますか?

おかげ

+0

'gcc 'にオプティマイザを使用する方が効率的でしょうか?例えば、codegenでGENERICを生成させ、gccでアセンブリ…? – BRFennPocock

答えて

3

ピープホール最適化は、パースツリーのバイナリ表現ではなく、アセンブラへの入力として意図されたテキスト上で行われるべきです。

2

I 間違いなくは文字列を使用しません。 lex/yaccを見て、アセンブリのASTを生成してからASTで最適化を実行し、アセンブリをもう一度書き出すことができます。あなたはこれがハードのこと、右か? :-)

3

あなたのコンパイラの設計を見ずには言い難いですが、通常はコードを生成し、それを放出する中間段階になります。たとえば、コード生成フェーズの出力を、たとえば次のように考えることができます。命令のリンクされたリストであり、各命令オブジェクトは命令の種類、引数、ラベル/分岐先などを格納する。次に、各パターンは現在のノードとその直後の子孫を検査し(例えばif (curr.isMov() && curr.next.isPush() && ...))、それに応じてリストを変更します。そして、あなたのピープル・オプティマイザはcodegen出力から開始し、各パターンを実行します。