LLVM - 从具有偏移量的指针加载变量
LLVM - Load variable from pointer with offset
我有一个值,我们称之为 v
,属于 Type i8**
,它指向数组的第一个元素。如果我想获取数组第一个元素的变量值,我可以使用 Builder.CreateLoad(v);
。如果我想获取数组的第二个元素,是否有类似 CreateLoad()
的命令,但有一个偏移量?
我试过向 v
添加一个整数,但没有成功(出于某些我不知道的明显原因)。我也尝试过使用 Builder.CreateGEP(v, Vector<Value *>{ c64(0), c64(1) });
,但它也不起作用(c64
创建一个常量)。
你能帮忙吗?
所以我找到了解决方案。如果 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 常量)
我有一个值,我们称之为 v
,属于 Type i8**
,它指向数组的第一个元素。如果我想获取数组第一个元素的变量值,我可以使用 Builder.CreateLoad(v);
。如果我想获取数组的第二个元素,是否有类似 CreateLoad()
的命令,但有一个偏移量?
我试过向 v
添加一个整数,但没有成功(出于某些我不知道的明显原因)。我也尝试过使用 Builder.CreateGEP(v, Vector<Value *>{ c64(0), c64(1) });
,但它也不起作用(c64
创建一个常量)。
你能帮忙吗?
所以我找到了解决方案。如果 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 常量)