[LLVMdev] How to get the indices in an getelementptr Value?

David Majnemer david.majnemer at gmail.com
Sat Nov 22 12:08:05 PST 2014


On Sat, Nov 22, 2014 at 11:09 AM, Sanjoy Das <sanjoy at playingwithpointers.com
> wrote:

> Hi Qiuping,
>
> If I'm reading the IR correctly, what you have is a
> GetElementPtrConstantExpr [1].  It subclasses from llvm::Constant.
>

If you want the same code to handle GetElementPtrConstantExpr *and*
GetElementPtrInst, you can use GEPOperator.


>
> Thanks,
> -- Sanjoy
>
> [1]:
> http://llvm.org/docs/doxygen/html/classllvm_1_1GetElementPtrConstantExpr.html
>
> On Sat, Nov 22, 2014 at 1:10 AM, Qiuping Yi <yiqiuping at gmail.com> wrote:
> > Hi Michael,
> >
> > Thank you very much.
> >
> > But idx_begin/idx_end iterators can only be used through a getelementptr
> > instruction, right? However, I think value "i32* getelementptr inbounds
> > (%struct.Args* @globalArg, i64 0, i32 2)" itself is not a getelementptr
> > instruction, so? Or could you tell me how can I get a getelementptr
> > instruction first from this value?
> >
> >
> > --------------------------------------------
> > Qiuping Yi
> > Institute Of Software
> > Chinese Academy of Sciences
> >
> > On Sat, Nov 22, 2014 at 4:49 PM, Michael Zolotukhin <
> mzolotukhin at apple.com>
> > wrote:
> >>
> >> Hi Qiuping,
> >>
> >> I guess you need to use getPointerOperand to access the pointer operand
> >> (@globalArg in your example) and idx_begin/idx_end iterators to access
> >> indexes. You can find a short description of these functions in
> >> documentation [1], or look at examples of their uses in the code, e.g.
> in
> >> lib/Transforms/InstCombine/*.cpp.
> >>
> >> [1] http://llvm.org/doxygen/classllvm_1_1GetElementPtrInst.html
> >>
> >> Best regards,
> >> Michael
> >>
> >> On Nov 22, 2014, at 12:32 AM, Qiuping Yi <yiqiuping at gmail.com> wrote:
> >>
> >> Hi, all
> >>
> >> I am a LLVM user. I want to get every element in the next instruction:
> >>
> >> %0 = load i32* getelementptr inbounds (%struct.Args* @globalArg, i64 0,
> >> i32 2), align 4, !dbg !85, !clap !86
> >>
> >> Now I can only get value "i32* getelementptr inbounds (%struct.Args*
> >> @globalArg, i64 0, i32 2)" through "getOperand(0)",
> >> but I can not get "%struct.Args* @globalArg", "i64 0", and "i32 2" in
> this
> >> instruction.
> >>
> >> I know I can get the indices of getelementptr instructions through
> >> "getOperand()", but now in the previous example,
> >> I want to get the indices from a getlementptr value. How should I do?
> >> Thank you in advance.
> >>
> >>
> >> Best Regards!
> >>
> >> --------------------------------------------
> >> Qiuping Yi
> >> Institute Of Software
> >> Chinese Academy of Sciences
> >> _______________________________________________
> >> LLVM Developers mailing list
> >> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >>
> >>
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141122/df3cc94a/attachment.html>


More information about the llvm-dev mailing list