在LLVM IR中提取名称

时间:2017-09-20 16:05:52

标签: variables llvm extract

我目前正在使用LLVM编写传递,我对变量/参数/参数名称有几个问题。

  1. 说我有这个结构:

    struct Kid {
        char name[30];
        int age;
        char hobby[30];
    };
    
  2. 我正在运行模块传递,并在模块中找到Kid对应的StructType。我想使用Kid成员的名字,但我不知道如何访问它们。我尝试使用element_iterator但它只返回Type成员。如何访问结构数据成员的名称?

    编辑:这样做的目的是让我能够确定我正在处理的'char'类型的成员是'name'还是'hobby',所以我可以在每种情况下执行不同的操作。类似的东西:

        case "name" do something;
        case "hobby" do something else;
    

    是否有另一种方法可以区分相同类型的成员?

    1. 说我有一个功能foo(int a, int b)。 如何获取函数参数的名称? 我尝试在arg_iterator的电话上运行foo来查找 参数,但是当我在参数上调用getName()时,它返回一个空的StringRef
    2. 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

LLVM IR中没有“字段名称”。实际上,类型的名称仅用于调试目的,因此您永远不应该依赖它们。对于用于表示参数的值的名称也是如此 - 它们很容易被删除。

如果您需要源名称,那么您需要依赖调试信息。