mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
Re-apply r302108, "IR: Use pointers instead of GUIDs to represent edges in the module summary. NFCI."
with a fix for the clang backend. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302176 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -156,14 +156,14 @@ public:
|
||||
return;
|
||||
for (const auto &GUIDSummaryLists : *Index)
|
||||
// Examine all summaries for this GUID.
|
||||
for (auto &Summary : GUIDSummaryLists.second)
|
||||
for (auto &Summary : GUIDSummaryLists.second.SummaryList)
|
||||
if (auto FS = dyn_cast<FunctionSummary>(Summary.get()))
|
||||
// For each call in the function summary, see if the call
|
||||
// is to a GUID (which means it is for an indirect call,
|
||||
// otherwise we would have a Value for it). If so, synthesize
|
||||
// a value id.
|
||||
for (auto &CallEdge : FS->calls())
|
||||
if (CallEdge.first.isGUID())
|
||||
if (!CallEdge.first.getValue())
|
||||
assignValueId(CallEdge.first.getGUID());
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ private:
|
||||
}
|
||||
// Helper to get the valueId for the type of value recorded in VI.
|
||||
unsigned getValueId(ValueInfo VI) {
|
||||
if (VI.isGUID())
|
||||
if (!VI.getValue())
|
||||
return getValueId(VI.getGUID());
|
||||
return VE.getValueID(VI.getValue());
|
||||
}
|
||||
@@ -358,7 +358,7 @@ public:
|
||||
Callback(Summary);
|
||||
} else {
|
||||
for (auto &Summaries : Index)
|
||||
for (auto &Summary : Summaries.second)
|
||||
for (auto &Summary : Summaries.second.SummaryList)
|
||||
Callback({Summaries.first, Summary.get()});
|
||||
}
|
||||
}
|
||||
@@ -3270,15 +3270,14 @@ void ModuleBitcodeWriter::writePerModuleFunctionSummaryRecord(
|
||||
void ModuleBitcodeWriter::writeModuleLevelReferences(
|
||||
const GlobalVariable &V, SmallVector<uint64_t, 64> &NameVals,
|
||||
unsigned FSModRefsAbbrev) {
|
||||
auto Summaries =
|
||||
Index->findGlobalValueSummaryList(GlobalValue::getGUID(V.getName()));
|
||||
if (Summaries == Index->end()) {
|
||||
auto VI = Index->getValueInfo(GlobalValue::getGUID(V.getName()));
|
||||
if (!VI || VI.getSummaryList().empty()) {
|
||||
// Only declarations should not have a summary (a declaration might however
|
||||
// have a summary if the def was in module level asm).
|
||||
assert(V.isDeclaration());
|
||||
return;
|
||||
}
|
||||
auto *Summary = Summaries->second.front().get();
|
||||
auto *Summary = VI.getSummaryList()[0].get();
|
||||
NameVals.push_back(VE.getValueID(&V));
|
||||
GlobalVarSummary *VS = cast<GlobalVarSummary>(Summary);
|
||||
NameVals.push_back(getEncodedGVSummaryFlags(VS->flags()));
|
||||
@@ -3367,15 +3366,14 @@ void ModuleBitcodeWriter::writePerModuleGlobalValueSummary() {
|
||||
if (!F.hasName())
|
||||
report_fatal_error("Unexpected anonymous function when writing summary");
|
||||
|
||||
auto Summaries =
|
||||
Index->findGlobalValueSummaryList(GlobalValue::getGUID(F.getName()));
|
||||
if (Summaries == Index->end()) {
|
||||
ValueInfo VI = Index->getValueInfo(GlobalValue::getGUID(F.getName()));
|
||||
if (!VI || VI.getSummaryList().empty()) {
|
||||
// Only declarations should not have a summary (a declaration might
|
||||
// however have a summary if the def was in module level asm).
|
||||
assert(F.isDeclaration());
|
||||
continue;
|
||||
}
|
||||
auto *Summary = Summaries->second.front().get();
|
||||
auto *Summary = VI.getSummaryList()[0].get();
|
||||
writePerModuleFunctionSummaryRecord(NameVals, Summary, VE.getValueID(&F),
|
||||
FSCallsAbbrev, FSCallsProfileAbbrev, F);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user