> Hi Martin, thanks very much for the information! > > On Tue, Mar 20, 2012 at 9:29 PM, Martin Jambor <mjam...@suse.cz> wrote: > > Hi, > > > > On Tue, Mar 20, 2012 at 02:07:17PM +1100, Matt Davis wrote: > >> 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 do you change the calls in the callers of the "parent function?" > > This is exactly what you would see if you don't. See convert_callers > > and convert_callers_for_node in tree-sra.c (ipa_modify_call_arguments > > is probably equivalent to gimple_call_set_fndecl for your purposes). > > Actually, I do change the calls in the parent function. What I had to > do was set the 'cfun' to the parent function, and then run > 'rebuild_cgraph_edges()' and 'cleanup_tree_cfg()'
rebuidl_cgraph_edges just looks at the function body and makes edges accordingly. It is not doing eny redirection. The way redirection is usually done is that you call cgraph_redirect_edge_callee and redirect edge to your clone. Updating of statements is done alter, at the end of IPA stage via cgraph_redirect_edge_call_stmt_to_callee > > Yes, my pass is really late, after all IPA passes have complete. Once > again, thank you for your insight! This will be probably the problem, since then the redirection is not done. You can try to simply call cgraph_redirect_edge_call_stmt_to_callee after each redirection. But why you need to do IPA pass so late? Honza > > -Matt