[LLVMdev] Question on Load and GetElementPtr instructions

Xiaolong Tang xiaolong.snake at gmail.com
Fri Jun 18 05:40:21 PDT 2010


Hello Nakamura,

> > 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.

You are right. Now I use isa<GEPOperator> as the guard. 
Thanks. 

Best, 
Xiaolong

> 
> 
> 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?





More information about the llvm-dev mailing list