mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-07 11:59:09 +00:00
[ThinLTO] Ensure function summary output order is stable
Iterate over the function list instead of a DenseMap of Function pointers when emitting the function summary into the module. This fixes PR26419. llvm-svn: 259398
This commit is contained in:
parent
1cc73a0cb5
commit
af365ed820
@ -2800,16 +2800,22 @@ static void WritePerModuleFunctionSummary(
|
||||
unsigned FSAbbrev = Stream.EmitAbbrev(Abbv);
|
||||
|
||||
SmallVector<unsigned, 64> NameVals;
|
||||
for (auto &I : FunctionIndex) {
|
||||
// Iterate over the list of functions instead of the FunctionIndex map to
|
||||
// ensure the ordering is stable.
|
||||
for (const Function &F : *M) {
|
||||
if (F.isDeclaration())
|
||||
continue;
|
||||
// Skip anonymous functions. We will emit a function summary for
|
||||
// any aliases below.
|
||||
if (!I.first->hasName())
|
||||
if (!F.hasName())
|
||||
continue;
|
||||
|
||||
assert(FunctionIndex.count(&F) == 1);
|
||||
|
||||
WritePerModuleFunctionSummaryRecord(
|
||||
NameVals, I.second->functionSummary(),
|
||||
VE.getValueID(M->getValueSymbolTable().lookup(I.first->getName())),
|
||||
FSAbbrev, Stream);
|
||||
NameVals, FunctionIndex[&F]->functionSummary(),
|
||||
VE.getValueID(M->getValueSymbolTable().lookup(F.getName())), FSAbbrev,
|
||||
Stream);
|
||||
}
|
||||
|
||||
for (const GlobalAlias &A : M->aliases()) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user