12,762
回編集
(→概要) |
|||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
LLVMプロジェクトは、モジュール化され再利用可能なコンパイラとツールチェイン技術の集合体である。<br> | |||
<br> | |||
イリノイ大学の研究プロジェクトとして始まり、任意のプログラミング言語の静的 / 動的コンパイルをサポートできる、SSAベースの近代的なコンパイル戦略を提供することを目的としていた。<br> | |||
その後、LLVMは多くのサブプロジェクトからなるアンブレラプロジェクトに成長して、その多くは、学術研究において広く利用されるだけでなく、様々な商用およびオープンソースプロジェクトによって稼働している。<br> | |||
<br> | |||
LLVMの主なサブプロジェクトを、以下に示す。<br> | |||
* LLVMコアライブラリ | |||
*: ソースコードやターゲットに依存しない最新のオプティマイザと、多くの一般的なCPUに対応したコード生成機能を提供する。 | |||
*: これらのライブラリは、LLVM中間表現(LLVM IR)として知られる指定されたコード表現を中心に構築されている。 | |||
*: LLVMコアライブラリは文書化されており、LLVMをオプティマイザやコード生成器として使用するための独自の言語の考案(または既存のコンパイラの移植)が容易である。 | |||
*: <br> | |||
* Clang | |||
*: LLVMネイティブのC / C++ / Objective-Cコンパイラにおいて、速いコンパイル、非常に有用なエラーと警告メッセージ、優れたソースレベルツールを構築するためのプラットフォームを提供することを目的としている。 | |||
*: Clang Static Analyzerとclang-tidyは、コードのバグを自動的に見つけるツールであり、C / C++コードを解析するライブラリとしてClangフロントエンドを使用して構築できる。 | |||
*: <br> | |||
* libc++およびlibc++ ABIプロジェクト | |||
*: C++11およびC++14の完全サポートを含むC++標準ライブラリの標準準拠かつ高性能な実装を提供する。 | |||
*: <br> | |||
* compiler-rtプロジェクト | |||
*: __fixunsdfdi等の低レベルコードジェネレータサポートルーチンや、ターゲットがコアIR操作を実装するための短いネイティブ命令列を持っていない場合に発生するその他のコールの高度に調整された実装を提供する。 | |||
*: また、AddressSanitizer、ThreadSanitizer、MemorySanitizer、DataFlowSanitizer等の動的テストツールのランタイムライブラリの実装を提供している。 | |||
*: <br> | |||
* MLIRサブプロジェクト | |||
*: 再利用可能で拡張性のあるコンパイラ基盤を構築するための新しいアプローチである。 | |||
*: MLIRは、ソフトウェアの断片化の対処、異種ハードウェアに対するコンパイルの改善、ドメイン固有のコンパイラを構築するコストを大幅に削減する等、既存のコンパイラの接続を支援することを目的としている。 | |||
*: <br> | |||
* OpenMPサブプロジェクト | |||
*: ClangのOpenMP実装で使用するためのOpenMPランタイムを提供する。 | |||
*: <br> | |||
* pollyプロジェクト | |||
*: 多面体モデルを用いて、自動並列化やベクトル化だけでなく、キャッシュローカリティ最適化のスイートも実装している。 | |||
*: <br> | |||
* libclcプロジェクト | |||
*: OpenCL標準ライブラリの実装を目的としている。 | |||
*: <br> | |||
* kleeプロジェクト | |||
*: 定理証明器を用いてプログラムの動的パスの評価を行い、バグの発見や関数の性質を証明する"記号的仮想機械"を実装している。 | |||
*: kleeの大きな特徴は、バグを検出した際にテストケースを生成することができる点である。 | |||
*: <br> | |||
* LLDプロジェクト | |||
*: リンカのことであり、システムリンカのドロップイン置き換えで、高速に動作する。 | |||
*: <br> | |||
* BOLTプロジェクト | |||
*: ポストリンクオプティマイザである。 | |||
*: サンプリングプロファイラで収集した実行プロファイルをもとに、ソフトウェアのコードレイアウトを最適化することにより、高速化を実現する。 | |||
<br><br> | <br><br> | ||