如何在llvm的cpp api中使用CreateInBoundsGEP来访问数组的元素?
How to use CreateInBoundsGEP in cpp api of llvm to access the element of an array?
我是 llvm 编程的新手,我正在尝试编写 cpp 来为这样的简单 C 代码生成 llvm ir:
int a[10];
a[0] = 1;
我想生成这样的东西来将 1 存储到 [0]
%3 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 0
store i32 1, i32* %3, align 16
我尝试了 CreateGEP
: auto arrayPtr = builder.CreateInBoundsGEP(var, num);
其中 var
和
num
都是 llvm::Value*
类型
但我只得到
%1 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i32 0
store i32 1, [10 x i32]* %1
找了很久google,看了llvm手册,还是不知道用什么Cppapi,怎么用。
如能提供帮助,不胜感激!
请注意,IRBuilder::CreateInBoundsGEP
(1st overload) 的第二个参数实际上是 ArrayRef<Value *>
,这意味着它接受一个 Value *
值的数组(包括 C 样式数组、std::vector<Value *>
和std::array<Value *, LEN>
等)。
要生成具有多个(子)地址的 GEP 指令,将 Value *
的数组传递给第二个参数:
Value *i32zero = ConstantInt::get(contexet, APInt(32, 0));
Value *indices[2] = {i32zero, i32zero};
builder.CreateInBoundsGEP(var, ArrayRef<Value *>(indices, 2));
哪个会产生
%1 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i32 0, i32 0
可以正确识别出%1
是i32*
类型,指向%0
指向的数组中的第一项。
关于 GEP 指令的 LLVM 文档:https://llvm.org/docs/GetElementPtr.html
我是 llvm 编程的新手,我正在尝试编写 cpp 来为这样的简单 C 代码生成 llvm ir:
int a[10];
a[0] = 1;
我想生成这样的东西来将 1 存储到 [0]
%3 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 0
store i32 1, i32* %3, align 16
我尝试了 CreateGEP
: auto arrayPtr = builder.CreateInBoundsGEP(var, num);
其中 var
和
num
都是 llvm::Value*
但我只得到
%1 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i32 0
store i32 1, [10 x i32]* %1
找了很久google,看了llvm手册,还是不知道用什么Cppapi,怎么用。
如能提供帮助,不胜感激!
请注意,IRBuilder::CreateInBoundsGEP
(1st overload) 的第二个参数实际上是 ArrayRef<Value *>
,这意味着它接受一个 Value *
值的数组(包括 C 样式数组、std::vector<Value *>
和std::array<Value *, LEN>
等)。
要生成具有多个(子)地址的 GEP 指令,将 Value *
的数组传递给第二个参数:
Value *i32zero = ConstantInt::get(contexet, APInt(32, 0));
Value *indices[2] = {i32zero, i32zero};
builder.CreateInBoundsGEP(var, ArrayRef<Value *>(indices, 2));
哪个会产生
%1 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i32 0, i32 0
可以正确识别出%1
是i32*
类型,指向%0
指向的数组中的第一项。
关于 GEP 指令的 LLVM 文档:https://llvm.org/docs/GetElementPtr.html