Hi, On Tue, Oct 20 2020, Richard Biener wrote: > On Mon, Oct 19, 2020 at 7:52 PM Gary Oblock <g...@amperecomputing.com> wrote: >> >> Richard, >> >> I guess that will work for me. However, since it >> was decided to remove an identical function, >> why weren't the calls to it adjusted to reflect it? >> If the call wasn't transformed that means it will >> be mapped at some later time. Is that mapping >> available to look at? Because using that would >> also be a potential solution (assuming call >> graph information exists for the deleted function.) > > I'm not sure how the transitional cgraph looks like > during WPA analysis (which is what we're talking about?), > but definitely the IL is unmodified in that state. > > Maybe Martin has an idea. >
Exactly, the cgraph_edges is where the correct call information is stored until the inlining transformation phase calls cgraph_edge::redirect_call_stmt_to_callee is called on it - inlining is a special pass in this regard that performs this IPA-infrastructure function in addition to actual inlining. In cgraph means the callee itself but also information in e->callee->clone.param_adjustments which might be interesting for any struct-reorg-like optimizations (...and in future possibly in other transformation summaries). The late IPA passes are in very unfortunate spot here since they run before the real-IPA transformation phases but after unreachable node removals and after clone materializations and so can see some but not all of the changes performed by real IPA passes. The reason for that is good cache locality when late IPA passes are either not run at all or only look at small portion of the compilation unit. In such case IPA transformations of a function are followed by all the late passes working on the same function. Late IPA passes are unfortunately second class citizens and I would strongly recommend not to use them since they do not fit into our otherwise robust IPA framework very well. We could probably provide a mechanism that would allow late IPA passes to run all normal IPA transformations on a function so they could clearly see what they are looking at, but extensive use would slow compilation down so its use would be frowned upon at the very least. Martin