問題タブ [llc]

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 に答える
10790 参照

windows - Windows の clang/llvm が Visual Studio の Link.exe を必要とするのはなぜですか?

LLVM の Getting Started (Windows) サイトによると:

... Clang を使用して、ビットコードを出力したり、オブジェクト ファイルを直接出力したり、Visual Studio の link.exe を使用してリンクされた実行可能ファイルを出力したりできます。

Link.exeWindowsで を使用する必要があるのはなぜですか? さらに言えば、Mac/Linux では何が使われているのでしょうか? さらに下には次のように書かれています。

LLC がその最後のステップを実行できないのはなぜですか? LLI は問題なく動作しているように見えるので、内部でlink.exe何らかの形で相互運用できると思います - なぜ LLC ができないのでしょうか?

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

compilation - @llvm.dbg.declare のメタデータを定義するには?

@llvm.dbg.declare を使用して、llvm コード内の変数に関する情報を取得しようとしています。次のコードを使用します。

llc file.ll を使用してコンパイルすると、次のエラーが発生します。

llvm コード内のメタデータの定義に問題があるのか​​、コンパイル時にいくつかのパラメーターを指定する必要があるのか​​ わかりません。

ご協力いただきありがとうございます

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

compiler-construction - LLVM のコード ジェネレーターによって実行される望ましくない定数の折りたたみを回避するにはどうすればよいですか?

私が達成しようとしているのは、以下の100000000定数などの一部の定数 (コード内のアドレスを表す) の定数の折りたたみを避けることです。これが必要なのは、後で JIT コンパイルされたコードにパッチが適用され、オブジェクトの再配置によって定数が変更される可能性があるためです。

以下のコードは、(何としてでも) 定数の折りたたみを回避するための最善の努力です。うまくいきません。100011111命令ストリームで定数になってしまいます。

llc -O0 code.ll -print-after-allExpand ISel Pseudo-instructions折りたたみがパスで発生することを明らかにします。

私の問題は、codegen レベルで simple に展開される組み込み関数を追加することで解決できることを認識していますmovabs reg, imm64。ですが、当面の間、一時的な解決策を講じたいと思います。

質問: llvm で定数が折り畳まれない不透明な定数を作成することは可能ですか?

私のllvmバージョンは3.7.0svnです。

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

clang - clang から llc に渡される引数は何ですか?

私はllvmプロジェクトに取り組んでいます。最近、次のコマンドを使用して、clang コマンド ラインを使用して .c ファイルの 1 つを .s ファイルにコンパイルしようとしました。

スタックのバックトレースを使用して ARCHInstrInfo::storeRegToStackSlot 関数のバックエンドでクラッシュしました。ただし、段階的に実行しようとしたとき:

成功しました!! (?) clang がバックエンド (llc) をどのように呼び出しているかを確認するにはどうすればよいですか? -vフラグを付けてclangを実行しようとしましたが、バックエンドへの呼び出し方法が出力されませんでした...

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

compiler-construction - 現在のバージョンで、IR コードを介して LLVM API コードを生成する方法は?

フィードされた IR コードを再生成できる LLVM API コードを生成しようとしています。この質問などのさまざまな質問を介して発見したように、ある時点で、この目標を達成するために次のことを行うことが可能でした:

ただし、次のエラーが表示されます: llc: エラー: ターゲット 'cpp' が無効です。さらに調査したところ、バージョン 3.1 で c バックエンドが削除されたときに、以前のバージョンの LLVM で同じ問題が発生したことがわかりました。ただし、私はcppを使用しています。これにより、何らかの理由で私のバージョンのllvmにcppバックエンドが存在しないと思われます。

ここから本当に知りたいのは、これまでの分析が正しい場合、cpp バックエンドを有効にする方法、または llc を希望どおりに使用できる状態にする方法です。もちろん、私が間違っていたり、別の方法がある場合は、それを受け入れます。

使用するために選択したバージョンは LLVM 3.6 です。これは、OS X で brew を介してインストールされました。よろしくお願いします。

編集:この質問は、おそらく同様の質問として指摘されています。ただし、その質問は LLVM 3.2 の特定のコンテキストで行われました。私の質問はバージョン 3.6 の現在の状況に関するものであり、現時点で実際の解決策がある可能性があるためです。その質問に対する唯一の答えは、一般的な外部リソースを指しており、実際の解決策が何であるかを十分に説明していません。