LLVM编译架构

##本质特点
LLVM全称为Low Level Virtual Machine正如其名,LLVM本质上是一个虚拟机,具有通用的指令集和寄存器,而且有独立的汇编语法,并可在上面独立运行bitcode程序。

##编译原理
LLVM编译的本质就是建立映射关系:一是前端源码操作序列和LLVM IR指令映射二是后端LLVM IR指令和后端目标指令映射LLVM IR作为一种抽象机器模型,建立了前后端操作序列和目标指令映射的桥梁。

为了方便映射,LLVM IR提供了丰富的指令集和无限虚拟寄存器,基于特有算法来完成自动匹配映射。此外,用户还可通过intrinsics方式扩展复杂指令,建立手动映射关系。

##静态模型
Model:(Input/Output)
对LLVM IR文件以Module来组织,每个Module有多个串行或者嵌套的Function组成,而每个Function又有多个BasicBlock组成,每个Block包含几条指令操作。

Pass:(Function/Process)
每个阶段的处理过程都称之为Pass根据层级划分为ModulePass, FunctionPass两大类,ImmutablePass固定处理继承MP,MachineFunctionPass继承FP。Backend主要Pass有三大步:Instruction SelectionRegister AllocationPre/Post RA Scheduling

Table:(Config Params)
目标机器通过td来描述是其特征,寄存器组,指令集和约束关系。后端处理过程中,TableGen先将td描述解析为Inc定义集合。CodeGen会根据目标提供的资源集合和约束关系,选择特定的算法来进行自动映射。

##运行模型
Schedule:(Tasklet)
llc命令启动后,首先,解析命令和参数,获取IR文件,获取目标和配置参数TD文件;然后,根据目标和用户配置,选择相应的Pass配置,加载到Pipeline上去;最后,通过PassManager来统一组织,管理,并运行所有已加载的Pass。

Pipeline:(Passes)
首先,每个目标Target都会加载特定的Passes,按照注册表上依赖关系,提前组织好调度顺序,放于PM队列中依次流水处理。其次,每个Pass处理时,遍历IR对象Module中的每个Function,及其下的每个BasicBlock(DAG),进而是每条指令Instr(SDNode)。

Object: (Transform & Analysis)
从源码到目标文件经历了很多阶段,每个阶段以不同的表示模型存在。Source Code, Tokens, AST, LLVM IRLLVM IR, SelectionDAG, MIR, MCinstAssembly Code, Object File, Executable File

你可能感兴趣的:(笔记)