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
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
Thanks for your reply. Probably I did not explain clearly. Here is an example: 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. 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
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 >