如何获取LLI执行跟踪

时间:2018-10-28 12:04:37

标签: llvm lli

有什么方法可以获取lli执行跟踪。作为给定程序的示例:

define dso_local i32 @main() {
  %1 = alloca i32, align 4
  store i32 1, i32* %1, align 4
  %2 = load i32, i32* %1, align 4
  ret i32 %2
}

我想要一些运行时输出,例如:

$ lli test.ll -trace

%1 = alloca(4)
st %1, 1       ; [%1] = 1
ld %1 -> %2    ; %2 = 1
ret %2         ; ret 1

我找到了一个XRay项目,但它似乎很复杂。有LLC本机方式来输出执行跟踪吗?

1 个答案:

答案 0 :(得分:1)

我没有找到一个,最终写出了足以满足我的需求但几乎不适合通用的东西。一个大问题是,任何代码都可以调用本机代码and most code does that very often,因此,跟踪程序在遇到无法处理的CallInst之前,只会跟踪一些指令。

如果您只对非常短的指令序列感兴趣,那么Analysis/ConstantFolding.h中的功能可能会有所帮助...或可能没有帮助,这取决于您的目的。如果您必须自己编写一个跟踪器,则可能需要查找使用InstVisitor的代码,其中某些代码可能是可用的,可重用的或良好的起点。祝你好运。