// We save a GUID which refers to the same global as the ValueInfo, but
// ignoring the linkage, i.e. for values other than local linkage they are
// identical.
- DenseMap<unsigned, std::pair<ValueInfo, GlobalValue::GUID>>
+ DenseMap<unsigned, std::tuple<ValueInfo, GlobalValue::GUID>>
ValueIdToValueInfoMap;
/// Map populated during module path string table parsing, from the
std::vector<FunctionSummary::ParamAccess>
parseParamAccesses(ArrayRef<uint64_t> Record);
- std::pair<ValueInfo, GlobalValue::GUID>
+ std::tuple<ValueInfo, GlobalValue::GUID>
getValueInfoFromValueId(unsigned ValueId);
void addThisModule();
return TheIndex.getModule(ModulePath);
}
-std::pair<ValueInfo, GlobalValue::GUID>
+std::tuple<ValueInfo, GlobalValue::GUID>
ModuleSummaryIndexBitcodeReader::getValueInfoFromValueId(unsigned ValueId) {
auto VGI = ValueIdToValueInfoMap[ValueId];
- assert(VGI.first);
+ assert(std::get<0>(VGI));
return VGI;
}
// UseStrtab is false for legacy summary formats and value names are
// created on stack. In that case we save the name in a string saver in
// the index so that the value name can be recorded.
- ValueIdToValueInfoMap[ValueID] = std::make_pair(
+ ValueIdToValueInfoMap[ValueID] = std::make_tuple(
TheIndex.getOrInsertValueInfo(
- ValueGUID,
- UseStrtab ? ValueName : TheIndex.saveString(ValueName)),
+ ValueGUID, UseStrtab ? ValueName : TheIndex.saveString(ValueName)),
OriginalNameID);
}
// The "original name", which is the second value of the pair will be
// overriden later by a FS_COMBINED_ORIGINAL_NAME in the combined index.
ValueIdToValueInfoMap[ValueID] =
- std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
+ std::make_tuple(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
break;
}
}
std::vector<ValueInfo> Ret;
Ret.reserve(Record.size());
for (uint64_t RefValueId : Record)
- Ret.push_back(getValueInfoFromValueId(RefValueId).first);
+ Ret.push_back(std::get<0>(getValueInfoFromValueId(RefValueId)));
return Ret;
}
for (unsigned I = 0, E = Record.size(); I != E; ++I) {
CalleeInfo::HotnessType Hotness = CalleeInfo::HotnessType::Unknown;
uint64_t RelBF = 0;
- ValueInfo Callee = getValueInfoFromValueId(Record[I]).first;
+ ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[I]));
if (IsOldProfileFormat) {
I += 1; // Skip old callsitecount field
if (HasProfile)
for (auto &Call : ParamAccess.Calls) {
Call.ParamNo = Record.front();
Record = Record.drop_front();
- Call.Callee = getValueInfoFromValueId(Record.front()).first;
+ Call.Callee = std::get<0>(getValueInfoFromValueId(Record.front()));
Record = Record.drop_front();
Call.Offsets = ReadRange();
}
ArrayRef<uint64_t> Record, size_t &Slot,
TypeIdCompatibleVtableInfo &TypeId) {
uint64_t Offset = Record[Slot++];
- ValueInfo Callee = getValueInfoFromValueId(Record[Slot++]).first;
+ ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[Slot++]));
TypeId.push_back({Offset, Callee});
}
uint64_t ValueID = Record[0];
GlobalValue::GUID RefGUID = Record[1];
ValueIdToValueInfoMap[ValueID] =
- std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
+ std::make_tuple(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
break;
}
// FS_PERMODULE: [valueid, flags, instcount, fflags, numrefs,
std::move(PendingParamAccesses));
auto VIAndOriginalGUID = getValueInfoFromValueId(ValueID);
FS->setModulePath(getThisModule()->first());
- FS->setOriginalName(VIAndOriginalGUID.second);
- TheIndex.addGlobalValueSummary(VIAndOriginalGUID.first, std::move(FS));
+ FS->setOriginalName(std::get<1>(VIAndOriginalGUID));
+ TheIndex.addGlobalValueSummary(std::get<0>(VIAndOriginalGUID),
+ std::move(FS));
break;
}
// FS_ALIAS: [valueid, flags, valueid]
// ownership.
AS->setModulePath(getThisModule()->first());
- auto AliaseeVI = getValueInfoFromValueId(AliaseeID).first;
+ auto AliaseeVI = std::get<0>(getValueInfoFromValueId(AliaseeID));
auto AliaseeInModule = TheIndex.findSummaryInModule(AliaseeVI, ModulePath);
if (!AliaseeInModule)
return error("Alias expects aliasee summary to be parsed");
AS->setAliasee(AliaseeVI, AliaseeInModule);
auto GUID = getValueInfoFromValueId(ValueID);
- AS->setOriginalName(GUID.second);
- TheIndex.addGlobalValueSummary(GUID.first, std::move(AS));
+ AS->setOriginalName(std::get<1>(GUID));
+ TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(AS));
break;
}
// FS_PERMODULE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags, n x valueid]
std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
FS->setModulePath(getThisModule()->first());
auto GUID = getValueInfoFromValueId(ValueID);
- FS->setOriginalName(GUID.second);
- TheIndex.addGlobalValueSummary(GUID.first, std::move(FS));
+ FS->setOriginalName(std::get<1>(GUID));
+ TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(FS));
break;
}
// FS_PERMODULE_VTABLE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags,
ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
VTableFuncList VTableFuncs;
for (unsigned I = VTableListStartIndex, E = Record.size(); I != E; ++I) {
- ValueInfo Callee = getValueInfoFromValueId(Record[I]).first;
+ ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[I]));
uint64_t Offset = Record[++I];
VTableFuncs.push_back({Callee, Offset});
}
VS->setModulePath(getThisModule()->first());
VS->setVTableFuncs(VTableFuncs);
auto GUID = getValueInfoFromValueId(ValueID);
- VS->setOriginalName(GUID.second);
- TheIndex.addGlobalValueSummary(GUID.first, std::move(VS));
+ VS->setOriginalName(std::get<1>(GUID));
+ TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(VS));
break;
}
// FS_COMBINED: [valueid, modid, flags, instcount, fflags, numrefs,
std::vector<FunctionSummary::EdgeTy> Edges = makeCallList(
ArrayRef<uint64_t>(Record).slice(CallGraphEdgeStartIndex),
IsOldProfileFormat, HasProfile, false);
- ValueInfo VI = getValueInfoFromValueId(ValueID).first;
+ ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
setSpecialRefs(Refs, NumRORefs, NumWORefs);
auto FS = std::make_unique<FunctionSummary>(
Flags, InstCount, getDecodedFFlags(RawFunFlags), EntryCount,
LastSeenSummary = AS.get();
AS->setModulePath(ModuleIdMap[ModuleId]);
- auto AliaseeVI = getValueInfoFromValueId(AliaseeValueId).first;
+ auto AliaseeVI = std::get<0>(getValueInfoFromValueId(AliaseeValueId));
auto AliaseeInModule = TheIndex.findSummaryInModule(AliaseeVI, AS->modulePath());
AS->setAliasee(AliaseeVI, AliaseeInModule);
- ValueInfo VI = getValueInfoFromValueId(ValueID).first;
+ ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
LastSeenGUID = VI.getGUID();
TheIndex.addGlobalValueSummary(VI, std::move(AS));
break;
std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
LastSeenSummary = FS.get();
FS->setModulePath(ModuleIdMap[ModuleId]);
- ValueInfo VI = getValueInfoFromValueId(ValueID).first;
+ ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
LastSeenGUID = VI.getGUID();
TheIndex.addGlobalValueSummary(VI, std::move(FS));
break;