Hi, On Wed, Mar 06, 2013 at 04:00:52PM +0400, Dinar Temirbulatov wrote: > Hi, > The current implementation of IPACP doesn't allowed to clone function > if caller(s) to that function is located in another object.
That is not exactly true. With -fipa-cp-clone (default at -O3), IPA-CP is happy to clone a function that is callable from outside of the current compilation unit. Of course, only calls from within the CU are redirected without LTO. And code size may grow significantly, which is why IPA-CP does this only if it deems the estimated cost/benefit ratio to still be quite good. > Of course, > no such problems if we could utilized LTO. And it is very interesting > to have such functionality of compiler even without LTO. It could be > changed, if for example we could call to the cloned instance of that > function from the original instance of function in the function > prolog: > Here is what I mean: > > int func(int a, .....) > { > if (a==some_constant) > func.constprop.0(....); > > thanks, Dinar. well, you could just as well put the quick version right into the original function (and execute the original in the else branch). If it is small and you did this in an early pass, IPA-SPLIT might even help inliner to inline it into known callers. The tough part, however, is determining when this is such a good idea. Do you have any particular situation in mind? Thanks, Martin