LLVM如何执行活力分析



我是一个刚刚学习编译器基础知识的初学者。

在挖掘LLVM时,我不确定在哪里可以查找活跃度分析部分。

根据我的理解,变成LLVM IR的程序变成了DAG,然后变成了MIR。

这张幻灯片介绍了活跃度跟踪,我假设活跃度分析发生在MIR。

因此,我正在查看LiveVariables.cpp、LiveIntervalAnalysis.cpp等源代码,但我不确定代码在哪里定义def、kill、imp-use等内容。

有人能告诉我在哪里可以找到这些代码,以及如何在这个过程中转储信息吗?

谢谢,

Jake

LLVM使用SSA形式的中间表示。SSA形式IR意味着每个变量只定义一次,每次使用都由其定义主导。支配是图论中的一个概念,本质上意味着控制流图中的每一条使用路径都必须通过其定义。如果你看的话,网上有很多关于SSA的信息,以及如何从传统的IR构建SSA。

在实践中,这种选择使得基于数据流方程的传统活性分析变得不必要。SSA编译器不计算每个基本块的生存集,而只是提供一个函数来回答"这个变量在这个位置生存吗?">

为了寄存器分配的目的,LLVM的活跃度分析是在独立于目标的代码生成器中完成的,这意味着大部分代码可以在lib/CodeGen目录中找到。特别是您可能对MachineBasicBlock::computeRegisterLiveness以及lib/CodeGen/LiveVariables.cpp感兴趣

最新更新