LLVM如何执行活动性分析?

问题描述 投票:1回答:1

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

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

根据我的理解,转换为LLVM IR的程序转换为DAG,然后转换为MIR。

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

因此,我正在查看诸如LiveVariables.cpp,LiveIntervalAnalysis.cpp之类的源代码,但是我不确定代码在哪里定义了诸如def,kill,imp-use之类的东西。

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

谢谢,

杰克

compiler-construction llvm analysis
1个回答
1
投票

LLVM使用SSA形式的中间表示。 SSA形式的IR意味着每个变量仅定义一次,并且每次使用均由其定义主导。支配是图论中的一个概念,从本质上讲,控制流程图中使用的所有路径都必须经过其定义。如果您愿意,有很多关于SSA的信息,以及如何从网络上的传统IR构建SSA的信息。

实际上,此选择使基于数据流方程式的传统活动度分析变得不必要。 SSA编译器没有计算每个基本块的实时集合,而是仅提供了一个函数来回答“此变量是否在此位置?”的问题。

LLVM用于寄存器分配的活动性分析是在与目标无关的代码生成器中完成的,这意味着可以在lib/CodeGen目录中找到许多代码。特别是,您可能对MachineBasicBlock :: computeRegisterLiveness以及lib/CodeGen/LiveVariables.cpp

感兴趣
© www.soinside.com 2019 - 2024. All rights reserved.