- 深入理解LLVM:代碼生成
- 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉
- 777字
- 2024-12-18 16:44:27
1.2 LLVM主要子項(xiàng)目
經(jīng)過20多年的發(fā)展,LLVM已經(jīng)成為編譯器領(lǐng)域最成功的項(xiàng)目之一,其使用范圍非常廣泛,現(xiàn)代新型語言、工具等基本上都是基于LLVM實(shí)現(xiàn)的。LLVM不僅是一款編譯器,還是編譯器和工具鏈的集合,其主要子項(xiàng)目如下。
1)LLVM核心庫(即平常大家提到的LLVM):提供了編譯優(yōu)化器、各種后端的代碼生成,其輸入為LLVM IR,輸出為編譯器處理后的目標(biāo)架構(gòu)代碼。
2)Clang:LLVM原生支持的C/C++/Object-C編譯器,其中編譯優(yōu)化器和代碼生成模塊直接使用LLVM核心庫。Clang主要負(fù)責(zé)從C/C++/Object-C到LLVM IR的轉(zhuǎn)換、LLVM核心庫的調(diào)用,同時(shí)提供多樣化的前端處理工具,例如針對代碼分析的靜態(tài)分析器、針對代碼靜態(tài)檢查的工具(clang-tidy)、針對代碼風(fēng)格的自動(dòng)格式化工具(clang-format)等。
3)LLDB:基于LLVM核心庫及Clang構(gòu)建的調(diào)試器。
4)libc:C標(biāo)準(zhǔn)庫的實(shí)現(xiàn),支持C17和后續(xù)的C2x、POSIX標(biāo)準(zhǔn)。
5)libcxx:一種C++標(biāo)準(zhǔn)庫的實(shí)現(xiàn),包括iostreams和STL等庫的實(shí)現(xiàn),支持C++11、C++14等更高版本。
6)libunwind:提供基于DWARF標(biāo)準(zhǔn)的堆棧展開的輔助函數(shù),通常用于實(shí)現(xiàn)C++等語言的異常處理。在使用libunwind替代glibc中堆棧展開的功能時(shí),有可能還需要其他的庫(例如在Linux中還需要llvm-libgcc庫)的配合。
7)libcxxabi:在libunwind之上實(shí)現(xiàn)的C++異常處理功能,提供標(biāo)準(zhǔn)的C++異常函數(shù)。
8)libclc:OpenCL標(biāo)準(zhǔn)庫的實(shí)現(xiàn)。
9)OpenMP:一種OpenMP運(yùn)行時(shí)的實(shí)現(xiàn),OpenMP有助于多線程編程,提供并行化處理。
10)compiler-rt:提供獨(dú)立于編程語言的支持庫。compiler-rt包含通用函數(shù)(如32位i386后端的64位除法)、各種殺毒程序工具(sanitizers)、fuzzing庫、profling庫、插樁庫XRay等。
11)LLD:一種鏈接器的實(shí)現(xiàn)。
12)Flang:LLVM原生支持的Fortran編譯器前端。
13)pstl:并行STL的實(shí)現(xiàn)。
14)POLLY:多面體編譯器的實(shí)現(xiàn),主要實(shí)現(xiàn)了自動(dòng)并行、矢量化等優(yōu)化。
15)MLIR:通過定義多級IR框架,允許用戶自定義IR并重用基礎(chǔ)編譯器框架。目前有許多編譯器項(xiàng)目通過MLIR實(shí)現(xiàn),例如AI編譯器、Circt(EDA編譯器)等。
16)BOLT:鏈接后的優(yōu)化器,對鏈接后的二進(jìn)制代碼進(jìn)行優(yōu)化,例如通過收集運(yùn)行時(shí)信息,對代碼進(jìn)行重新布局,從而提高執(zhí)行效率。
- INSTANT OpenCV Starter
- JMeter 性能測試實(shí)戰(zhàn)(第2版)
- iOS開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App Store上架
- SEO實(shí)戰(zhàn)密碼
- Android Native Development Kit Cookbook
- HTML5入門經(jīng)典
- 深入RabbitMQ
- The Professional ScrumMaster’s Handbook
- PHP編程基礎(chǔ)與實(shí)踐教程
- IoT Projects with Bluetooth Low Energy
- Go語言入門經(jīng)典
- C語言程序設(shè)計(jì)
- C#從入門到精通(微視頻精編版)
- Python自動(dòng)化開發(fā)實(shí)戰(zhàn)
- Mastering MeteorJS Application Development