問題タブ [ssa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1050 参照

llvm - 可能な先行ノードが 1 つしかない LLVM IR phi ノード

可能な前任者が 1 つしかない場合に phi ノードを使用する利点は何ですか? たとえば、 を実行するopt -loop-<some specific pass> some-cool-file.ll -Sと、まだ先行ノードを追加していない場合、出力には、可能性のある先行ノードが 1 つしかない phi ノードが含まれることがよくあります。

例:

可能な前任者が1つしかない場合、上記は次とまったく同じであってはなりません

誤解しないでほしいのですが、私は phi ノードの大ファンですが、可能性のある前任者が 1 つしかない場合に phi ノードを追加するときに、読みやすさと警告の改善以外に他の利点があるかどうかに興味がありました。

0 投票する
0 に答える
660 参照

compiler-construction - SSA 形式で LLVM-IR を取得する

私は現在、静的コード アナライザーを構築しており、Clang、llvm を使用したいと考えていました。私が出力として欲しかったのは、ACコードを入力として与えるときのSSA形式のLLVM-IRです(テキストファイルとして)。このページ( clang を llvm IR にコンパイルする方法) のページを見つけたので、LLVM-IR を取得しました。LLVM のリファレンス ページには、「LLVM は Static Single Assignment (SSA) ベースの表現であり、.. ." . なので、もうSSA形式かと思っていたのですが、アウトプットを調べてみると、こんな感じでした。

これは、以下の if ステートメントを表しています。

しかし、私の知る限り、SSA 形式の場合、同じレジスタを 2 回割り当てるべきではありません。これはSSA形式ではないと思いますか? または私は何かを逃していますか?

とにかく、これは私が探していた SSA 形式ではないと仮定して、mem2reg 最適化を使用する必要があることを検索して発見しました。しかし、上記のコードはすでにレジスタ形式になっていると思いますが、とにかく、以下の 2 つのコマンドを実行すると、

clang-3.6 -emit-llvm -o foo.bc -c foo.cl opt -mem2reg -dce foo.bc

2 番目のコマンドでは、セグメンテーション エラーが発生します。だから私はここで立ち往生しているので、誰か私が何か間違ったことをしたか、SSA-Form IR を生成する方法を教えてもらえますか?

0 投票する
1 に答える
203 参照

pointers - ポインターを使用する関数の SSA の生成

この論文で説明されているアルゴリズムを使用して、命令型プログラミング言語を管理標準形式 (ANF) に変換しようとしています: http://www.sciencedirect.com/science/article/pii/S1571066105825964

論文では、ザダルノフスキーら。SSA プログラムを ANF 形式に変換するアルゴリズムを説明してから、現在は興味のない最適化アルゴリズムを提示します。

問題は、ポインター変数を SSA 形式に変換するにはどうすればよいかということです。

0 投票する
1 に答える
2622 参照

compiler-construction - AST を SSA に変換できますか、それとも CFG に変換してから SSA に変換する必要がありますか?

抽象構文ツリーを SSA フォームに直接変換できますか?それとも、制御フロー グラフを作成してから、CFG から静的単一割り当てフォームを作成する必要がありますか?

制御フロー グラフのコンテキストでは、これを C ライクなプログラムでどのように表現すればよいでしょうか。すべての関数のすべての基本ブロックの CFG のグラフを保存できると考えていますが、たとえば関数を呼び出すと、事態が複雑になる可能性があります。私が考えることができる別の方法は、プログラム全体、つまりすべてのソースファイルの CFG ですが、関数に関する情報をどのように保存すればよいでしょうか? 関数へのポインターを基本ブロック (つまり、親ノード) に格納できますか?

CFG から SSA を生成する場合、ステートメントの制御フローを表す CFG について心配する必要はありますか? 基本的なブロック制御フローを表すだけでよいと考えています。

0 投票する
1 に答える
94 参照

graph - SSA 形式のレジスタ割り当てのベンチマーク

弦グラフにグラフの色付けをしたいです。私の作品をテーマと比較するには、弦グラフとその結果が必要です。誰でも私を助けることができますか?例えば

これは、CPU2000 ベンチマーク スイートの一部です。これは、個々のベンチマークのソース コードに加えて、ベンチマークを実行するツールのコンパイル済みバイナリと、バイナリが提供されていないプラットフォームのツール ソース コードです。そのグラフだけが必要で、テーマの 1 つで十分です。

ありがとう