SSA への変換とは? わかりやすく解説

SSA への変換

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/05/08 08:22 UTC 版)

静的単一代入」の記事における「SSA への変換」の解説

ツリー上のコードSSA 形式への変換は、代入対象新たな変数置き換え変数使用箇所をその定義箇所到達するバージョン付き」のものに置き換えるだけの基本的に簡潔な問題である。例として、下記のような制御フローグラフ考える。 "x ← {\displaystyle \leftarrow } x - 3" の左辺の名前を変えそれ以降 x を新たな前に変えることができ、それでもプログラムは全く同じ動作をする。このことを利用してSSA ではそれぞれに対して一度しか代入が行われない新たな二つ変数x1 と x2 を作成する同様に全ての変数に対してバージョン区別するための添え字与える。 ここで、各々変数使用している箇所がどの定義を参照しているかをただ一点除いて把握している。最後ブロックの y は制御フローのどちらを通るかによって y1 と y2のどちらを参照するかが異なる。ではこれをどのようにして知るのか? その答えは、Φ (ファイ) 関数呼ばれる特別な命令最後ブロック始め追加することである。この命令は、どちらの制御フローから到達したのかによって y1 あるいは y2 を選択し y の新たな定義 y3 を生成する。 これにより、最後ブロックの y は y3 を用いることができ、いずれの場合でも正し値を得ることができる。x についても Φ 関数追加する必要があるか?という質問があるかもしれないが、答えは「不要」である。x のバージョンは x2 のみがこの箇所到達しており、問題にはならない。 より一般的な質問として、任意の制御フロー与えられたとき、どこに、またどの変数に対して Φ 関数挿入するべきか、という問題がある。これは難し質問であるが、支配辺境(dominance frontier) と呼ばれる概念用いて求め優れた方法がある。 ここで、Φ 関数実際に実装されるものではなくコンパイラに対して Φ 関数グループとされる全ての変数の値をメモリレジスタの同じ場所に配置するよう指示するマーカーである。

※この「SSA への変換」の解説は、「静的単一代入」の解説の一部です。
「SSA への変換」を含む「静的単一代入」の記事については、「静的単一代入」の概要を参照ください。

ウィキペディア小見出し辞書の「SSA への変換」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「SSA への変換」の関連用語

SSA への変換のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



SSA への変換のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの静的単一代入 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS