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

Sanjoy Das sanjoy at playingwithpointers.com
Sat Nov 22 11:09:59 PST 2014


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
>



More information about the llvm-dev mailing list