const AccessSummaryAnalysis::FunctionSummary & AccessSummaryAnalysis::getOrCreateSummary(SILFunction *fn) { FunctionInfo *info = getFunctionInfo(fn); if (!info->isValid()) recompute(info); return info->getSummary(); }
bool AccessSummaryAnalysis::propagateFromCalleeToCaller( FunctionInfo *callerInfo, ArgumentFlow flow) { // For a given flow from a caller's argument to a callee's argument, // propagate the argument summary information to the caller. FunctionInfo *calleeInfo = flow.CalleeFunctionInfo; const auto &calleeArgument = calleeInfo->getSummary().getAccessForArgument(flow.CalleeArgumentIndex); auto &callerArgument = callerInfo->getSummary().getAccessForArgument(flow.CallerArgumentIndex); bool changed = callerArgument.mergeWith(calleeArgument); return changed; }