LLVM Pass中如何唯一标识一条指令?
How to uniquely identify an instruction in LLVM Pass?
所以我试图记录某些调用指令被调用的次数,并且我正在努力识别唯一的指令。我在文档中找不到作为指令 ID 的内容。我想获取 ID 并将其传递给知道如何完成这项工作的外部函数。
所以问题是如何获得这些指令的唯一 ID(最好是整数)?
我认为你在 运行时 上执行计数,并且在传递中你只是插入代码来执行你感兴趣的附近调用指令的计数。在这种情况下 Instruction
指针应该可以正常工作。如果移动 Instruction
指针不会改变,只有删除 Instruction
.
指针才会失效
要将指针转换为整数,请使用 static_cast<uintptr_t>(i)
。
如果您知道可能的调用指令类型,那么您只需为所有可能的调用指令类型声明一个枚举,并在您遇到该类型的调用指令时将枚举值传递给计数函数参数值。
如果您不知道所有可能的调用指令,那么您可以将调用指令所调用的函数的名称传递给计数函数。在这种情况下,您必须以维护函数名称映射和该函数计数的方式实现计数函数。
由于调用指令 returns 是该特定调用的值 (Value*
),我认为您获得的所有 Instruction*
指针都是唯一的。因此,如果您使用指针值作为 ID,它将无法达到您的目的。
所以我试图记录某些调用指令被调用的次数,并且我正在努力识别唯一的指令。我在文档中找不到作为指令 ID 的内容。我想获取 ID 并将其传递给知道如何完成这项工作的外部函数。
所以问题是如何获得这些指令的唯一 ID(最好是整数)?
我认为你在 运行时 上执行计数,并且在传递中你只是插入代码来执行你感兴趣的附近调用指令的计数。在这种情况下 Instruction
指针应该可以正常工作。如果移动 Instruction
指针不会改变,只有删除 Instruction
.
要将指针转换为整数,请使用 static_cast<uintptr_t>(i)
。
如果您知道可能的调用指令类型,那么您只需为所有可能的调用指令类型声明一个枚举,并在您遇到该类型的调用指令时将枚举值传递给计数函数参数值。
如果您不知道所有可能的调用指令,那么您可以将调用指令所调用的函数的名称传递给计数函数。在这种情况下,您必须以维护函数名称映射和该函数计数的方式实现计数函数。
由于调用指令 returns 是该特定调用的值 (Value*
),我认为您获得的所有 Instruction*
指针都是唯一的。因此,如果您使用指针值作为 ID,它将无法达到您的目的。