如何获得LLVM中两条指令之间的距离?

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

我正在开发一种工具,该工具将使用LLVM将多个故障注入源代码。我需要将错误注入到begin指令中,然后再注入某些指令之后的指令。如何获得两条指令之间的距离(使用指令计数)?是否有任何方便的功能来实现这一目标,或者唯一的方法是迭代此块及其后继中的所有指令?

llvm llvm-ir
1个回答
0
投票

如果只需要基本块中指令之间的距离,则需要迭代基本块中的每条指令。例如。在https://github.com/llvm-mirror/llvm/blob/2c4ca6832fa6b306ee6a7010bfb80a3f2596f824/lib/Analysis/CodeMetrics.cpp#L121

中查看每个指令的迭代方式
  for (const Instruction &I : *BB) {
    // Skip ephemeral values.
    if (EphValues.count(&I))
      continue;

    // Special handling for calls.
    if (isa<CallInst>(I) || isa<InvokeInst>(I)) {
      ImmutableCallSite CS(&I);
...

如果要对基本块之间的指令之间的距离进行度量,这会有些复杂。它将要求使用每个基本块的DFS访问号。将DFS编号与指令相对于其基本块的位置一起使用时,可以使用一些距离的概念。

© www.soinside.com 2019 - 2024. All rights reserved.