タグ付けされた質問 「llvm」

LLVMプロジェクトは、モジュール式で再利用可能なコンパイラーおよびツールチェーンテクノロジーのコレクションです。llvmタグは主に、LLVMライブラリとインターフェイスするC ++コード(またはCバインディングを介した別の言語)を作成するためのものであり、内部にLLVMを備えた(増え続ける)ツールに関するものではありません。LLVMによって生成されたマシンコードに関する質問については、 `llvm-codegen`タグを参照してください。

5
C ++標準では、初期化されていないブールがプログラムをクラッシュさせることを許可していますか?
C ++の「未定義の動作」により、コンパイラーが必要なことをほとんど実行できることがわかっています。しかし、コードが十分に安全であると思っていたので、驚いたクラッシュがありました。 この場合、実際の問題は、特定のコンパイラを使用する特定のプラットフォームでのみ、最適化が有効になっている場合にのみ発生しました。 問題を再現し、それを最大限に簡略化するために、いくつかのことを試みました。Serializeこれはと呼ばれる関数の抜粋です。これはboolパラメータを取り、文字列trueまたはfalse既存の宛先バッファにコピーします。 この関数はコードレビューに含まれますか?実際には、ブールパラメーターが初期化されていない値である場合にクラッシュする可能性があることを伝える方法はありませんか? // Zero-filled global buffer of 16 characters char destBuffer[16]; void Serialize(bool boolValue) { // Determine which string to print based on boolValue const char* whichString = boolValue ? "true" : "false"; // Compute the length of the string we selected const size_t len = strlen(whichString); …

6
LLVMとは正確には何ですか?
私はいつもLLVMについて聞いています。それはPerlにあり、それからHaskellにあります、そして誰か他の言語でそれを使用していますか?それは何ですか?
464 llvm 

9
CMakeを使用してGCCとClang / LLVMを切り替える
CMakeを使用してビルドしたプロジェクトがいくつかあり、GCCとClang / LLVMのどちらを使用してコンパイルするかを簡単に切り替えられるようにしたいと考えています。Clangを使用するには、次のように設定する必要があると思います(間違えた場合は修正してください)。 SET (CMAKE_C_COMPILER "/usr/bin/clang") SET (CMAKE_C_FLAGS "-Wall -std=c99") SET (CMAKE_C_FLAGS_DEBUG "-g") SET (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") SET (CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG") SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") SET (CMAKE_CXX_COMPILER "/usr/bin/clang++") SET (CMAKE_CXX_FLAGS "-Wall") SET (CMAKE_CXX_FLAGS_DEBUG "-g") SET (CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") SET (CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG") SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") SET (CMAKE_AR "/usr/bin/llvm-ar") SET …
269 cmake  llvm  clang 

1
Android / ARMターゲットのDelphi XExコード生成に影響を与える方法は?
2017-05-17を更新。私はこの質問の元となった会社で働いていないため、Delphi XExにアクセスできません。私がそこにいる間、問題はFPC + GCC(Pascal + C)の混合に移行することで解決されました。NEON組み込み関数は、それが違いを生むいくつかのルーチンに使用します。(FPC + GCCは、標準ツール、特にValgrindの使用を可能にするため、強く推奨されます。)信頼できる例を使用して、Delphi XExから最適化されたARMコードを実際に生成できる方法を誰かが示すことができる場合、私は答えを受け入れます。 EmbarcaderoのDelphiコンパイラはLLVMバックエンドを使用して、Androidデバイス用のネイティブARMコードを生成します。Androidアプリケーションにコンパイルする必要があるPascalコードが大量にあり、Delphiでより効率的なコードを生成する方法を知りたいです。現在、私は自動SIMD最適化のような高度な機能についてさえ話していません。合理的なコードを生成することについてだけです。確かに、パラメーターをLLVM側に渡す方法、または何らかの方法で結果に影響を与える方法が必要ですか?通常、どのコンパイラにもコードのコンパイルと最適化に影響を与える多くのオプションがありますが、DelphiのARMターゲットは単に「最適化のオン/オフ」であり、それだけです。 LLVMは適度にタイトで実用的なコードを生成できるはずですが、Delphiはその機能を奇妙な方法で使用しているようです。Delphiはスタックを非常に多用したいと考えており、通常、プロセッサのレジスタr0〜r3を一時変数としてのみ使用します。おそらく最もクレイジーなのは、通常の32ビット整数を4つの1バイトのロード操作としてロードすることです。Delphiがより優れたARMコードを生成するようにするにはどうすればよいですか? 最初は、バイトごとの読み込みはビッグエンディアンからバイト順を交換するためのものだと思っていましたが、そうではありません。実際には、32ビットの数値を4つのシングルバイトの読み込みで読み込むだけです。*アライメントされていないワードサイズのメモリロードを行わずに、32ビット全体。(それを避けるべきかどうかは別のことであり、コンパイラのバグであることを示唆しています)* この簡単な関数を見てみましょう: function ReadInteger(APInteger : PInteger) : Integer; begin Result := APInteger^; end; 最適化がオンになっていても、アップデートパック1を適用したDelphi XE7とXE6は、その関数に対して次のARMアセンブリコードを生成します。 Disassembly of section .text._ZN16Uarmcodetestform11ReadIntegerEPi: 00000000 <_ZN16Uarmcodetestform11ReadIntegerEPi>: 0: b580 push {r7, lr} 2: 466f mov r7, sp 4: b083 sub sp, #12 6: 9002 str …

