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

如何在LLVM Pass中唯一标识指令?,llvm,llvm-clang,llvm-ir,Llvm,Llvm Clang,Llvm Ir,因此,我试图记录某些调用指令被调用的次数,并且我正在努力唯一地识别这些指令。我在文档中找不到指令ID。我想获取ID并将其传递给知道如何执行此任务的外部函数 因此,问题是如何为这些指令获取唯一ID(最好是整数)?我认为您在运行时执行计数,在此过程中,您只需在感兴趣的调用指令附近插入执行计数的代码。在这种情况下,指令指针应该可以正常工作。如果移动指令,指针不会改变,只有删除指令,指针才会无效 要将指针转换为整数,请使用static\u cast(i)我假定您在运行时执行计数,在此过程中,您只需在感兴

因此,我试图记录某些调用指令被调用的次数,并且我正在努力唯一地识别这些指令。我在文档中找不到指令ID。我想获取ID并将其传递给知道如何执行此任务的外部函数


因此,问题是如何为这些指令获取唯一ID(最好是整数)?

我认为您在运行时执行计数,在此过程中,您只需在感兴趣的调用指令附近插入执行计数的代码。在这种情况下,
指令
指针应该可以正常工作。如果移动
指令
,指针不会改变,只有删除
指令
,指针才会无效


要将指针转换为整数,请使用
static\u cast(i)

我假定您在运行时执行计数,在此过程中,您只需在感兴趣的调用指令附近插入执行计数的代码。在这种情况下,
指令
指针应该可以正常工作。如果移动
指令
,指针不会改变,只有删除
指令
,指针才会无效


要将指针转换为整数,请使用
static\u cast(i)

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

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


由于调用指令为该特定调用返回一个值(
value*
),因此我认为您得到的所有
instruction*
指针都是唯一的。因此,如果您使用指针值作为ID,则不会达到您的目的。

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

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


由于调用指令为该特定调用返回一个值(
value*
),因此我认为您得到的所有
instruction*
指针都是唯一的。因此,如果您将指针值用作ID,它将不起作用。

我怀疑,您可以简单地将指令*的指针值用作ID。您好@arrowd!谢谢你的评论。你是说说明书的地址?此外,地址不能更改吗?还有,问题的第二部分,我如何才能将其作为Int或任何其他原始数据类型(而不是指针指向指令类型)?我想,您可以简单地使用
指令的指针值*
作为ID。Hi@arrowd!谢谢你的评论。你是说说明书的地址?此外,地址不能更改吗?还有,问题的第二部分,如何将其作为Int或任何其他原始数据类型(而不是作为指向指令类型的指针)获取?