Skip to content
ShenYj edited this page Dec 8, 2021 · 1 revision

llvm

llvm简介

LLVM(https://llvm.org)命名源自 Low Level Virtual Machine,是一个强大的编译器开发工具套件。

LLVM的核心库提供了现代化的 source-target-independent 优化器 和支持诸多流行CPU架构的代码生成器,这些核心代码是围绕着LLVM IR(中间代码)建立的。

基于LLVM,又衍生出了一些强大的子项目:Clang和LLDB。

llvm特点

LLVM项目是模块化、可重用的编译器以及工具链技术的集合。

  • 传统编译器架构

    • Frontend:前端

      词法分析、语法分析、语义分析、生成中间代码

    • Optimizer:优化器

      中间代码优化

    • Backend:后端

      生成机器码

  • LLVM架构

    不同的前端后端使用统一的中间代码LLVM Intermediate Representation (LLVM IR)
    如果需要支持一种新的编程语言,那么只需要实现一个新的前端
    如果需要支持一种新的硬件设备,那么只需要实现一个新的后端
    优化阶段是一个通用的阶段,它针对的是统一的LLVM IR,不论是支持新的编程语言,还是支持新的硬件设备,都不需要对优化阶段做修改
    相比之下,GCC的前端和后端没分得太开,前端后端耦合在了一起。所以GCC为了支持一门新的语言,或者为了支持一个新的目标平台,就 变得特别困难

    LLVM现在被作为实现各种静态和运行时编译语言的通用基础结构(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)

Clang与LLVM关系

LLVM整体架构,前端用的是clang,广义的LLVM是指整个LLVM架构,一般狭义的LLVM指的是LLVM后端(包含代码优化和目标代码生成)。

源代码(c/c++)经过clang--> 中间代码(经过一系列的优化,优化用的是Pass) --> 机器码

外链

Getting Started

Social

Clone this wiki locally