5
Clangをllvm IRにコンパイルする方法
clang でバイナリ実行可能ファイルではなくバイトC/C++コードにLLVMコードをコンパイルしてほしい。どうすればそれを達成できますか?そして、LLVMバイトコードを取得した場合、それをバイナリ実行可能ファイルにさらにコンパイルするにはどうすればよいでしょうか。 基本的にLLVM、バイナリ実行可能ファイルにコンパイルする前に、独自のコードの一部をバイトコードに追加します。
150 c  llvm  clang 

3
OS XでのLLVMとclang
OS Xのllvm、clang、gccについて質問があります。 llvm-gcc 4.2、llvm 2.0、clangの違いは何ですか?私はそれらすべてがllvmに基づいていることを知っていますが、それらはどのように違うのですか? 高速なコンパイルに加えて、gccに対するllvmの利点は何ですか?
133 c++  c  gcc  llvm  clang 

4
WebAssembly(Wasm)にコンパイルできる言語は何ですか?
WebAssembly(Wasm)にコンパイルできる言語は何ですか? 現在、C、C ++、およびRust(実験的)は、Java、Swift、C#などの言語が現在サポートされていないが、将来の開発の候補になる可能性があるllvmコンパイラバックエンドを使用して、WebAssemblyにコンパイルできると思います。 JavaScriptをWasmにコンパイルできるとは思いません。 https://github.com/WebAssembly/design/issues/219

2
clangによるコード補完の高速化
clangのコード補完メカニズムを使用しながら、コード補完の潜在的なスピードアップを調査しています。以下に説明するフローは、rtagsで見つけたものです、Anders Bakkenによるでです。 翻訳単位は、変更を監視するデーモンによって解析されます。これは、呼び出されたclang_parseTranslationUnit関数と関連する関数(reparse*、dispose*)によって行われます。ユーザーがソースファイルの特定の行と列で完了を要求すると、デーモンは、最後に保存されたバージョンのソースファイルと現在のソースファイルのキャッシュされた変換単位をに渡しますclang_codeCompleteAt。(Clang CodeComplete docs)。 clang_parseTranslationUnit(CompletionThread :: process、行271から)に渡されるフラグはCXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodesです。clang_codeCompleteAt(CompletionThread :: process、行305から)に渡されるフラグはCXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatternsです。 への呼び出しclang_codeCompleteAtは非常に遅くなります。完了場所が正当なメンバーアクセスコードである場合でも、完了を取得するのに約3〜5秒かかりますclang_codeCompleteAt。これは、のドキュメントで言及されている使用目的のサブセットです。これはIDEのコード補完標準では遅すぎるようです。これをスピードアップする方法はありますか?

8
clang:サポートされているターゲットアーキテクチャを一覧表示する方法は?
現在、ARM全般、特にiphone / androidターゲットに興味があります。しかし、私はclangについてもっと知りたいと思っています。これは、今後何年かで重要な役割を果たすと感じているからです。 私は試した clang -cc1 --help|grep -i list clang -cc1 --help|grep arch|grep -v search clang -cc1 --help|grep target -triple <value> Specify target triple (e.g. i686-apple-darwin9) clangに-tripletパラメータがあることを知っていますが、可能なすべての値をリストするにはどうすればよいですか?クロスコンパイルに関してclangはgccと非常に異なることがわかりました。GCCの世界では、PLATFORM_makeまたはPLATFORM_ld(i * 86-pc-cygwin i * 86-*-linux-gnuなど)のようにすべてに個別のバイナリが必要です。http ://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS) clangの世界では、これは1つのバイナリのみです(私がいくつかのフォーラムで読んだように)。しかし、サポートされているターゲットのリストを取得するにはどうすればよいですか?そして、私のターゲットが私のディストリビューション(linux / windows / macos / whatever)でサポートされていない場合、どのようにしてより多くのプラットフォームをサポートするものを入手できますか? 私がこのようなSVNの最新のClangの場合: svn co http://llvm.org/svn/llvm-project/cfe/trunk clang ほとんどのプラットフォームを入手できますか?Clangはクロスコンパイルを考慮してすぐに構築されていないように見えますが、llvmベースであるため、理論的には非常にクロスフレンドリーなはずです。ありがとうございました!
95 clang  llvm 

