https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110334
--- Comment #15 from rguenther at suse dot de <rguenther at suse dot de> --- On Wed, 28 Jun 2023, hubicka at ucw dot cz wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110334 > > --- Comment #14 from Jan Hubicka <hubicka at ucw dot cz> --- > > > > why disallow caller->indirect_calls? > See testcase in comment #9 > > > > > + return false; > > > + for (cgraph_edge *e2 = callee->callees; e2; e2 = e2->next_callee) > > > > I don't think this flys - it looks quadratic. Can we compute this > > in the inline summary once instead? > > I guess I can place a cache there. I think this check will become more > global over time so it more fits IMO here. > > > > As for indirect calls, can we maybe mark initial direct GIMPLE call > > stmts as "always-inline" and only look at that marking, thus an > > indirect call will never become "always-inline"? Iff cgraph edges > > prevail during all early inlining we could mark call edges for > > this purpose? > > I also think we need call site specific info. > Tagging gimple call statements and copying the info to gimple edges will > probably be needed here. We want to keep the info from early inlining > to late inlining since we output errors late. > We already have plenty of GF_CALL_ flags, so adding one should be easy? We have 3 bits left :/ I was hoping that cgraph_edge lives long enough? But I suppose we're not keeping them across the early opts pipeline.