[LLVMdev] Question on Load and GetElementPtr instructions

NAKAMURA Takumi geek4civic at gmail.com
Fri Jun 18 05:16:49 PDT 2010


Good evening, Tang.

> What is the type of the first operand of the instruction (i.e.,
> getOperand(0))?

It might be ConstantExpr.
You may use dyn_cast<GEPOperator>(getPointerOperand()).
Also GetElementPtrInst* can be casted to GEPOperator.


...Takumi



2010/6/18 Xiaolong Tang <xiaolong.snake at gmail.com>:
>
> Hey,
>
> Considering the following instruction:
>
>  %20 = load %struct.Node** getelementptr inbounds (%struct.Node*
>          @head, i32 0, i32 0), align 16 ; <%struct.Node*> [#uses=1]
>
> What is the type of the first operand of the instruction (i.e.,
> getOperand(0))?
>
> I thought the operand is a "GetElementPtr" instruction, however, the
> predicate "isa<Instruction>()" over the operand returns false.
> So, I am confused. Can someone clarify the above instruction for me?
>
> By the way, why does not LLVM factor out the operand and instead
> generate such two instructions:
>
>  %19 = getelementptr inbounds (%struct.Node* @head, i32 0, i32 0)
>  %20 = load %struct.Node** %19, align 16 ; <%struct.Node*> [#uses=1]
>
> What it the cause?  What are the differences between the
> "GetElementPtr inbounds" instruction and just the "GetElementPtr"
> instruction?
>
>
> Thanks,
> Xiaolong




More information about the llvm-dev mailing list