【发布时间】:2018-06-09 16:34:53
【问题描述】:
考虑以下代码:
int main() {
int a = 0;
int b = 1;
for (int i = 0; i < 3; i++) {
a = 2;
int c = 1;
int d = 3;
d = a + c;
}
a = b+2;
}
在上面的代码中,三个变量的生命周期包含在循环体中(i、c 和 d)。我希望能够使用 LLVM 计算其寿命存在于任何给定循环主体中的变量(即对于这个循环,我的代码应该返回 3)。
我找到了Live Variables Analysis,但我无法使用它来查找我上面描述的内容。
【问题讨论】:
-
请注意,编译器可能会将您的代码优化为
int main(){}。所以分析编译后的代码可能会产生一些惊喜。 -
@Bathsheba 没关系,我只想确定优化后的 IR 中的任何变量。我不太关心原始的 C++ 代码。
-
这是一个有趣的问题(我赞成),但如果我需要分析编译器做了什么,我会检查程序集。也许我错过了你的问题的重点?
-
@Bathsheba 我有大量的 for 循环,我需要从中自动提取各种特征。不幸的是,由于循环的数量,自己手动检查是不可行的。这是一个更大的研究项目的一部分。
-
我不是 llvm 专家,但是查看 generated AST 应该很容易枚举所有属于 ForStmt 子级的 VarDecl ...(嗯,这取决于您的确切意思“实时变量”,但你明白了)