LLVM-从具有偏移量的指针加载变量

时间:2019-04-17 09:08:11

标签: c++ llvm

我有一个[(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (3, 'a'), (4, 'a')] 的值v,它指向数组的第一个元素。如果要获取作为数组第一个元素的变量的值,则可以使用Type i8**。如果我想获取数组的第二个元素,是否有一个像Builder.CreateLoad(v);这样的命令,但是有一个偏移量?

我尝试将整数添加到CreateLoad()中,但是它没有用(出于某些显而易见的原因,我不知道)。我也尝试过使用v,但是它也不起作用(Builder.CreateGEP(v, Vector<Value *>{ c64(0), c64(1) });创建一个常量)。

你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

所以我找到了解决方案。如果v是数组,则Builder.CreateGEP(v, Vector<Value *>{ c64(0), c64(5) })正确加载v的第6个元素。如果v是指向矩阵(i8 **)的指针,那么对我有用的是: Builder.CreateGEP(Builder.CreateLoad(p.first), c64(5)),可以正确加载v指向的数组的第6个元素。 (函数c64()创建一个64位的int常量)