經過六個月的發展 介紹了新版本的LLVM 9.0項目的啟動, 這是與GCC兼容的工具包(編譯器,優化器和代碼生成器), 將程序編譯成類似RISC的虛擬指令的中間位代碼 (具有多級優化系統的低級虛擬機)。
它旨在優化編譯時間。、鏈接時間、用戶想要定義的任何編程語言的執行時間。 最初是為了編譯 C 和 C++ 而實現的、LLVM 與語言無關的設計以及該項目的成功 產生了各種各樣的語言,包括Objective-C,Fortran,Ada,Haskell,Java字節碼,Python,Ruby,ActionScript,GLSL,Clang,Rust,Gambas等。
生成的偽代碼可以使用 JIT 編譯器在程序執行時直接轉換為機器指令。
LLVM 9.0的主要新功能
LLVM 9.0的新功能 找到支持從RISC-V平台刪除實驗開發標籤的支持,C ++對OpenCL的支持。
另一個新穎之處 突出的是將程序劃分為動態加載部分的能力 LLD和Linux內核代碼中使用的»asm goto»構造的實現。
此外,還要強調的是,Libc ++附帶了對WASI的支持 (WebAssembly系統界面)和LLD引入了對動態WebAssembly綁定的初始支持。 添加了特定於GCC的表達式»asm goto»的實現,該表達式使您可以從組裝的內聯塊切換到C標籤。
要在x86_64系統上使用Clang以»CONFIG_JUMP_LABEL = y«模式構建Linux內核,此功能是必需的。 考慮到以前版本中添加的更改,現在可以在Clang中為x86_64體系結構構建Linux內核(以前,僅ARM,aarch64,ppc32,ppc64le和mips體系結構支持該內核。
增加了對BTI指令的支持 (分支目標指示器)和PAC(指針身份驗證代碼)用於AArch64體系結構。 大大改善了對MIPS,RISC-V和PowerPC平台的支持。
另外, Android和ChromeOS項目已經切換到使用Clang來構建內核 Google正在測試Clang作為其正在運行的Linux系統的主要構建平台內核。
將來, 在內核編譯過程中,可以使用其他組件 LLVM,包括LLD,llvm-objcopy,llvm-ar,llvm-nm和llvm-objdump。
實驗性分區功能已添加到LLD鏈接器,該功能允許將程序分為多個部分,每個部分放置在單獨的ELF文件中。 此功能使您可以運行程序的主要部分,並根據需要加載該過程中的其餘組件(例如,您可以選擇將內置的PDF查看器作為單獨的文件,僅在以下情況下下載該文件)用戶打開文件PDF)。
另一方面,後端的眾多改進也很突出 適用於X86,AArch64,ARM,SystemZ,MIPS,AMDGPU和PowerPC體系結構。
例如,已為AArch2架構添加了對SVE64和MTE(內存標記擴展)指令的支持,對ARM後端添加了對Armv8.1-M架構和MVE架構的支持。
對於AMDGPU,添加了對GFX10架構的支持 (Navi),則啟用默認值以調用功能並傳遞已激活的組合DPP(數據基本體-並行)。
LLDB調試器向後引入了痕蹟的顏色突出顯示; 增加了對DWARF4 debug_types和DWARF5 debug_info塊的支持;
llvm-objcopy和llvm-strip實用程序增加了對COFF格式可執行文件和對象的支持。
RISC-V架構的後端穩定,它不再定位為實驗性,並且默認情況下已構建。 完全支持帶有MAFDC擴展的RV32I和RV64I指令集變體的代碼生成。