[LLVMdev] Printing Function Arguments
Nick Lewycky
nicholas at mxc.ca
Sun Sep 27 20:38:15 PDT 2009
ivtm wrote:
> Another question, I need to get the "%0" below in the:
>
> %0 = tail call i32 (...)* @__FFF (i32 8) nounwind; <i32> [#uses=1]
>
> that is, the return register.
>
> I am wondering in general, where should I look in the llvm codebase for
> parsing instructions ?
The parser is in lib/AsmParser/.
Nick
> I am looking at existing passes and also the header files like Function.h,
> etc to see what methods they have, but it takes a while to figure out the
> basic methods...
>
>
>
>
>
>
> ivtm wrote:
>> Hi Nick,
>>
>> Thanks, that seemed to work.
>>
>>
>> Nick Lewycky wrote:
>>> ivtm wrote:
>>>> I am processing the LLVM instructions and right now I am at the 'call'
>>>> instruction.
>>>> For now I just want to print the argument type.
>>>>
>>>> For example in the following:
>>>>
>>>> %0 = tail call i32 (...)* @__FFF (i32 8) nounwind; <i32> [#uses=1]
>>>>
>>>> I need to get access to 'i32' and '8' separately.
>>>>
>>>> I do:
>>>>
>>>> CallInst *CI = dyn_cast<CallInst>(I);
>>>> Value *v = CI->getOperand(1)
>>>>
>>>> I can get the type via v->getType() and that returns 'i32', which is
>>>> good.
>>>>
>>>> But I also need to get the value '8'.
>>>>
>>>> I can get it via v->getValueID(), but in the documentation it says not
>>>> to
>>>> use that function.
>>> Heh. No, getValueID() returns '8' as the "ConstantIntVal" enum, not the
>>> actual argument number.
>>>
>>>> Any other ideas what is the proper way to access the value '8' ?
>>> It's a ConstantInt, so cast it and retrieve the APInt then pull out the
>>> number. Here:
>>>
>>> unsigned val;
>>> if (ConstantInt *CI = dyn_cast<ConstantInt>(v)) {
>>> val = CI->getValue()->getSExtValue();
>>> }
>>>
>>> Nick
>>> _______________________________________________
>>> 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