2

我想要一种简单而快速的方法来收集LLVM 位码中的每条指令在应用程序的给定运行中执行的次数。据我所知,我可以采取多种方法:

  • 使用密码。这需要使用 DWARF 调试信息和指令调试信息来尝试将二进制中的指令映射到位码中的指令;不是 100% 确定这将是多么准确。

  • 使用 llvm-prof。这里有两个问题。首先,我在Stack Overflow上看到了opt调用--insert-edge-profiling. 但是,该选项似乎在 3.6 中不可用?其次,这种分析似乎只记录功能级别的执行计数,而不是单个指令级别的执行计数。那是对的吗?

  • 编写一个类似于AddressSanitizer的新工具。这可能有效,但似乎有点矫枉过正。

有没有更简单的方法来实现我所缺少的目标?

4

1 回答 1

1

作为我博士研究的一部分,我编写了一个工具来收集程序执行的基本块的踪迹。该工具还记录每个基本块中的 LLVM 指令数,因此对跟踪的分析将给出动态指令执行计数。

另一个研究工具是Harmony。它将提供程序中每个基本块的动态执行计数,您可以使用静态指令计数对其进行扩展。

否则,我建议编写自己的工具。对于每个基本块,(原子地)将全局计数器增加该块中的指令数。

于 2015-05-28T15:02:35.003 回答