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

  • 深入理解LLVM:代碼生成
  • 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉
  • 777字
  • 2024-12-18 16:44:27

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:鏈接后的優化器,對鏈接后的二進制代碼進行優化,例如通過收集運行時信息,對代碼進行重新布局,從而提高執行效率。

主站蜘蛛池模板: 石狮市| 阿克苏市| 长葛市| 汨罗市| 平顺县| 韩城市| 商水县| 突泉县| 渭源县| 明溪县| 宾川县| 启东市| 慈利县| 荥阳市| 隆林| 砀山县| 日照市| 汉中市| 鄯善县| 上虞市| 临猗县| 蛟河市| 霍邱县| 资溪县| 东源县| 循化| 淮阳县| 楚雄市| 巴南区| 那坡县| 慈利县| 慈溪市| 海兴县| 恭城| 宽甸| 凌云县| 五常市| 沙雅县| 拉萨市| 双城市| 宁波市|