5

ローカル最適化コンパイラの手法について調べてきましたが、それらがどのように実装されているかわかりません。アイデアは、オプティマイザがコードの「ウィンドウ」を毎回見て、どういうわけかパターンを検出し、それらをより最適化されたバージョンに置き換えるというものです。

私の質問は、これらのパターンをどのように発見するのですか? (あなたのプラットフォームが、Schocken's Hack のような、組み立てられたコンピューターのアセンブリ コードを出力する VM であるとしましょう)。

人々は実際に手動で (制御フロー グラフや DAG などを使用して) コードを検査し、識別されたすべてのパターンを収集してオプティマイザにコーディングしますか? または、自動的な方法があります。

たとえば、最適化するコードをアナライザーにフィードすると、前述のパターンが吐き出されます。もしそうなら、どうやって書き始めることができますか?

4

2 に答える 2

3

古典的なのぞき穴の最適化は、強度の低下やその他の名前に関するものではありません. たとえば、2〜3個の命令シーケンスです

BRANCH FALSE $1
BRANCH $2
$1:

に減らすことができます

BRANCH TRUE $2

このようなシーケンスは、私が取り組んだいくつかの COBOL コンパイラなど、AST を生成しないシングルパス コンパイラに付属する単純なコード ジェネレータで発生する可能性があります。

于 2012-08-05T21:44:35.723 に答える
1

独自のアナライザーを作成するか、既存のアナライザーを使用するかは、ユーザー次第です。どちらの場合でも、アナライザーはコードが最適化されなくなるまでコードをチェックし続けます。GCCの例を挙げると、最適化のための特定のパスがあります。プログラムの中間コードがこれらのパスに与えられ、次々に実行されてコードが最適化されます。また、どのパスも複数回実行できます。
これらの最適化の書き方を本当に知りたい場合は、 GCCのpass.hファイルを調べてください。

于 2012-08-06T01:22:26.350 に答える