2

抽象構文ツリー式を SSA 基本ブロックに変換するには、式内のすべての操作を線形シーケンスで書き出す必要があります。たとえば、 andをその順序でx * y + 1含む操作のリストに変換されます。*+

操作のリストに変数とリテラルのフェッチを含めるのは普通ですか? つまり、上記は長さ 2 または 5 のリストを生成する必要がありますか?

一方では、グローバル変数または定数の値をレジスタにロードすることは、最終的にスケジュールする必要がある操作です。

一方、どの値がレジスターに存在するかを決定することは、通常、SSA 形式からの変換中または変換後に行われます。

3 番目に、原子値を線形シーケンスに含めることは、すべての操作の引数を反復処理する代わりに、基本的なブロックと操作を反復処理することで、「この関数がアクセスするグローバル変数は何か」などの質問に答えることができることを意味します。

私が見逃している他の考慮事項はありますか?

明確にするために、ローカル変数名は通常、SSA では消えます (それらは必要ありません。値を生成した操作への直接ポインターを使用できます)。まだ名前が必要なものについて考えています-定数、グローバル変数名、アドレスが取得されたローカル変数など。

4

1 に答える 1