如何在LLVM Pass中唯一标识指令?

时间:2017-01-21 10:40:01

标签: llvm llvm-clang llvm-ir

所以我试图计算某些调用指令的调用次数,我正在努力识别指令。我在文档中找不到作为指令ID的内容。我想获取ID并将其传递给知道如何完成工作的外部函数。

所以问题是如何获得这些指令的唯一ID(最好是整数)?

2 个答案:

答案 0 :(得分:1)

我认为你在运行时上执行计数,并且在传递中你只是插入代码来执行你感兴趣的调用指令附近的计数。在这种情况下Instruction指针应该工作得很好。如果移动Instruction,指针不会改变,只有在删除Instruction时它才会变为无效。

要将指针转换为整数,请使用static_cast<uintptr_t>(i)

答案 1 :(得分:0)

如果您知道可能的调用指令类型,那么您可以为所有可能类型的调用指令声明一个枚举,并在您根据参数遇到该类型的调用指令时将枚举值传递给计数函数值。

如果您不知道所有可能的调用指令,则可以将调用指令调用的函数名称传递给计数函数。在这种情况下,您必须以这样的方式实现计数功能,即它维护函数名称的映射和该函数的计数。

由于调用指令返回该特定调用的值(Value*),我认为您获得的所有Instruction*指针都是唯一的。因此,如果您将指针值用作ID,则无法满足您的目的。