[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