[LLVMdev] GetElementPtrInst question
Krzysztof Parzyszek
kparzysz at codeaurora.org
Sun Dec 2 08:37:14 PST 2012
On 12/2/2012 9:37 AM, Eduardo wrote:
> Hi all,
>
> How can I create an llvm::GetElementPtrInst in which the pointer and
> the index are in registers previously loaded with llvm::LoadInst ? I
> mean, the generated instruction will be like this:
>
> %1 = getelementptr i8* %myreg1, i32 %myreg2
>
> here, %myreg1 and %myreg2 are previously created by load instructions
> (llvm::LoadInst).
Other than using the IR builder, you can create this instruction
directly, using one of the "Create" functions, for example:
static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList,
const Twine &NameStr,
Instruction *InsertBefore = 0) {
GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertBefore);
GEP->setIsInBounds(true);
return GEP;
}
The "Ptr" would be your "myreg1", and you'll need to create an ArrayRef
that holds a single element: "myreg2". Conveniently, ArrayRef has a
constructor that creates a "singleton" array:
/// Construct an ArrayRef from a single element.
/*implicit*/ ArrayRef(const T &OneElt)
: Data(&OneElt), Length(1) {}
Since it's not an explicit constructor, it may actually work if you do
GEP = GetElementPtrInst::Create(myreg1, myreg2, "name.of.my.gep",
where-to-insert);
Otherwise you'll need to create an ArrayRef that represents the
arguments to the GetElemPtr instruction.
-Krzysztof
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list