- 深入理解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:鏈接后的優化器,對鏈接后的二進制代碼進行優化,例如通過收集運行時信息,對代碼進行重新布局,從而提高執行效率。
- Instant Testing with CasperJS
- Building a Game with Unity and Blender
- Learning RabbitMQ
- Mastering Julia
- Functional Kotlin
- Ext JS 4 Web Application Development Cookbook
- Mastering Linux Network Administration
- 利用Python進行數據分析(原書第3版)
- 自然語言處理Python進階
- Getting Started with LLVM Core Libraries
- BeagleBone Black Cookbook
- Unity 2018 Augmented Reality Projects
- AngularJS UI Development
- Elasticsearch搜索引擎構建入門與實戰
- Mastering Python