Dávid Bolvanský via llvm-dev
2018-Mar-23 23:07 UTC
[llvm-dev] Change function call name in a CallInst only in certain functions
Hello, In my module I have functions: a b c f3 calls "a" f2 calls "a" f1 calls "b" I would like to modify a CallInst in the f2. Now it calls "a", but I want changed it to "c". When loop over the instructions of the f2, I can get a CallInst to be modified, then I use "setName" to changed it to "c". Problem is, since references are updated, "a" is changed to "c" even in f1. Any solution? Thanks -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180324/5722a3dd/attachment.html>
mayuyu.io via llvm-dev
2018-Mar-24 00:05 UTC
[llvm-dev] Change function call name in a CallInst only in certain functions
Not sure why you are using setName here. I personally use CallSite() to wrap InvokeInst and CallInst, then use CallSite::setCalledFunction for this kind of stuff. Zhang> On 23 Mar 2018, at 23:07, Dávid Bolvanský via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > Hello, > > In my module I have functions: > > a > b > c > f3 calls "a" > f2 calls "a" > f1 calls "b" > > I would like to modify a CallInst in the f2. Now it calls "a", but I want changed it to "c". > > When loop over the instructions of the f2, I can get a CallInst to be modified, then I use "setName" to changed it to "c". > > > Problem is, since references are updated, "a" is changed to "c" even in f1. > > Any solution? > > Thanks > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
mayuyu.io via llvm-dev
2018-Mar-24 00:19 UTC
[llvm-dev] Change function call name in a CallInst only in certain functions
You are probably calling setName() on the called Function, which in-turned renamed the called Function instead of replacing the called function. Depending on your use-case, if you are certain that you only need to modify CallInsts, then you could simply call CallInst::setCalledFunction , otherwise it’s probably wiser to use CallSite as a wrapper for both CallInst and InvokeInst. Do note, however, that no matter which solution you end up using, you’ll need to update the FunctionType as well Zhang> On 23 Mar 2018, at 23:07, Dávid Bolvanský via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > Hello, > > In my module I have functions: > > a > b > c > f3 calls "a" > f2 calls "a" > f1 calls "b" > > I would like to modify a CallInst in the f2. Now it calls "a", but I want changed it to "c". > > When loop over the instructions of the f2, I can get a CallInst to be modified, then I use "setName" to changed it to "c". > > > Problem is, since references are updated, "a" is changed to "c" even in f1. > > Any solution? > > Thanks > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Dávid Bolvanský via llvm-dev
2018-Mar-24 12:31 UTC
[llvm-dev] Change function call name in a CallInst only in certain functions
Okey, setCalledFunction is useful. But I have a problem since my "a", "b", "c" are functions from libc, not my defined ones in the module. if (CallInst *call_inst = dyn_cast<CallInst>(&I)) { Function *fn = call_inst->getCalledFunction(); if (fn->getName() == "a") { ValueToValueMapTy map; FN = CloneFunction(fn, map, nullptr); FN->setName("c"); call_inst->setCalledFunction(FN); } ... } I get "Assertion `!NodePtr->isKnownSentinel()' failed." 2018-03-24 1:19 GMT+01:00 mayuyu.io <admin at mayuyu.io>:> > You are probably calling setName() on the called Function, which in-turned > renamed the called Function instead of replacing the called function. > Depending on your use-case, if you are certain that you only need to > modify CallInsts, then you could simply call CallInst::setCalledFunction , > otherwise it’s probably wiser to use CallSite as a wrapper for both > CallInst and InvokeInst. Do note, however, that no matter which solution > you end up using, you’ll need to update the FunctionType as well > Zhang > > > On 23 Mar 2018, at 23:07, Dávid Bolvanský via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > > > > Hello, > > > > In my module I have functions: > > > > a > > b > > c > > f3 calls "a" > > f2 calls "a" > > f1 calls "b" > > > > I would like to modify a CallInst in the f2. Now it calls "a", but I > want changed it to "c". > > > > When loop over the instructions of the f2, I can get a CallInst to be > modified, then I use "setName" to changed it to "c". > > > > > > Problem is, since references are updated, "a" is changed to "c" even in > f1. > > > > Any solution? > > > > Thanks > > _______________________________________________ > > LLVM Developers mailing list > > llvm-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180324/98e608cb/attachment.html>
Possibly Parallel Threads
- Change function call name in a CallInst only in certain functions
- Insert CallInst within a function passing same parameters of the calling function.
- [LLVMdev] How to create arguments CallInst
- [LLVMdev] How to duplicate a function?
- [LLVMdev] How to create arguments CallInst