LLVMのロゴ、様式化されたワイバーン[1] | |
| 原作者 | クリス・ラトナー、ヴィクラム・アドヴェ |
|---|---|
| 開発者 | LLVM 開発者グループ |
| 初回リリース | 2003年 |
| 安定リリース | 19.1.1 [2]
/ 2024年10月1日 |
| リポジトリ |
|
| 書かれた | C++ |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | コンパイラ |
| ライセンス | UIUC ( BSDスタイル) Apache License 2.0 LLVM例外付き (v9.0.0以降) [3] |
| Webサイト | 詳しくはこちら |
LLVMはコンパイラとツールチェーン技術のセット[4]であり、あらゆるプログラミング言語のフロントエンドとあらゆる命令セットアーキテクチャのバックエンドを開発するために使用できます。LLVMは、言語に依存しない中間表現(IR)を中心に設計されており、複数のパスでさまざまな変換を使用して最適化できるポータブルな高レベルアセンブリ言語として機能します。 [5] LLVMという名前は、もともとLow Level Virtual Machineの略でしたが、プロジェクトが拡大し、その名前はもはや正式な頭字語ではありません。
LLVM はC++で記述されており、コンパイル時、リンク時、実行時、および「アイドル時間」の最適化を目的として設計されています。 LLVM はもともとCと C++ 向けに実装されていましたが、言語に依存しない設計のため、さまざまなフロントエンドが生まれました。 LLVM を使用するコンパイラを持つ言語 (または LLVM を直接使用しないが、コンパイルされたプログラムを LLVM IR として生成できる言語) には、ActionScript、Ada、.NETのC#、[6] [7] [8] Common Lisp、PicoLisp、Crystal、CUDA、D、Delphi、Dylan、Forth、[9] Fortran、FreeBASIC、Free Pascal、Halide、Haskell、Java バイトコード、Julia、Kotlin、LabVIEWの G 言語 、[10] [11] Lua、Objective-C、OpenCL、[12] PostgreSQLの SQL および PLpgSQL 、[13] Ruby、[14] Rust、[15] Scala、[16] [17] Swift、Xojo、Zig。
歴史
LLVMプロジェクトは、2000年にイリノイ大学アーバナ・シャンペーン校で、ヴィクラム・アドベとクリス・ラトナーの指導の下で始まりました。LLVMはもともと、静的および動的プログラミング言語の動的コンパイル技術を調査するための研究インフラストラクチャとして開発されました。LLVMは、イリノイ大学/NCSAオープンソースライセンス[3]、つまり寛容なフリーソフトウェアライセンスの下でリリースされました。2005年、Apple社はラトナーを雇い、Appleの開発システム内でのさまざまな用途のためにLLVMシステムに取り組むチームを結成しました。 [18] LLVMは、2011年のXcode 4以来、macOSとiOS向けのAppleのXcode開発ツールの不可欠な部分となっています。 [ 19 ]
2006 年、Lattner 氏はClangという新しいプロジェクトに取り組み始めました。Clang フロントエンドと LLVM バックエンドの組み合わせは、Clang/LLVM または単に Clang と呼ばれます。
LLVMという名前は、もともとLow Level Virtual Machineの頭文字でした。しかし、LLVMプロジェクトは、現在のほとんどの開発者が仮想マシンと考えるものとはほとんど関係のない包括的なプロジェクトへと進化しました。これにより、頭文字が「紛らわしく」かつ「不適切」になり、2011年以降、LLVMは「正式には頭字語ではなくなりました」[20]が、LLVM包括的なプロジェクトに適用されるブランドになりました。[21]プロジェクトには、LLVM中間表現(IR)、LLVMデバッガ、 C++標準ライブラリのLLVM実装( C++11およびC++14の完全サポート付き[22])などが含まれます。LLVMはLLVM Foundationによって管理されています。コンパイラエンジニアのTanya Lattnerが2014年に会長に就任し[23]、2024年3月時点でその職に就いていました。[24][アップデート]
「LLVMの設計と実装」に対して、計算機協会はVikram Adve、Chris Lattner、Evan Chengに2012 ACMソフトウェアシステム賞を授与しました。[25]
このプロジェクトはもともとUIUCライセンスの下で利用可能でした。2019年にリリースされたv9.0.0以降、[26] LLVMはLLVM例外を伴うApacheライセンス2.0に再ライセンスされました。 [3] 2022年11月現在、[アップデート]約400の貢献が再ライセンスされていません。[27] [28]
特徴
LLVM は完全なコンパイラ システムの中間層を提供でき、コンパイラから中間表現(IR) コードを取得して最適化された IR を生成します。この新しい IR は、ターゲット プラットフォームのマシン依存アセンブリ言語コードに変換およびリンクできます。LLVM はGNU コンパイラ コレクション(GCC)ツールチェーンから IR を受け入れることができるため、そのプロジェクト用に作成されたさまざまな既存のコンパイラ フロントエンドで使用できます。LLVM はバージョン 7.5 以降では gcc を使用してビルドすることもできます。[29]
LLVM は、コンパイル時またはリンク時に 再配置可能なマシン コードを生成することも、実行時にバイナリ マシン コードを生成することもできます。
LLVMは、言語に依存しない命令セットと型システムをサポートしています。[5]各命令は静的単一代入形式(SSA)です。つまり、各変数(型付きレジスタと呼ばれる)は一度代入され、その後凍結されます。これにより、変数間の依存関係の分析が簡素化されます。 LLVMでは、従来のGCCシステムと同様にコードを静的にコンパイルすることも、Javaと同様にジャストインタイムコンパイル(JIT)を介してIRからマシンコードに後からコンパイルすることもできます。 型システムは、整数や浮動小数点数などの基本型と、ポインタ、配列、ベクトル、構造体、関数の5つの派生型で構成されています。具体的な言語の型構造は、LLVMでこれらの基本型を組み合わせることで表現できます。たとえば、C++のクラスは、構造体、関数、関数ポインタの配列を組み合わせて表現できます。
LLVM JITコンパイラは、実行時にプログラムから不要な静的分岐を最適化できるため、プログラムに多くのオプションがあり、そのほとんどは特定の環境では不要であると簡単に判断できる場合の部分評価に役立ちます。この機能は、 Mac OS X Leopard (v10.5)のOpenGLパイプラインで、不足しているハードウェア機能のサポートを提供するために使用されています。[30]
OpenGL スタック内のグラフィックス コードは中間表現のままにしておき、ターゲット マシンで実行するときにコンパイルすることができます。ハイエンドのグラフィックス プロセッシング ユニット(GPU) を搭載したシステムでは、結果のコードは非常に薄いままで、最小限の変更で命令を GPU に渡します。ローエンドの GPU を搭載したシステムでは、LLVM は、GPU が内部で実行できない命令をエミュレートする、ローカルの中央処理装置(CPU) で実行されるオプションのプロシージャをコンパイルします。LLVM は、 Intel GMAチップセットを使用するローエンド マシンのパフォーマンスを改善しました。同様のシステムがGallium3D LLVMpipe で開発され、適切な 3D ハードウェア ドライバーがロードされていなくても実行できるようにGNOMEシェルに組み込まれました。 [31]
2011年には、GCCでコンパイルされたプログラムはLLVMでコンパイルされたプログラムよりも平均で10%優れたパフォーマンスを発揮しました。[32] [33] 2013年には、phoronixがLLVMがGCCに追いつき、ほぼ同等のパフォーマンスのバイナリをコンパイルしたと報告しました。[34]
コンポーネント
LLVM は複数のコンポーネントを含む包括的なプロジェクトになりました。
フロントエンド
LLVMはもともとGCCスタックの既存のコードジェネレーターの代替として書かれており、 [35] GCCフロントエンドの多くがLLVMで動作するように変更され、現在は廃止されたLLVM-GCCスイートが生まれました。変更には通常、GIMPLEからLLVMへのIRステップが含まれ、LLVMのオプティマイザーとコードジェネレーターをGCCのGIMPLEシステムの代わりに使用できるようになります。AppleはXcode 4.x(2013)を通じてLLVM-GCCの重要なユーザーでした。[36] [37] GCCフロントエンドのこの使用は主に一時的な手段と考えられていましたが、Clangの登場とLLVMとClangのモダンでモジュール化されたコードベース(およびコンパイル速度)の利点により、ほとんど廃止されました。
LLVM は現在[時点? ] 、さまざまなフロントエンドを使用して、 Ada、C、C++、D、Delphi、Fortran、Haskell、Julia、Objective-C、Rust、およびSwiftのコンパイルをサポートしています。
LLVMへの関心が広まったことで、多くの言語向けの新しいフロントエンドを開発する取り組みがいくつか行われてきました。最も注目を集めているのは、C、C++、Objective-Cをサポートする新しいコンパイラであるClangです。主にAppleがサポートするClangは、GCCシステムのC/Objective-Cコンパイラを、統合開発環境(IDE)との統合が容易で、マルチスレッドをより幅広くサポートするシステムに置き換えることを目的としています。OpenMPディレクティブのサポートは、リリース3.8以降、 Clangに含まれています。[38]
Utrecht HaskellコンパイラはLLVM用のコードを生成できる。このジェネレータは開発の初期段階にあったが、多くの場合Cコードジェネレータよりも効率的だった。[39] Glasgow Haskellコンパイラ( GHC )バックエンドはLLVMを使用し、GHC経由のネイティブコードコンパイルやCコード生成後のコンパイルに比べてコンパイル済みコードの30%の高速化を実現しているが、GHCによって実装された多くの最適化手法のうち1つだけが欠けている。[40]
他にも、Rustコンパイラ、Java バイトコードフロントエンド、共通中間言語(CIL) フロントエンド、 Ruby 1.9 のMacRuby実装、 Standard MLのさまざまなフロントエンド、新しいグラフ カラーリングレジスタ アロケータなど、さまざまな開発段階にあるコンポーネントが多数あります。[引用が必要]
中間表現

