我是一个初学者,刚刚学习了编译器的基础知识。
在挖掘 LLVM 时,我不确定在哪里查找 active 分析部分。
据我了解,转为LLVM IR的程序转为DAG,然后转为MIR。
这个slides引入了活跃度跟踪,我假设活跃度分析发生在 MIR。
所以我正在查看 LiveVariables.cpp、LiveIntervalAnalysis.cpp 等源代码,但我不确定代码在哪里定义像 def、kill、imp-use 这样的东西。
谁能告诉我在哪里可以找到这些代码以及如何在此过程中转储信息?
谢谢
jack
最佳答案
LLVM 使用 SSA 形式的中间表示。 SSA 形式 IR 意味着每个变量只定义一次,并且每次使用都由其定义主导。支配是图论中的一个概念,本质上意味着控制流图中的每条使用路径都必须经过其定义。如果您查看一下,网络上有大量有关 SSA 以及如何从传统 IR 构建 SSA 的信息。
实际上,这种选择使得基于数据流方程的传统 active 分析变得不必要。 SSA 编译器并不计算每个基本 block 的驻留集,而是仅仅提供一个函数来回答“这个变量是否驻留在这个位置?”的问题。
LLVM 出于寄存器分配目的而进行的 active 分析是在与目标无关的代码生成器中完成的,这意味着大部分代码可以在 lib/CodeGen
目录中找到。特别是,您可能对 MachineBasicBlock::computeRegisterLiveness 以及 lib/CodeGen/LiveVariables.cpp
关于compiler-construction - LLVM 如何进行 active 分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60429290/