This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]