我是一个刚开始学习编译器基础知识的初学者。
在挖掘LLVM时,我不确定在哪里查找活动性分析部分。
据我了解,变成LLVM IR的程序变成了DAG,然后变成了MIR。
本幻灯片介绍了活动性跟踪,我假设活动性分析是在MIR进行的。
因此,我正在查看诸如LiveVariables.cpp,LiveIntervalAnalysis.cpp之类的源代码,但是我不确定代码在哪里定义了诸如def,kill,imp-use之类的东西。
谁能告诉我在哪里可以找到这些代码以及如何在此过程中转储信息?
谢谢,
杰克
LLVM使用SSA形式的中间表示。SSA-形式IR意味着每个变量被定义一次,以及每次使用被支配由它的定义。支配是图论中的一个概念,从本质上讲,控制流程图中使用的所有路径都必须经过其定义。如果您愿意,有很多关于SSA的信息,以及如何从网络上的传统IR构建SSA的信息。
实际上,这种选择使基于数据流方程式的传统活动度分析变得不必要。SSA编译器没有计算每个基本块的实时集合,而是仅提供了一个函数来回答“此变量是否在此位置?”这一问题。
LLVM的活动性分析(用于寄存器分配)是在与目标无关的代码生成器中完成的,这意味着可以在lib/CodeGen
目录中找到许多代码。特别是,您可能对MachineBasicBlock :: computeRegisterLiveness以及lib/CodeGen/LiveVariables.cpp
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句