当前位置:网站首页>LLVM TargetPassConfig

LLVM TargetPassConfig

2022-06-24 20:15:00 Huo的藏经阁

TargetPassConfig

TargetPassConfig类是LLVM 后端添加pass入口,LLVM 框架将整个后端依次划分为指令选择、指令调度,寄存器分配等几个阶段,,如下图:

其中每个阶段包含有一个或者多个pass,LLVM后端一个重要的处理就是兼容性和模块化,为了对这些后端所加的pass进行管理,LLVM后端对上述几个比较重要的阶段封装成接口,而每个接口基本代表一个 重要阶段,每个target可以根据需要添加所需要pass,

TargetPassConfig该类为codegen中各个阶段提供了各个接口,提供主要接口如下:

接口

说明

addISelPasses

添加所有必须的从llvm IR转成生成MIpass

addIRPasses

添加对llvm IR->IR的优化pass

addPassesToHandleExceptions

添加较低级别的各种异常pass,这些pass主要处理CodeGen中产生的各种异常

addCodeGenPrepare

LLVM IR这个级别中添加CodeGen前准备的pass,这些pass此时还只处理IR,因此需要在addPassesToHandleExceptions之前添加

addISelPrepare

添加指令选择前的一些优化IRpass,这个阶段也处于IR阶段,还未转换成DAG,主要优化IR

addInstSelector

添加指令选择器selector以及必要pass

addIRTranslator

添加IR转换成机器码相关pass,调用关系时addIRTranslatoràaddInstSelector

addMachinePasses

添加一套CodeGen标准所需要的pass

addMachineSSAOptimization

SSA优化所需要添加pass

addPreRegAlloc/addPostRegAlloc

分别是寄存器分配前/后所需要添加pass

addFastRegAlloc

快速分配寄存器所需要添加pass

addPassesToGenerateCode

addPassesToGenerateCode函数为添加CodeGen Pass总入口:

/// addPassesToX helper drives creation and initialization of TargetPassConfig.
static TargetPassConfig *
addPassesToGenerateCode(LLVMTargetMachine &TM, PassManagerBase &PM,
                        bool DisableVerify,
                        MachineModuleInfoWrapperPass &MMIWP) {
  // Targets may override createPassConfig to provide a target-specific
  // subclass.
  TargetPassConfig *PassConfig = TM.createPassConfig(PM);
  // Set PassConfig options provided by TargetMachine.
  PassConfig->setDisableVerify(DisableVerify);
  PM.add(PassConfig);
  PM.add(&MMIWP);

  if (PassConfig->addISelPasses())
    return nullptr;
  PassConfig->addMachinePasses();
  PassConfig->setInitialized();
  return PassConfig;
}
  •  createPassConfig :根据PM 创建对应target 的  TargetPassConfig ,每个target都会基于该类,对阶段中重要接口重新实现以实现添加独有pass,而不会影响其他target
  • PassConfig->addISelPasses:添加指令选择阶段中所需要的pass 总入口
  •  PassConfig->addMachinePasses(): 指令由IR 转换成机器码之后,所添加的pass,包括寄存器分配,以及机器码级别优化pass等

AMDGPU TargetPassConfig

新写一个后端时,一个重要内容就是实现该target 所需要的添加pass, 以AMDGPU为例TargetPassConfig继承关系如下:

  •  AMDGPUPassConfig: 是所有AMDGPU后端所必须要添加的pass
  • GCNPassConfig和 R600PassConfig分别针对的是GCN 和R600 平台。
原网站

版权声明
本文为[Huo的藏经阁]所创,转载请带上原文链接,感谢
https://zhikunhuo.blog.csdn.net/article/details/125416708