> On Mon, 6 Jun 2016, Jan Hubicka wrote: > > > > On Sun, 5 Jun 2016, Jan Hubicka wrote: > > > > > > > Hi, > > > > both loop-ch and loop-ivcanon want to trottle down the heuristics on > > > > paths > > > > containing call. Testing for presence of GIMPLE_CALL is wrong for > > > > internal > > > > call and cheap builtins that are expanded inline. > > > > > > > > Bootstrapped/regtested x86_64-linux, OK? > > > > > > First of all the name is bad - I'd say gimple_inexpensive_call_p () > > > is better. More comments below. > > > > OK, the motivation for name is that I am really testing if the GIMPLE_CALL > > will end up > > call instruction in the final assembly. No matter whetehr expensive or not. > > Well, but that's not what your predicate tests ;) For example > CLZ is considered is_inexpensive_builtin even though it may end up > as a call. In fact even non-calls can end up as a libcall on > some targets.
Yep, it is for heuristics estimating the runtime cost of the given path, (number of branches and number of real calls). It doesn't need to be precise but it would be better if it was. The general intutition that call within loop probalby makes the loop uninteresting for expensive loop transforms seems kind of sound (i.e. I do not know of counterexamples) even through it is not a real rocket science. If I make gimple_inexpensive_call_p then the test would be if (gimple_code (stmt) == GIMPLE_CALL && !gimple_inexpensive_call_p (stmt)) ... account that call is evil ... Does that look OK? BTW the hard-wired bound of 20 insns for header copying seems high. I will turn it into --param and we probably could check what value is really needed. I don't think it was tested since it was moved away from jump.c which worked on quite different context. Honza > > > > gimple_code (stmt) == GIMPLE_CALL is redundant then. I'd prefer to > > > make gimple_inexpensive_call_p take a gcall * argument and do the > > > test at the callers though. > > > > OK, i will update patch. I had mostly copied those tests from original > > code which I think had them as short cirucuits. This most probalby does not > > matter in practice and LTO may be eventually to do that for us. So it seemed > > bit like premature optimization. I will update the patch. > > Thanks, > Richard. > > > Honza > > > > > > > { > > > > int flags = gimple_call_flags (stmt); > > > > - tree decl = gimple_call_fndecl (stmt); > > > > - > > > > - if (decl && DECL_IS_BUILTIN (decl) > > > > - && is_inexpensive_builtin (decl)) > > > > - ; > > > > - else if (flags & (ECF_PURE | ECF_CONST)) > > > > + if (flags & (ECF_PURE | ECF_CONST)) > > > > size->num_pure_calls_on_hot_path++; > > > > else > > > > size->num_non_pure_calls_on_hot_path++; > > > > > > > > > > > > > > -- > Richard Biener <rguent...@suse.de> > SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB > 21284 (AG Nuernberg)