Compiler construction LLVM如何执行活性分析?

Compiler construction LLVM如何执行活性分析?,compiler-construction,llvm,analysis,Compiler Construction,Llvm,Analysis,我是一个初学者,刚刚学习了编译器的基础知识 在挖掘LLVM时,我不确定在哪里查找活动性分析部分 根据我的理解,变成LLVM IR的程序变成了DAG,然后变成了MIR 这引入了活性跟踪,我假设活性分析发生在MIR 因此,我正在查看LiveVariables.cpp、LiveIntervalAnalysis.cpp等源代码,但我不确定这些代码是如何定义def、kill、imp等内容的 有谁能告诉我在哪里可以找到这些代码,以及如何在此过程中转储信息 谢谢 JakeLLVM使用SSA形式的中间表示。SS

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

在挖掘LLVM时,我不确定在哪里查找活动性分析部分

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

这引入了活性跟踪,我假设活性分析发生在MIR

因此,我正在查看LiveVariables.cpp、LiveIntervalAnalysis.cpp等源代码,但我不确定这些代码是如何定义def、kill、imp等内容的

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

谢谢


Jake

LLVM使用SSA形式的中间表示。SSA形式IR意味着每个变量只定义一次,每次使用都由其定义决定。支配是图论中的一个概念,它本质上意味着控制流图中使用的每一条路径都必须通过其定义。关于SSA以及如何从web上的传统IR构建SSA的信息非常丰富

在实践中,这种选择使得基于数据流方程的传统活性分析变得不必要。SSA编译器没有计算每个基本块的活动集,只提供了一个函数来回答“此变量是否在此位置活动?”


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

其中一个文件在大约两年前被删除,IIRC,因此您可能希望使用更新版本的LLVM。除此之外,请查找ADCE.cpp和DCE.cpp。它们很简单,因为SSA中的活跃性很简单。感谢您的快速响应。我会查那些代码。