13
Windows用LLVM C ++ IDE
最近のXcodeと同じように、LLVMコンパイラー(およびClang C / C ++アナライザー)と統合されたWindows用のC / C ++ IDEはありますか? Dev-Cpp(古いGCCを使用)とCode :: Blocks(一部のGCCを使用)があります。しかし、GCCは非常に不可解なエラーメッセージを表示します。Clangのフロントエンドからさらにユーザーフレンドリーなエラーメッセージを取得したいのですが。 はい、Clangは複雑なC ++コードでは使用できませんでしたが、トランクClangはすでにLLVM自体をコンパイルできます。だから、開発中のベータ版のLLVM IDEはあるのだろうか。 はい、ClangをGCC互換IDEの他のコンパイラとして使用できます。しかし、Clangと統合されているIDEはありますか?Clangでは出力形式が異なるため、IDEで解析する必要があります。Clangは、ソースのIDE解析を提供できます。Clangには分析オプションがあり、IDEでサポートする必要があります。見てください、例えばhttp://iosdevelopertips.com/xcode/static-code-analysis-clang-and-xcode-3-2.html そして、Clangの最も望ましい機能-スマートなオートコンプリートなので、IDEは構文的に正しいバリアントのみを提案できます。たとえば、この構造体、クラスのフィールドのみをリストします。 結果:(回答からマージ): Petri TuononenのCDT> = 8およびhttps://code.google.com/archive/p/llvm4eclipsecdt/プラグインを使用したEclipse(スマート自動補完なし) LLVMプロジェクトからのvimrcを使用したVim(スマートコンプリートのみ?)https://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/ Emacs(スマート補完のみ?)https://llvm.org/svn/llvm-project/cfe/trunk/utils/clang-completion-mode.el Qtクリエイター:https : //blog.qt.io/blog/2011/10/19/qt-creator-and-clang/ CodeLite:http : //www.codelite.org/LiteEditor/ClangIntegration35
92 c++  windows  ide  llvm  clang 

4
紛らわしいテンプレートエラー
私はしばらくclangで遊んでいましたが、テンプレートエラーから回復するためのヒントを提供するはずの「test / SemaTemplate /dependent-template-recover.cpp」(clangディストリビューション内)に出くわしました。 全体を簡単に最小限の例にまとめることができます。 template<typename T, typename U, int N> struct X { void f(T* t) { // expected-error{{use 'template' keyword to treat 'f0' as a dependent template name}} t->f0<U>(); } }; clangによって生成されたエラーメッセージ: tpl.cpp:6:13: error: use 'template' keyword to treat 'f0' as a dependent template name t->f0<U>(); ^ template …
91 c++  templates  llvm  clang 

2
PHI命令の正確な機能とLLVMでの使用方法
LLVMには非常に奇妙な説明のあるファイ命令があります: 'phi'命令は、関数を表すSSAグラフにφノードを実装するために使用されます。 通常、分岐を実装するために使用されます。私が正しく理解していれば、依存関係の分析を可能にする必要があり、場合によっては不要な読み込みを回避するのに役立つ可能性があります。しかし、それが正確に何をするのかを理解するのはまだ難しいです。 万華鏡の例は、ifケースとしてはかなりうまく説明しています。ただし&&、やのような論理演算を実装する方法はそれほど明確ではありません||。オンラインのllvmコンパイラに次のように入力すると: void main1(bool r, bool y) { bool l = y || r; } 最後の数行は私を完全に混乱させます: ; <label>:10 ; preds = %7, %0 %11 = phi i1 [ true, %0 ], [ %9, %7 ] %12 = zext i1 %11 to i8 phiノードが使用できる結果を生成するように見えます。そして、ファイノードはどのパスから値が来るかを定義するだけだという印象を受けました。 誰かがPhiノードとは何か、そしてそれを||使って実装する方法を説明できますか?
87 llvm 

3
なぜLLVMは冗長変数を割り当てるのですか?
列挙型の定義とmain関数を含む簡単なCファイルを次に示します。 enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } 次のLLVM IRに転送されます。 define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 0, i32* %1, align 4 store i32 2, i32* …
9 c  llvm  llvm-codegen 

2
LLVMのExpected <T>がExpected <T> &&の2つのコンストラクターを実装するのはなぜですか?
Expected&lt;T&gt;llvm / Support / Error.hに実装されています。a Tまたはのいずれかを保持するタグ付きユニオンErrorです。 Expected&lt;T&gt;タイプのテンプレートクラスTです: template &lt;class T&gt; class LLVM_NODISCARD Expected しかし、これらの2つのコンストラクターは本当に私を混乱させます: /// Move construct an Expected&lt;T&gt; value from an Expected&lt;OtherT&gt;, where OtherT /// must be convertible to T. template &lt;class OtherT&gt; Expected(Expected&lt;OtherT&gt; &amp;&amp;Other, typename std::enable_if&lt;std::is_convertible&lt;OtherT, T&gt;::value&gt;::type * = nullptr) { moveConstruct(std::move(Other)); } /// Move construct an Expected&lt;T&gt; …
8 c++  llvm 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.