在LLVM传递中,我想记录一个循环的循环行程计数。我做的一个部分是在每个循环的标题块的终止符之前插入一个函数调用。我发现这个方法效果不好,因为如果一个循环有n次迭代,那么标题块将被执行n + 1次。这个事实适用于“for”和“while”循环,但它不适用于“do while”循环。我将函数调用插入第二个“for”和“while”循环块,并插入第一个“do while”循环块。只有当我知道目标循环的类型时,这才有效,这在纯粹的bitcode中是不可能的。我的问题是:是否有一种通用方式(处理所有类型的循环)来插入一个函数调用,它将被调用与迭代次数完全相同的时间。
答案 0 :(得分:0)
将函数调用放在循环体的开头。你为什么要把它放在标题中?
for (...) {
increment_trip_count();
...
}
答案 1 :(得分:0)
如果在循环体的开头插入函数调用,则会得到正确的计数。