官术网_书友最值得收藏!

1.2 LLVM主要子項目

經過20多年的發展,LLVM已經成為編譯器領域最成功的項目之一,其使用范圍非常廣泛,現代新型語言、工具等基本上都是基于LLVM實現的。LLVM不僅是一款編譯器,還是編譯器和工具鏈的集合,其主要子項目如下。

1)LLVM核心庫(即平常大家提到的LLVM):提供了編譯優化器、各種后端的代碼生成,其輸入為LLVM IR,輸出為編譯器處理后的目標架構代碼。

2)Clang:LLVM原生支持的C/C++/Object-C編譯器,其中編譯優化器和代碼生成模塊直接使用LLVM核心庫。Clang主要負責從C/C++/Object-C到LLVM IR的轉換、LLVM核心庫的調用,同時提供多樣化的前端處理工具,例如針對代碼分析的靜態分析器、針對代碼靜態檢查的工具(clang-tidy)、針對代碼風格的自動格式化工具(clang-format)等。

3)LLDB:基于LLVM核心庫及Clang構建的調試器。

4)libc:C標準庫的實現,支持C17和后續的C2x、POSIX標準。

5)libcxx:一種C++標準庫的實現,包括iostreams和STL等庫的實現,支持C++11、C++14等更高版本。

6)libunwind:提供基于DWARF標準的堆棧展開的輔助函數,通常用于實現C++等語言的異常處理。在使用libunwind替代glibc中堆棧展開的功能時,有可能還需要其他的庫(例如在Linux中還需要llvm-libgcc庫)的配合。

7)libcxxabi:在libunwind之上實現的C++異常處理功能,提供標準的C++異常函數。

8)libclc:OpenCL標準庫的實現。

9)OpenMP:一種OpenMP運行時的實現,OpenMP有助于多線程編程,提供并行化處理。

10)compiler-rt:提供獨立于編程語言的支持庫。compiler-rt包含通用函數(如32位i386后端的64位除法)、各種殺毒程序工具(sanitizers)、fuzzing庫、profling庫、插樁庫XRay等。

11)LLD:一種鏈接器的實現。

12)Flang:LLVM原生支持的Fortran編譯器前端。

13)pstl:并行STL的實現。

14)POLLY:多面體編譯器的實現,主要實現了自動并行、矢量化等優化。

15)MLIR:通過定義多級IR框架,允許用戶自定義IR并重用基礎編譯器框架。目前有許多編譯器項目通過MLIR實現,例如AI編譯器、Circt(EDA編譯器)等。

16)BOLT:鏈接后的優化器,對鏈接后的二進制代碼進行優化,例如通過收集運行時信息,對代碼進行重新布局,從而提高執行效率。

主站蜘蛛池模板: 赤峰市| 莱州市| 吴川市| 潜山县| 灵山县| 广州市| 彝良县| 蒙山县| 长寿区| 阿合奇县| 樟树市| 若尔盖县| 台北县| 论坛| 徐州市| 北安市| 北票市| 沁源县| 石泉县| 新津县| 临沂市| 彩票| 四平市| 石林| 拉孜县| 安丘市| 天峻县| 武平县| 沧源| 福鼎市| 马关县| 绥棱县| 贵州省| 松原市| 英德市| 军事| 泗水县| 新昌县| 宜兰县| 辽阳县| 资阳市|