Qiuping Yi
2014-Nov-22 09:10 UTC
[LLVMdev] How to get the indices in an getelementptr Value?
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 > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141122/aff62509/attachment.html>
Sanjoy Das
2014-Nov-22 19:09 UTC
[LLVMdev] How to get the indices in an getelementptr Value?
Hi Qiuping, If I'm reading the IR correctly, what you have is a GetElementPtrConstantExpr [1]. It subclasses from llvm::Constant. 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 >
David Majnemer
2014-Nov-22 20:08 UTC
[LLVMdev] How to get the indices in an getelementptr Value?
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>