在llvm中访问变量Element of Array

时间:2013-04-11 23:19:40

标签: llvm llvm-c++-api

我想在变量索引处获取数组的值。索引由程序计算,在解析时不知道。所以它存储在Value中并转换为Int,如下所示:

Value *IndexV = Index->Codegen();
Value *IntV = Builder.CreateFPToUI( IndexV, Type::getInt32Ty( getGlobalContext() ) );

如果我知道索引,我可以使用:

Value *VV = Builder.CreateExtractValue( Builder.CreateLoad( V ), 0 );

这给了我数组的第一个元素。并且工作正常。但是如何使用IntV作为索引? CreateExtractValue只接受一个ArrayRef,并且无法将IntV转换为ArrayRef,或者我错了?怎么会做这样的事情?

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,每当需要ArrayRef时,您始终只能传递一个项目,因为TArrayRef<T>之间只有an implicit conversion

具体来说,extractvalue需要常量索引,并且不能接受一般值,这就是它需要unsigned值的原因。如果要访问数组中未知索引中的元素,请使用getelementptr指令:在索引为0和IntV的数组地址上调用它,您应该获得指向位于IntV的数组。