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

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í)行效率。

主站蜘蛛池模板: 卓资县| 宁远县| 剑川县| 临沂市| 九龙坡区| 华蓥市| 巴南区| 肇庆市| 淅川县| 新田县| 尼勒克县| 监利县| 武邑县| 遂宁市| 鄢陵县| 临城县| 正宁县| 屏东市| 鲁甸县| 慈溪市| 宜川县| 绍兴县| 临沭县| 河源市| 青龙| 灵石县| 望谟县| 治多县| 高阳县| 舒城县| 贺州市| 抚宁县| 阳高县| 巨鹿县| 岗巴县| 雷州市| 广宁县| 左权县| 托里县| 黎平县| 惠安县|