inline expansionの実装方法がわかりました。インライン展開の実装
私は楽しく教育するために自分のコンパイラを書いています。
私はたくさんの例を学ぶので、誰かが私にインライン展開を行うアルゴリズムを提供できれば、私は多くの助けになります。
私はC++で好きですが、言語は関係ありません。
私がインライン展開を行っているターゲット言語は、JavaScriptです。
編集: わかりやすくするために、私はShrinkSafeを改善する方法を探しています。
GWTはJavaScript関数をインライン化するので、可能です。 GWTはコードを実行する前にインライン展開します。
私はどのヒューリスティックを使用すべきですか? コードはどのように見えますか? 式が定数式であるかどうかを確認するにはどうすればよいですか? –
あなたは基本的に "PUSH Reg1; PUSH Reg2; POP Reg3; POP Reg1;"というような一般的なパターンを探しています - PUSH命令は呼び出し元引数の設定から残るものです。 POPはインラインプロローグからのものです。これらの4つのインは、MOV Reg2→REG3のように書き直すことができます。オプティマイザで見つかるパターンの正確な種類はもちろん、*あなたのコンパイラによって生成される命令ストリームによって決定されるので、あなたはそれについての専門家です。 – MSalters