如何使用llvm

时间:2019-04-12 17:17:47

标签: llvm

给出一些源代码,我想创建一个llvm传递,以提取与所有功能参数列表有关的信息。 如何提取作为输入传递给函数的数组的大小?

例如:

foo(int A[100]){
 ...
}

我想获得以下信息: 1)数组中元素的类型 2)数组的大小(对于多维数组,其大小与不同的维度相关联。)

在llvm传递中,我有一个函数,该函数在输入中给出了llvm :: Type,以检查它是哪种类型,并提取所需的信息,并在需要时递归调用自身以分析其他Type元素:

if ( argType->isPointerTy() ){
    errs() << "Is a pointer.\n";
    Type *Pointer_Type = argType->getPointerElementType();
    IdentifyArgType(Pointer_Type);
}

但是,使用此功能,我只能获得实现为数组类型(int)的信息。如何提取数组的大小?

我的猜测是我必须检索指向元素的llvm :: Type,但无法弄清楚如何访问该对象。

1 个答案:

答案 0 :(得分:0)

尝试将参数类型转换为ArrayType(而不是元素类型),然后使用getNumElements函数。 参见http://llvm.org/doxygen/classllvm_1_1ArrayType.html