LLVM の核となるのは中間表現(IR) で、アセンブリに似た低レベルのプログラミング言語です。IR は、ターゲットのほとんどの詳細を抽象化する、強く型付けされた縮小命令セット コンピュータ(RISC) 命令セットです。たとえば、呼び出し規約はcall、ret明示的な引数を持つ命令によって抽象化されます。また、IR は固定のレジスタ セットの代わりに、%0、%1 などの形式の無限の一時セットを使用します。LLVM は、人間が読めるアセンブリ形式、[41]フロントエンドに適したメモリ内形式、およびシリアル化用の高密度ビットコード形式の 3 つの同等の形式の IR をサポートしています。IR形式の
単純な「Hello, world!」プログラム:
@.str =内部定数[ 14 x i8 ] c "Hello, world\0A\00"
i32 @printf ( ptr 、...)を宣言します。
i32を定義します@main ( i32 %argc 、ptr %argv ) nounwind {エントリ: %tmp1 = getelementptr [ 14 x i8 ]、ptr @.str 、i32 0 、i32 0 %tmp2 = call i32 ( ptr 、...) @printf ( ptr %tmp1 ) nounwind ret i32 0 }
さまざまなターゲットで使用されるさまざまな規則と提供される機能により、LLVM はターゲットに依存しない IR を実際に生成して、確立されたルールを破ることなくそれを再ターゲットすることはできません。ドキュメントで明示的に言及されているもの以外のターゲット依存性の例は、オンライン配布を目的とした LLVM IR の完全にターゲットに依存しないバリアントである「wordcode」の 2011 年の提案にあります。[42]より実用的な例はPNaClです。[43]
LLVMプロジェクトでは、MLIR [44]と呼ばれる別のタイプの中間表現も導入されており、これはDialect [45]と呼ばれるプラグインアーキテクチャを採用することで、再利用可能で拡張可能なコンパイラインフラストラクチャの構築に役立ちます。これにより、多面体コンパイルなどの最適化プロセスでプログラム構造に関する高レベルの情報を利用できるようになります。
バックエンド
バージョン16のLLVMは、IA -32、x86-64、ARM、Qualcomm Hexagon、LoongArch、M68K、MIPS、NVIDIA Parallel Thread Execution(PTX、 LLVMのドキュメントではNVPTXとも呼ばれる)、PowerPC、AMD TeraScale、[46]最新のAMD GPU(LLVMのドキュメントではAMDGPUとも呼ばれる)、 [47] SPARC、z/Architecture (LLVMのドキュメントではSystemZとも呼ばれる)、XCoreなど、多くの命令セットをサポートしています。
一部の機能は一部のプラットフォームでは利用できません。ほとんどの機能はIA-32、x86-64、z/Architecture、ARM、PowerPCで利用可能です。[48] RISC-Vはバージョン7からサポートされています。
過去には、LLVMはCバックエンド、Cell SPU、mblaze(MicroBlaze)[49]、AMD R600、DEC / Compaq Alpha(Alpha AXP)[50]、Nios2 [51]などの他のバックエンドも完全にまたは部分的にサポートしていましたが、これらのハードウェアはほとんどが時代遅れであり、LLVM開発者はサポートとメンテナンスのコストがもはや正当化されないと判断しました。[引用が必要]
LLVM はWebAssemblyもターゲットとしてサポートしており、コンパイルされたプログラムをGoogle Chrome / Chromium、Firefox、Microsoft Edge、Apple Safari、WAVM などの WebAssembly 対応環境で実行できます。LLVM 準拠の WebAssembly コンパイラは通常、C、C++、D、Rust、Nim、Kotlin などの他のいくつかの言語で記述された、ほとんど変更されていないソースコードをサポートします。
LLVM マシン コード (MC) サブプロジェクトは、テキスト形式とマシン コード間でマシン命令を変換するための LLVM のフレームワークです。以前は、LLVM はシステム アセンブラ、またはツールチェーンによって提供されるアセンブラを使用して、アセンブリをマシン コードに変換していました。LLVM MC の統合アセンブラは、IA-32、x86-64、ARM、ARM64 など、ほとんどの LLVM ターゲットをサポートしています。さまざまな MIPS 命令セットを含む一部のターゲットでは、統合アセンブリ サポートが使用可能ですが、まだベータ段階です。[引用が必要]
リンカ
lldサブプロジェクトは、LLVM用の組み込みのプラットフォーム非依存リンカーを開発する試みです。[52] lldはサードパーティのリンカーへの依存を排除することを目的としています。2017年5月現在[アップデート]、lldはELF、PE/COFF、Mach-O、WebAssembly [53]をサポートしています。lldはGNU ldの両方のバージョンよりも高速です。[要出典]
GNUリンカーとは異なり、lldにはリンク時最適化(LTO)のサポートが組み込まれています。これにより、リンカープラグインの使用を回避してコード生成を高速化できますが、その一方で、他のLTOとの相互運用性は妨げられます。[54]
C++ 標準ライブラリ
LLVMプロジェクトには、 MITライセンスとUIUCライセンスの二重ライセンスであるlibc++というC++標準ライブラリの実装が含まれています。[55]
バージョン9.0.0以降、LLVM例外を含むApache License 2.0に再ライセンスされました。[3]
ポリー
これは、多面体モデルを使用した一連のキャッシュ局所性最適化、自動並列化、ベクトル化を実装します。[56]
デバッガ
C 標準ライブラリ
llvm-libcはLLVMプロジェクトによって設計された、未完成で今後リリースされるABIに依存しないC標準ライブラリです。 [57]
デリバティブ
LLVMはライセンスが寛容であるため、多くのベンダーが独自に調整されたLLVMのフォークをリリースしています。これはLLVMのドキュメントでも公式に認められており、この理由から機能チェックでバージョン番号を使用しないことが推奨されています。[58]ベンダーには次のようなものがあります。
- AMD のAMD 最適化 C/C++ コンパイラは、 LLVM、Clang、および Flang に基づいています。
- AppleはXcodeのオープンソースフォークを維持している。[59]
- Armは、ベアメタル開発をターゲットとしたArm Compiler for Embeddedや、ハイパフォーマンスコンピューティング市場をターゲットとしたArm Compiler for Linuxなど、LLVMベースのツールチェーンを多数提供しています。
- Flang、2022年現在開発中のFortranプロジェクト[アップデート]
- IBMはC/C++およびFortranコンパイラにLLVMを採用している。[60]
- インテルは次世代のインテルC++コンパイラにLLVMを採用した。[61]
- ロスアラモス国立研究所には「Kitsune」と呼ばれるLLVM 8の並列コンピューティングフォークがある。[62]
- NvidiaはNVVM CUDAコンパイラの実装にLLVMを使用しています。[63] NVVMコンパイラは、バックエンドセクションで言及されている「NVPTX」バックエンドとは異なりますが、どちらもNvidia GPU用のPTXコードを生成します。
- ソニーは2013年以来、 PlayStation 4コンソールのソフトウェア開発キット(SDK)でLLVMの主要なフロントエンドClangコンパイラを使用しています。[64]
参照
- 共通中間言語
- HHVM
- こ――
- アムステルダム コンパイラ キット(ACK)
- 最適化コンパイラ
- LLDB (デバッガー)
- GNU ライトニング
- GNU コンパイラ コレクション(GCC)
- 純粋な
- オープンCL
- ROCm
- エムスクリプト
- TenDRA 配布フォーマット
- アーキテクチャ中立配布フォーマット(ANDF)
- アプリケーション仮想化ソフトウェアの比較
- スピルV
- イリノイ大学アーバナシャンペーン校の発見と革新
文学
- クリス・ラトナー-オープンソースアプリケーションのアーキテクチャ - 第11章 LLVM、ISBN 978-1257638017、2012年にCC BY 3.0(オープンアクセス)でリリース。[65]
- LLVM: 生涯にわたるプログラム分析と変換のためのコンパイルフレームワーク、Chris Lattner、Vikram Adve による公開論文
参考文献
- ^ 「LLVM ロゴ」。LLVMコンパイラ インフラストラクチャ プロジェクト。
- ^ 「リリース LLVM 19.1.1 · llvm/llvm-project」。2024年10月3日閲覧。
- ^ abcd "LICENSE.TXT". llvm.org . 2019年9月24日閲覧。
- ^ 「LLVM コンパイラ インフラストラクチャ プロジェクト」 。2016年3 月 11 日閲覧。
- ^ ab 「LLVM言語リファレンスマニュアル」。2019年6月9日閲覧。
- ^ 「LLILC の発表 - .NET 向けの新しい LLVM ベースのコンパイラ」。dotnetfoundation.org。2021年 12 月 12 日時点のオリジナルよりアーカイブ。2020年9 月 12 日閲覧。
- ^ 「Mono LLVM」 。 2013年3月10日閲覧。
- ^ Lattner, Chris (2011)。「LLVM」。Brown, Amy、Wilson, Greg (編)。オープンソース アプリケーションのアーキテクチャ。
- ^ “MovForth”. GitHub . 2021年11月28日.
- ^ William Wong (2017 年 5 月 23 日)。「LabVIEW 2017 と LabVIEW NXG の違いは何ですか?」。電子設計。
- ^ 「NI LabVIEW コンパイラ: 内部構造」。
- ^ Larabel, Michael (2018 年 4 月 11 日)。「Khronos が LLVM/SPIR-V トランスレータを正式に発表」。Phoronix.com。
- ^ 「32.1. JIT コンパイルとは?」PostgreSQL ドキュメント2020 年 11 月 12 日2021 年1 月 25 日閲覧。
- ^ 「機能」。RubyMotion。Scratchwork Development LLC。2017年6 月 17 日閲覧。RubyMotion
は
、LLVM に基づく事前 (AOT) コンパイラを使用して、プロジェクトの Ruby ソース コードを ... マシン コードに変換します。
- ^ 「コード生成 - Rustc 開発ガイド」. rust-lang.org . 2023 年1 月 4 日閲覧。
- ^ Reedy, Geoff (2012 年 9 月 24 日). 「Scala から LLVM へのコンパイル」. セントルイス、ミズーリ州、アメリカ合衆国. 2013 年2 月 19 日閲覧。
- ^ 「Scala Native」 。 2023年11月26日閲覧。
- ^ Adam Treat (2005年2月19日)、Qt4のLLVMコンパイル用のmkspecsとパッチ、2011年10月4日時点のオリジナルからアーカイブ、2012年1月27日閲覧
- ^ 「開発者ツールの概要」。Apple Developer。Apple。2011年4月23日時点のオリジナルよりアーカイブ。
- ^ Lattner, Chris (2011 年 12 月 21 日). 「LLVM の名前」. llvm-dev (メーリング リスト) . 2016 年3 月 2 日閲覧。
「LLVM」は正式には頭字語ではなくなりました。かつて拡張された頭字語も紛らわしく、ほぼ初日から不適切なものでした。:) LLVM が他のサブプロジェクトを包含するほどに成長するにつれて、その有用性はますます低下し、意味を失ってしまいました。
- ^ Lattner, Chris (2011 年 6 月 1 日)。「 LLVM」。Brown, Amy、Wilson, Greg (編)。オープンソース アプリケーションのアーキテクチャ。Lulu.com。ISBN 978-1257638017「LLVM」という名前はかつては頭字語でしたが
、現在は包括的なプロジェクトのブランドとしてのみ使用されています。
- ^ 「"libc++" C++ 標準ライブラリ」。
- ^ Lattner, Chris (2014 年 4 月 3 日)。「LLVM Foundation」。LLVM プロジェクト ブログ。
- ^ 「取締役会」。LLVM Foundation 。 2024年3月19日閲覧。
- ^ 「ACM ソフトウェア システム賞」。ACM。
- ^ Wennborg, Hans (2019 年 9 月 19 日). 「[llvm-announce] LLVM 9.0.0 リリース」.
- ^ 「ロングテールの再ライセンス」。foundation.llvm.org。2022年11月11日。
- ^ 「LLVM 再ライセンス - ロングテール」。LLVM プロジェクト。2022年11 月 27 日に取得– Google ドキュメント経由。
- ^ “⚙ D156286 [docs] GCC の最小バージョンを 7.5 に変更”. reviews.llvm.org . 2023 年7 月 28 日閲覧。
- ^ Lattner, Chris (2006 年 8 月 15 日). 「Apple での LLVM の優れた使用法: OpenGL スタック」. llvm-dev (メーリング リスト) . 2016 年3 月 1 日閲覧。
- ^ Michael Larabel、「GNOME Shell は GPU ドライバーのサポートなしでも動作します」、phoronix、2011 年 11 月 6 日
- ^ Makarov, V. 「SPEC2000: x86 上の LLVM-2.9 と GCC4.6.1 の比較」 。2011年10 月 3 日閲覧。
- ^ Makarov, V. 「SPEC2000: x86_64 上の LLVM-2.9 と GCC4.6.1 の比較」 。2011年10 月 3 日閲覧。
- ^ Larabel, Michael (2012 年 12 月 27 日). 「LLVM/Clang 3.2 コンパイラが GCC と競合」。2013 年3 月 31 日閲覧。
- ^ Lattner, Chris ; Adve, Vikram (2003 年 5 月)。次世代 GCC のアーキテクチャ。第 1 回 GCC 開発者サミット。2009年9 月 6 日閲覧。
- ^ 「LLVM コンパイラの概要」。developer.apple.com。
- ^ 「Xcode 5 リリースノート」。Apple Inc.
- ^ 「Clang 3.8 リリースノート」 。2016年8 月 24 日閲覧。
- ^ 「Haskell を LLVM にコンパイルする」 。2009年2 月 22 日閲覧。
- ^ 「LLVM プロジェクト ブログ: Glasgow Haskell コンパイラと LLVM」。2010 年 5 月 17 日。2010年8 月 13 日閲覧。
- ^ 「LLVM言語リファレンスマニュアル」。LLVM.org。2023年1月10日。
- ^ Kang, Jin-Gu. 「Wordcode: よりターゲットに依存しない LLVM ビットコード」(PDF) 。2019 年12 月 1 日閲覧。
- ^ 「PNaCl: Portable Native Client Executables」(PDF) 。 2012年5月2日時点のオリジナル(PDF)からアーカイブ。 2012年4月25日閲覧。
- ^ “MLIR”. mlir.llvm.org . 2022年6月7日閲覧。
- ^ 「方言 - MLIR」。mlir.llvm.org 。 2022年6月7日閲覧。
- ^ Stellard, Tom (2012 年 3 月 26 日)。"[LLVMdev] RFC: R600、AMD GPU 用の新しいバックエンド"。llvm -dev (メーリング リスト)。
- ^ 「AMDGPU バックエンドのユーザー ガイド — LLVM 15.0.0git ドキュメント」。
- ^ ターゲット固有の実装ノート: ターゲット機能マトリックス // LLVM ターゲットに依存しないコード ジェネレーター、LLVM サイト。
- ^ 「llvm からmblaze バックエンドを削除する」。GitHub。2013年 7 月 25 日。2020年1 月 26 日閲覧。
- ^ 「Alphaバックエンドの削除」。GitHub。2011年10月27日。 2020年1月26日閲覧。
- ^ 「[Nios2] Nios2バックエンドを削除する」。GitHub 。 2019年1月15日。 2020年1月26日閲覧。
- ^ 「lld - LLVM リンカー」。LLVM プロジェクト。2017年5 月 10 日閲覧。
- ^ 「WebAssembly lld ポート」。
- ^ 「42446 – lld は gcc LTO ファイルを処理できません」。bugs.llvm.org。
- ^ 「"libc++" C++ 標準ライブラリ」。
- ^ 「Polly - LLVM の多面体最適化」。
- ^ 「llvm-libc: ISO C準拠の標準ライブラリ — libc 15.0.0gitドキュメント」. libc.llvm.org . 2022年7月18日閲覧。
- ^ 「Clang 言語拡張機能」。Clang 12 ドキュメント。
ベンダーによって番号付け方式が異なるため、マーケティング バージョン番号を使用して言語機能をチェックしないでください。代わりに、機能チェック マクロを使用してください。
- ^ “apple/llvm-project”. Apple. 2020年9月5日.
- ^ 「IBM C/C++ および Fortran コンパイラが LLVM オープンソース インフラストラクチャを採用」。
- ^ 「Intel C/C++ コンパイラーが LLVM の採用を完了」。Intel 。2021年8 月 17 日閲覧。
- ^ “lanl/kitsune”. ロスアラモス国立研究所. 2020年2月27日.
- ^ 「NVVM IR仕様1.5」。
現在のNVVM IRはLLVM 5.0に基づいています。
- ^ ps4 用開発者ツールチェーン(PDF) 、 2015 年2 月 24 日取得
- ^ Lattner, Chris (2012 年 3 月 15 日)。「第 11 章」。オープンソース アプリケーションのアーキテクチャ。Amy Brown、Greg Wilson。ISBN 978-1257638017。
外部リンク
- 公式サイト
