Cloning functions
Matt Davis
mattdavis9@gmail.com
Tue Mar 20 03:07:00 GMT 2012
Hello,
In my transformation of an input program, I need to clone functions
and the callee functions in each clone. To clone a function, or
create a duplicate, I use "cgraph_function_versioning()" This works
perfectly well for the parent function. I then go through the
statements in the parent and look for any function calls (callees).
If I find a function call, I clone that function and update the call
site using "gimple_call_set_fn()" Now, when I dump the gimple via
"debug_function()" I see everything as I expect (parent-clone calls
all the callee-clones). The parent and all of its callees are the
clones I want. However, when GCC finishes compiling things, the
callee clones are no where to be found. And the original (non-clone)
calleess are being used. The parent-clone is there but all of the
callsites are using the original callees and not the clones. I know
there must be some update routine, (rebuild_cgraph_edges() did not
help) to glue the callee clones in place so that they do not revert
back to the original callee.
I hope I haven't been too confusing, I do appreciate any help if possible.
-Matt
More information about the Gcc
mailing list