問題タブ [llvm-ir]

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 投票する
2 に答える
242 参照

llvm - 配列を使用する場合の Julia llvm 関数シグネチャ

julia コンパイラが ( を使用してcode_llvm) 生成する LLVM IR を見ると、引数として配列を使用すると、関数のシグネチャに奇妙な点があることに気付きました。例を挙げましょう:

(これは役に立たない例ですが、結果は他の関数と同じです。この例の結果の IR は雑然としていません)

を使用するcode_llvm(test, (Int,Int,Int))と、次の出力が得られます。

を使用code_llvm(test, (Array{Int},Array{Int},Array{Int}))すると、(少なくとも私にとっては)予期しない結果が得られます。

llvm 関数の署名が 3 つの変数をリストしているだけではないのはなぜi64*ですか? voidそして、関数がもう返されないのはなぜですか?

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

llvm - llvm IR で 1 つの定義の使用を他の定義に置き換える

私は次のIRを持っています:

これは本質的に

さて、コピーの伝播後、次のようなものが必要です:

だから、私はこれを行います:

これを行うと、上記の IR の無限ループに入ります。したがって、op1 の使用から i を削除し、op2 の使用に i を追加することには問題があると感じています。ただし、コードは次のような場合は正常に実行されます。

変換後、次のようになります。a=b; c=b;

0 投票する
2 に答える
873 参照

llvm - LLVM IR で float と double を区別する

さらに分析するために、LLVM IR から定数を抽出しようとしています。これまでのところ、適切な方法を使用して int、float、および double を抽出できました。

APF クラスのメソッドから値を取得しようとする前に、どのように float と double を区別できますか。convertToFloat()適切なチェックがなければ、 double またはconvertToDouble()float で呼び出したときにアサートをトリガーしてしまいます。値を取得しようとする前に、LLVM にデータ型を区別する間接的なメカニズムはありますか?

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

c++ - replacealluseswith が機能しない

SWL は、ストア アドレスをキーとして、定数を対応する値として持つマップです。ただし、このストアがロードで使用されていることを確認すると、ストア命令の使用を定数に置き換えようとします。そうしても、命令は置き換えられません。このパスを実行した後、バイト コードに変化はありません。

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

gcc - 静的解析における中間表現 (IR) メモリ管理

私が知りたいのは、インタープロシージャル データ フロー分析中の IR のメモリ管理における現在の最新技術です。分析中に完全なコードの IR がメモリに存在するか、または任意の時点で IR をロードおよびアンロードするためにいくつかのメモリ管理手法が適用されるかを知りたいです。llvm/gcc インフラストラクチャのコンテキストでは、分析を何百万行ものコードにスケーリングする方法を教えてください。

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

llvm - コンパイル時定数を LLVM 組み込みに

コンパイル時の定数があり、引数を介して組み込みに渡す必要があります。

残念ながら、インライン asm は文字列リテラルのみを処理することを知っています。これを達成できる他の方法はありますか?

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

llvm - LLVM でのグローバル定義の追跡

LLVM IR で特定の変数に値が割り当てられる命令のリストを手動で作成しようとしています。

関数内のローカル変数の場合、命令反復子を使用して特定の命令のオペランドをチェックすることにより、正しい命令セットを簡単に取得できます。グローバル変数に関連付けられたストア命令がないため、このアプローチはグローバル変数に対しては機能しないようです。

メタデータ フィールドを見ずにグローバル変数が定義されている場所を追跡する方法はありますか? そうでない場合、グローバル変数の初期定義用の特別なマーカーとして扱うことができるダミー命令を作成する方法はありますか?

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

types - LLVM 任意精度整数

LLVM言語リファレンスには、

整数型は、必要な整数型の任意のビット幅を指定するだけの非常に単純な型です。1 ビットから 2 23 -1 (約 800 万) までの任意のビット幅を指定できます。

これは、任意の固定長整数を無料で使用できるということですか? つまり、i100 を宣言すると、100 ビット幅の変数を持つことになりますか?