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

Qiuping Yi yiqiuping at gmail.com
Sat Nov 22 23:17:28 PST 2014


Hi David Majnemer,

I found I can cast value "i32* getelementptr inbounds (%struct.Args*
@globalArg, i64 0, i32 2)" to class GEPOperator, but failed on value "i32*
getelementptr inbounds (%struct.Args* @globalArg, i64 0, i32 0)". As my
previous email described, I found that the later value is a class
llvm::Constant but not a subclass llvm::ConstantExpr. I find it is very
strange.


--------------------------------------------
Qiuping Yi
Institute Of Software
Chinese Academy of Sciences

On Sun, Nov 23, 2014 at 4:08 AM, David Majnemer <david.majnemer at gmail.com>
wrote:

> 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/20141123/3362d7ed/attachment.html>


More information about the llvm-dev mailing list