7

LLVMのClangコンパイラの使用に興味があります。LLVMはクロスプラットフォームであると主張していますが、どのプラットフォームをターゲットにできるかは明確ではありません。私はこれについてかなり多くのグーグルを行いましたが、LLVMでサポートされているプラ​​ットフォームに関する情報はあまりないようです。私が見つけた唯一のことは、ちょっと混乱している「これ」でした。LLVMを使用してそれらのプラットフォーム用のバイナリをコンパイルできるのか、それともそれらのプラットフォームでのみ実行できるのか(または両方)はわかりません。LLVM / Clangコンパイラについて詳しく知っている人は、Clangまたは他のLLVMフロントエンドを使用してターゲットにできるプラットフォームを教えてもらえますか?特定の情報が必要です(「Windows 32ビット、Windows 64ビット、Linux 32ビット、Linux 64ビットなどをサポートしています)。ありがとうございます。

編集:

わかりました。LLVMが実際に何であるかについて私は混乱していると思います。私が今理解したことから、LLVMは単なるバイトコードインタープリターです。LLVMは解釈されるので、実行可能バイナリと比較してLLVMバイナリはどれくらい遅いですか?では、パフォーマンスが重要な場合、LLVMは正しい選択ではありませんか? 「ここ」私はそれがサポートするアーキテクチャを見つけましたが、それがサポートするオペレーティングシステムについては述べていませんでした。プラットフォームに依存するコードを回避した場合、すべてのオペレーティングシステムで実行されますか?LLVMについて詳しく説明している記事があれば、もっと探します。

4

4 に答える 4

9

llvm インストールタイプ

llc -version

そして、あなたは次のようなものを見るでしょう

  Registered Targets:
    alpha   - Alpha [experimental]
    arm     - ARM
    bfin    - Analog Devices Blackfin [experimental]
    c       - C backend
    cellspu - STI CBEA Cell SPU [experimental]
    cpp     - C++ backend
    mblaze  - MBlaze
    mips    - Mips
    mipsel  - Mipsel
    msp430  - MSP430 [experimental]
    ppc32   - PowerPC 32
    ppc64   - PowerPC 64
    ptx32   - PTX (32-bit) [Experimental]
    ptx64   - PTX (64-bit) [Experimental]
    sparc   - Sparc
    sparcv9 - Sparc V9
    systemz - SystemZ
    thumb   - Thumb
    x86     - 32-bit X86: Pentium-Pro and above
    x86-64  - 64-bit X86: EM64T and AMD64
    xcore   - XCore

github.com に移動し、mbed_samples を検索して、ARM のクロス コンパイルに使用されている llvm と clang を確認します。LLVM はどのプラットフォームでも同じように動作し、llc ステップはターゲットを選択する場所であり、コンパイル、マージ、最適化などはすべてプラットフォームに依存しません (たとえば、-m32 を使用することもできます)。 int サイズを選択する) すると、llc によってプラットフォーム依存のアセンブラーが表示されます。

于 2011-09-04T03:18:45.180 に答える
5

ターゲット マシンに関して、LLVM には多くの可能なアプリケーションがあります。

于 2011-09-06T20:35:18.380 に答える
3

clang マニュアルによると、 clangは X86 をターゲットにすることができ、Arm は PPC、SPARC、および MSP430 を部分的にサポートします。

ただし、Clang は LLVM バイトコードも生成できます。LLVM はさらに多くのプラットフォームで実行できます。

したがって、ネイティブ マシン コードが必要な場合、リストはかなり小さいものになります。LLVM バイトコードが必要な場合は、プラットフォームの選択肢が広がります。

于 2011-09-03T21:23:27.683 に答える
1

ここでは、編集者の質問にのみ回答しています (おそらく、新しい質問を作成する方が適切でしょう)。

これは、LLVM の優れたアーキテクチャ概要です。このページには、LLVM のあらゆる側面に関する大量のドキュメントも含まれています。

簡単に言うと、LLVM は従来のコンパイラのオプティマイザおよびバックエンドです。基本的にコードの中間表現であるバイトコードで動作し、最終的なバイナリを最適化および生成するために使用されます。LLVM フロントエンドは独立しており、独自の内部 AST を使用して最終的にバイトコードを生成します。

LLVM は、最終的なバイナリを生成するタイミングに関しては、実際には非常に柔軟です。すぐに実行することも、プログラムがインストールされるまで遅らせることもできます。その JIT を使用して、実行中に最終的なバイナリを生成することもできると思います (これは 100% 確実ではありません)。このような遅延の主な利点は、実行中の環境に固有の最適化を適用できることです。

于 2011-09-04T03:31:58.817 に答える