LLVM 编译器和工具链技术
LLVM 編譯器和工具鏈技術
LLVM概述
LLVM項目是模塊化和可重用的編譯器和工具鏈技術的集合。盡管名稱如此,LLVM與傳統虛擬機幾乎沒有關系。LLVM本身不是首字母縮略詞,項目的全名。
LLVM開始是作為伊利諾大學的一個研究項目,提供提一個現代化的、基于SSA編譯策略的、同時支持靜態和動態編譯,任何編程語言的編譯器架構。LLVM已經發展成為一個由多個子項目組成的總體項目,其中許多子項目正在被各種商業和開源項目用于生產環境,廣泛用于學術研究。LLVM項目中的代碼均是以“Apache 2.0 License with LLVM exceptions”許可證進行許可進行發布。
LLVM的主要子項目
項目與概述
LLVM Core libraries:LLVM內核庫提供一個現代化的、與源代碼和目標機器無關的優化器,提供一個支持主流CPU(以及一些不常見的!)目標代碼生成器。
LLVM內核庫是圍繞著一個被很好的定義的、被稱作LLVM中間表示的代碼表示(”LLVM IR”)的代碼表示展開的。
LLVM內核庫擁有優秀的文檔,使用LLVM作為優化器和代碼生成器,使得發明新語言(或者移植現有的編譯器)變得十分簡單。
Clang:Clang是一個”LLVM原生”C/C++/Objective-C編譯器,旨在提供驚人的快速編譯(例如,在調試配置中編譯Objective-C代碼時比GCC快3倍),非常有用的錯誤和警告消息,提供用于構建優秀源代碼工具的平臺。Clang靜態分析器,可以自動查找代碼中的錯誤,可以使用clang前端的庫,解析C/C++代碼。
LLDB:LLDB項目是建立在LLVM和Clang上的優秀本地調試庫。使用Clang AST和表達式解析器,LLVM JIT,LLVM反匯編程序等,提供“正常工作”的體驗。在加載符號時,比GDB快速且內存效率更高。
libc++ & libc++ ABI:libc++和libc++ ABI項目,提供了一個標準的符合性和高性能執行的C++標準庫,包括C++11和C++14的全力支持。
compiler-rt Compiler-rt項目提供了高度調整,如“低級別的代碼生成器支持例程的實現__fixunsdfdi”等,產生通話時,目標不具有本地指令的短序列,實現核心IR操作。還為動態測試工具(如AddressSanitizer,ThreadSanitizer,MemorySanitizer和DataFlowSanitizer),提供了運行時庫的實現 。
OpenMP:OpenMP子項目提供一個clang實現中,使用OpenMP實現運行時庫。
Polly:polly項目實現用多面體模型,一套高速緩存局部性優化的,以及自動并行和矢量化。
Libclc:libclc項目旨在實現OpenCL標準庫
Klee:項目實現了一個“象征性的虛擬機”,采用一個定理證明,試圖評估在努力發現問題和證明的功能性,通過程序中的所有動態路徑。klee的一個主要特性,可以在檢測到錯誤時,生成測試用例。
SAFECode:SAFECode項目是C/C++程序的存儲器安全編譯器。通過運行時檢查來檢測代碼,以便在運行時檢測內存安全錯誤(例如,緩沖區溢出)。可用于保護軟件免受安全攻擊,也可用作Valgrind等內存安全錯誤調試工具。
LLD:LLD是一個新的連接器。這是系統鏈接器的直接替代品,運行速度更快。英特爾為其 C/C++ 編譯器全面采用 LLVM
除了LLVM的官方子項目之外,還有許多其它項目使用LLVM的組件,執行各種任務。通過這些外部項目,可以使用LLVM來編譯Ruby,Python,Haskell,Java,D,PHP,Pure,Lua和許多其它語言。LLVM的主要優勢在于其多功能性,靈活性和可重用性,用于各種不同任務:從輕量級JIT編譯嵌入式語言(如Lua),到編譯Fortran代碼(用于大型超級計算機)。
英特爾為C/C++ 編譯器全面采用 LLVM
英特爾的長期編譯器專家 James Reinders透露,將在下一代英特爾 C/C++ 編譯器中使用 LLVM 開源基礎架構;并分享了一些相關信息。
“LLVM 有助于實現為英特爾架構,提供最佳 C/C++ 編譯器的目標。最新的英特爾 C/C++ 編譯器,使用 LLVM,可提供更快的編譯時間、更好的優化、增強的標準支持,以及對 GPU 和 FPGA 卸載的支持…采用 LLVM 的好處很多,將提供從經典編譯器,升級到基于 LLVM 的編譯器的建議。致力于使其盡可能的無縫,同時,為使用英特爾編譯器的開發者帶來眾多好處。”在構建時間方面,英特爾工程師報告,新的基于 LLVM 的 oneAPI DPC++/C++ Compiler 2021.3 的構建時間,相較經典 C++ 編譯器要減少了 14%。雖然經典英特爾 C++ 編譯器,一直比上游的 LLVM 和 GCC 快,但 oneAPI DPC++/C++ Compiler 2021.3,可提供比 GCC 11.1 快 41% 的性能。新的基于 LLVM 的編譯器的浮點性能,比 ICC 高約 19%。
James 表示,在基于 LLVM 的編譯器中,專注于新功能和硬件支持。包括在其中添加了對 GPU 和 FPGA 的高度優化支持,繼續致力于提供 CPU 優化。基于 LLVM 的編譯器,將支持 SYCL、C++20、OpenMP 5.1 和 OpenMP GPU 目標設備。“鼓勵用戶通過現在轉向,基于 LLVM 的 C/C++ 編譯器,利用更快的構建時間、更高級別的優化和新功能。英特爾長期致力于 LLVM,以幫助持續創新,以及對行業領先優化的不懈追求。”建議所有新項目,都使用基于 LLVM 的英特爾 C/C++ 編譯器,現有項目也應計劃遷移到新的編譯器。James 稱,在未來的某個時間點,經典 C/C++ 編譯器,將進入"Legacy Product Support"模式。標志著對經典編譯器基礎的定期更新結束,將不再出現在 oneAPI 工具包中。“全新的基于 LLVM 的 Intel C/C++,已與經典版本達到同等水平,基于 LLVM 的 C/C++ ,提供了最佳優化技術。建議所有用戶現在就嘗試新的 C/C++ 編譯器,享受好處并提供反饋。”此外,基于 LLVM 的英特爾 Fortran 編譯器,也正在進行中。目前,已有一個基于 LLVM 的 Fortran 編譯器測試版,提供了對 Fortran 的廣泛支持,還有一些功能仍在開發中。
參考鏈接:
https://llvm.liuxfe.com/
https://baijiahao.baidu.com/s?id=1707766059390977538&wfr=spider&for=pc
總結
以上是生活随笔為你收集整理的LLVM 编译器和工具链技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科技公司合作伙伴清单
- 下一篇: LLVM一些语法规则