compiler-construction - LLVM 如何进行 active 分析?

标签 compiler-construction llvm analysis

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

在挖掘 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/

相关文章:

java - 如何检查 JIT 编译器是否在 Java 中关闭

java - 编译器如何引用自己的输出

architecture - Lattix 架构分析工具

algorithm - 使用计数排序算法的一部分返回 a 和 b 之间的元素数

c - 未定义引用?但我已经实现了这个功能

c++ - llvm JIT 将库添加到模块

c++ - 如何为使用Clang LLVM编译的C++代码生成图形代码配置文件报告?

haskell - 使用 llvm 后端编译 haskell .ll 文件时出错

algorithm - 循环迭代分析第 2 部分

c# - 是否可以调试在运行时编译的代码?