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
_______________________________________________
LLVM Developers mailing list
LLV...@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 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 <xiaolon...@gmail.com>:
> > 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 <xiaolon...@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?
> 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?
it is not an Instruction, it is a ConstantExpr. Several expressions like
GEP exist both as instructions and as constants, see the ConstantExpr class.
Ciao,
Duncan.