[LLVMdev] Implementing customized intrinsic

Tanya M. Lattner tonic at nondot.org
Wed Jan 21 17:38:47 PST 2009


> call @check(%foo)
> %1 = load %foo
>
> Now I want to write optimization only focus on the function call
> @check, and it might have some additional information which does not
> need to  appear at LLVM IR.
>
> So it seems that the annotation intrinsic does not fit the scenario.

I still don't understand.

Why not just replace the call to check with a call to the llvm var 
annotation intrinsic and then you can pass anything you want to it. Such 
as your "check" string. Then you write a pass that looks for these. Why 
would that not work? The var annotation is specifically designed to 
annotate local variables with arbitrary strings.

-Tanya



>
> Haohui
>
> On Jan 21, 2009, at 8:01 PM, Tanya M. Lattner wrote:
>
>>
>> Does the llvm annotation intrinsic not work for what you are trying
>> to do?
>>
>> http://llvm.org/docs/LangRef.html#int_var_annotation
>> http://llvm.org/docs/LangRef.html#int_annotation
>>
>> -Tanya
>>
>> On Wed, 21 Jan 2009, Haohui Mai wrote:
>>
>>> Dear all,
>>>
>>> Currently I'm working on a project that add various checks into the
>>> LLVM bitcode. For example,  I insert function calls before every
>>> load / store instructions to guarantee that these instructions are
>>> safe. I really want to implement them as LLVM intrinsics or ``special
>>> function calls'' so that I am able to leverage the power of things
>>> like InstVisitor. However, it seems it is difficult to do it without
>>> changing LLVM's source codes, cause
>>>
>>> i) all constructors of CallInst are private
>>> ii) There's no interfaces for implementing customized intrinsics
>>> (without changing intrinsics*.td)
>>>
>>> It is very helpful to mark these checks as special calls (like
>>> intrinsics), it would ease the implementation of optimizations since
>>> they only work on these special calls, say, I could save some
>>> information in the subclass of CallInst.
>>>
>>> I also notice that the access identifier of CallInst are changed
>>> after
>>> LLVM 2.0. I would be appreciated if you guys could explain the
>>> rationale behind the changes.
>>>
>>> Thank you very much.
>>>
>>> Best,
>>>
>>> Haohui
>>>
>>>
>>> _______________________________________________
>>> 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
>



More information about the llvm-dev mailing list