問題タブ [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 投票する
1 に答える
417 参照

llvm - LLVM のベクトル加算プログラム

LLVM で 5 要素のベクトル加算プログラムを作成しようとしていますが、結果のベクトル全体を返す方法がわかりません。私のコードは以下で、エラーは

LLVM エラー: main() の戻り値の型が無効です

0 投票する
3 に答える
1029 参照

llvm - llvm 変換パスによって行われた変更を確認する方法

Cプログラムで変換パス(デッドコードの削除など)によって行われた変更を確認する方法。ターミナルで次のコマンドを実行すると、IRを確認できる.bcファイルが作成されます。しかし、Cプログラムで -dce によって行われた変更を確認する方法。コマンド: $opt in.bc -o out.bc -dce

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

c++ - LLVMは構造値からi8 *を抽出します

バックエンドとして LLVM を使用してコンパイラを作成しています。フロントエンド (パーサーなど) を作成しましたが、今は岐路に立っています。

単一のフィールド、i8* 値、文字配列へのポインターを含む構造体 (%Primitive) があります。

コンパイラでは、 のインスタンスがPrimitiveスタック上で渡されます。関数を使用してこの文字配列を標準出力に書き込もうとしていputsますが、期待どおりには機能しません。

(ExecutionEngine または LLVM インタープリター プログラムを使用してlli) コードを実行しようとすると、同じエラーが発生します。セグメンテーション違反。

エラーは、渡されたアドレスputsが何らかの形で配列の最初の文字の ASCII 文字コードであるという事実にあります。渡されたアドレスは、8 ビット文字の配列へのポインターではなく、逆参照された文字列に等しい 8 ビット幅のポインターであるようです。

たとえば、 i8* メンバーが stringを@WritePrimitive指すプリミティブで呼び出すと、文字列アドレスが である が呼び出されます。"hello"puts0x68

何か案は?

ありがとう

編集:あなたは正しかった、私はPrimitive間違って初期化していました、私の新しい初期化関数は次のとおりです:

私はそれを逃しました、ありがとう!

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

optimization - 「clang」は一般的な部分式の削除を実行しますか?

opencl カーネルを llvm IR にコンパイルしようとしました。

以下の指示で

/home/mypass/llvm/Debug+Asserts/bin/clang -I/home/ian031545/libclc/generic/include -include clc/clc.h -Dcl_clang_storage_class_specifiers -target nvptx--nvidiacl -Xclang -mlink-bitcode-file - Xclang /ian031545/libclc/nvptx--nvidiacl/lib/builtins.bc -S -emit-llvm kernel.cl -o kernel.ll

openclカーネルの構造は次のようになります

そして、上記の命令を使用した後のllvm IRは次のようになります

なぜclangがここでこの種の最適化を行うのか知っている人はいますか? (フロントエンドと言います)

それとも一種の最適化ではないのでしょうか?

なぜclangがここでこれを行うのか、何の目的でわからないのですか?

上記の命令にフラグを追加して、これを行わないようにclangに依頼できますか?

前もって感謝します

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

gcc - DragonEgg は gcc で利用可能な最適化パスを実行して、llvm IR を生成できますか?

任意のコードで gcc 最適化パスを実行し、最終的に llvm IR を取得することは可能ですか? gcc で利用できるデッド ストアの削除を使用したい。llvm にもこのパスがあることは承知していますが、gcc ほど高度ではありません。

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

llvm - badref とはどういう意味ですか?

そのIRラインはどういう意味ですか

新しい関数を定義してファイルに書き込むため