[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