LLVM特性

LLVM基本特性

用于C/C++的LLVM编译器系统包括以下内容:

  • 通用的C,C++,Objective-C,Fortran等的前端。它们支持ANSI标准的C和C++语言,其程度与GCC支持的程度相同。此外,还支持许多GCC扩展。
  • LLVM指令集的稳定实现,既作为在线和离线代码表示,又与汇编(ASCII)和字节码(二进制)读取器和写入器以及验证器一起使用。
  • 一个强大的pass管理系统,它根据它们的依赖性自动对pass(包括分析,转换和代码生成)进行排序,并将它们管道化以提高效率。
  • 广泛的全局标量优化。
  • 链接时过程间优化框架,具有丰富的分析和转换集,包括复杂的全程序指针分析,调用图构造以及对配置文件引导的优化的支持。
  • 易于重定向的代码生成器,目前支持X86,X86-64,PowerPC,PowerPC-64,ARM,Thumb,SPARC,Alpha,CellSPU,MIPS,MSP430,SystemZ和XCore。
  • Just-In-Time(JIT)代码生成系统,目前支持X86,X86-64,ARM,AArch64,Mips,SystemZ,PowerPC和PowerPC-64。
  • 支持生成DWARF调试信息。
  • 一个C语言后端用于测试和生成除上面列出的目标之外的目标上的本机代码。
  • 一个与gprof类似的分析系统。
  • 一个具有许多基准代码和应用程​​序的测试框架。
  • API和调试工具,可简化LLVM组件的快速开发。

LLVM优势特性

  • LLVM使用具有严格定义语义的简单低级语言
  • LLVM包含完整的C/C++前端,Java,Scheme和其他语言的前端正在开发中。
  • LLVM包括一个积极的优化器,包括标量,过程间,配置文件驱动和一些简单的循环优化。
  • LLVM支持终身编译模型,包括链接时,安装时,运行时和离线优化。
  • LLVM完全支持准确的垃圾收集。
  • LLVM代码生成器相对容易重新定位,并使用强大的目标描述语言。
  • LLVM拥有丰富的文档,并且已经托管了许多各种项目。
  • 许多第三方用户声称LLVM易于使用和开发。例如(现已删除的)Stacker前端是在4天内由一个对LLVM一无所知的人编写的。此外,LLVM还具有使开发更容易的工具。
  • LLVM正在积极开发中,并且不断得到扩展,增强和改进。
  • LLVM可在OSI批准的”three-clause BSD” license下免费获得。
  • LLVM目前由多个商业实体,非营利或学术实体使用,他们贡献了许多扩展和新功能。