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

Qiuping Yi yiqiuping at gmail.com
Sat Nov 22 20:37:52 PST 2014


Thank you very much for your useful information. As you say, it is a
subclass llvm::ConstantExpr.

Now I cast value "i32* getelementptr inbounds (%struct.Args* @globalArg,
i64 0, i32 2)"  to its subclass llvm::Constant and then subclass
llvm::ConstantExpr, and then I can access its indices through

for (unsigned i=0; i<constExpr->getNumOperands(); ++i)
    v = constExpr->getOperand(i);

*However, I have another question.* The invoking of getNumOperands() on
value "i32* getelementptr inbounds (%struct.Args* @globalArg, i64 0, i32
2)" returns 3, but it returns 1 on value "i32* getelementptr inbounds
(%struct.Args* @globalArg, i64 0, i32 0)", and furthermore, through value
"i32* getelementptr inbounds (%struct.Args* @globalArg, i64 0, i32 2)" is
subclass llvm::Constant, but it is not subclass llvm::ConstantExpr, why?



--------------------------------------------
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/6a805a07/attachment.html>


More information about the llvm-dev mailing list