Can you summarize the following document?
        
  LLVM提供了完整編譯系統的中間層,它會將中間語言(英語:Intermediate Representation,IR)從編譯器取出與最佳化,最佳化後的IR接著被轉換及連結到目標平臺的組合語言。LLVM可以接受來自GCC工具鏈所編譯的IR,包含它底下現存的編譯器。  LLVM也可以在編譯時期、連結時期,甚至是執行時期產生可重新定位的程式碼(Relocatable Code)。  LLVM支援與語言無關的指令集架構及型別系統。每個在靜態單賦值形式(SSA)的指令集代表著,每個變數(被稱為具有型別的暫存器)僅被賦值一次,這簡化了變數間相依性的分析。LLVM允許程式碼被靜態的編譯,包含在傳統的GCC系統底下,或是類似JAVA等後期編譯才將IF編譯成機器碼所使用的即時編譯(JIT)技術。它的型別系統包含基本型別(整數或是浮點數)及五個複合型別(指標、陣列、向量、結構及函式),在LLVM具體語言的型別建制可以以結合基本型別來表示,舉例來說,C++所使用的class可以被表示為結構、函式及函式指標的陣列所組成。  LLVM JIT編譯器可以最佳化在執行時期時程式所不需要的靜態分支,這在一些部分求值(Partial Evaluation)的案例中相當有效,即當程式有許多選項,而在特定環境下其中多數可被判斷為是不需要。這個特色被使用在Mac OS X Leopard(v10.5)底下OpenGL的管線,當硬體不支援某個功能時依然可以被成功地運作。OpenGL堆疊下的繪圖程式被編譯為IR,接著在機器上執行時被編譯,當系統擁有高階GPU時,這段程式會進行極少的修改並將傳遞指令給GPU,當系統擁有低階的GPU時,LLVM將會編譯更多的程式,使這段GPU無法執行的指令在本地端的中央處理器執行。LLVM增進了使用Intel GMA晶片等低端機器的效能。一個類似的系統發展於Gallium3D LLVMpipe,它已被合併到GNOME,使其可執行在沒有GPU的環境。  根據2011年的一項測試,GCC在執行時期的效能平均比LLVM高10%。而2013年測試顯示,LLVM可以編譯出接近GCC相同效能的執行碼。

  LLVM已經成為多個編譯器和程式碼生成相關子專案的母專案。

  LLVM最初被用來取代現有於GCC堆疊的程式碼產生器,許多GCC的前端已經可以與其執行,LLVM目前支援Ada、C語言、C++、D語言、Fortran、Haskell、Julia (程式語言)、Objective-C、Rust及Swift (程式語言)的編譯,它使用許多的編譯器,有些來自4.0.1及4.2的GCC。  LLVM引發一些人來為許多語言開發新的編譯器,其中一個最引發注意的就是Clang,它是一個新的編譯器,同時支援C、Objective-C以及C++。主要來自蘋果電腦的支援,Clang的目的用以取代GCC系統底下的C/Objective-C編譯器,在當代的系統,他較為容易與整合開發環境(IDE)整合,而且對於執行緒有更好的支援。Clang從3.8版本開始已經支援OpenMP。GCC底下Objective-C的開發已經停滯,而蘋果電腦已經將其支援移至其他的維護分支。  Utrecht Haskell編譯器可以產生LLVM使用的程式碼,但它還在初期的開發階段,並且在許多案例,展示他比起C程式碼產生器擁有更好的效率 Glasgow Haskell Compiler(GHC)擁有一個可以運作的LLVM後端,程式執行效能對比起原先的編譯器可以達到30%的加速,它僅比一個由GHC所實現,並擁有多項最佳化技術的編譯器還慢  還有其他的元件在不同的開發階段,包含(但不限於)Java bytecode、通用中間語言(CIL)、MacRuby(實現Ruby 1.9)、Standard ML及新的graph coloring暫存器配置.

  LLVM的核心是中間端表示式(英語:Intermediate Representation,IR),一種類似彙編的底層語言。IR是一種強型別的精簡指令集(英語:Reduced Instruction Set Computing,RISC),並對目標指令集進行了抽象。例如,目標指令集的函式呼叫慣例被抽象為"call"和"ret"指令加上明確的引數。另外,IR採用無限個數的暫存器,使用如%0,%1等形式表達。LLVM支援三種表達形式:人類可讀的彙編,在C++中物件形式和序列化後的bitcode形式。  例如,一個簡單的Hello World程式可以表達為如下的彙編形式。對IR語言的完整描述請參考LLVM官方文件:

  至3.4版本的LLVM已經支援多種後端指令集,比如ARM、Qualcomm Hexagon、MIPS、Nvidia並行指令集(PTX;在LLVM文件中被稱為NVPTX),PowerPC、AMD TeraScale、AMD Graphics Core Next(GCN)、SPARC、z/Architecture(在LLVM文件中被稱為SystemZ)、x86、x86-64和XCore。有部分平臺功能並沒有完全實現。但x86、x86-64、z/Architecture、ARM和PowerPC的基本所有功能都有實現。 RISC-V也在版本7中實現。  LLVM機器碼(MC)子專案是LLVM將機器指令從文字形式轉換至機器碼的形式。在之前LLVM依靠系統或是平臺專門的工具鏈將彙編翻譯為機器碼。LLVM機器碼的整合彙編器已經支援絕大多數LLVM的目標平臺,如x86、x86-64、ARM和ARM64。對另一些平臺,如幾種MIPS平臺,彙編器支援已經加入但仍在beta階段。

  lld連結器子專案旨在為LLVM開發一個內建的,平臺獨立的連結器,去除對所有第三方連結器的依賴。在2017年5月,lld已經支援ELF、PE/COFF、 和Mach-O。在lld支援不完全的情況下,使用者可以使用其他專案,如GNU ld連結器。 lld支援連結時優化。當LLVM連結時優化被啟用時,LLVM可以輸出bitcode而不是本機程式碼,而本機程式碼生成由連結器優化處理。

  LLVM專案包含一個C++標準庫的實現,具有MIT許可證和UIUC許可證的雙許可協議。
英語:LLVM是一個自由軟體專案,它是一種編譯器基礎設施,以C++寫成,包含一系列模組化的編譯器元件和工具鏈,用來開發編譯器前端和後端。它是為了任意一種程式語言而寫成的程式,利用虛擬技術創造出編譯時期、連結時期、執行時期以及“閒置時期”的最佳化。它最早以C/C++為實作物件,而目前它已支援包括ActionScript、Ada、D語言、Fortran、GLSL、Haskell、Java位元組碼、Objective-C、Swift、Python、Ruby、Crystal、Rust、Scala以及C#等語言。