This is the mail archive of the
mailing list for the GCC project.
- From: Matt Davis <mattdavis9 at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Tue, 20 Mar 2012 14:07:17 +1100
- Subject: Cloning functions
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.