mirror of
https://github.com/RPCSX/llvm.git
synced 2026-01-31 01:05:23 +01:00
Store and emit original name in combined index
Summary: As discussed in D18298, some local globals can't be renamed/promoted (because they have a section, or because they are referenced from inline assembly). To be able to detect naming collision, we need to keep around the "GUID" using their original name without taking the linkage into account. Reviewers: tejohnson Subscribers: joker.eph, llvm-commits Differential Revision: http://reviews.llvm.org/D19454 From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267304 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -3211,6 +3211,17 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
|
||||
DenseMap<const GlobalValueSummary *, uint64_t> SummaryToOffsetMap;
|
||||
|
||||
SmallVector<uint64_t, 64> NameVals;
|
||||
|
||||
// For local linkage, we also emit the original name separately
|
||||
// immediately after the record.
|
||||
auto MaybeEmitOriginalName = [&](GlobalValueSummary &S) {
|
||||
if (!GlobalValue::isLocalLinkage(S.linkage()))
|
||||
return;
|
||||
NameVals.push_back(S.getOriginalName());
|
||||
Stream.EmitRecord(bitc::FS_COMBINED_ORIGINAL_NAME, NameVals);
|
||||
NameVals.clear();
|
||||
};
|
||||
|
||||
for (const auto &FII : Index) {
|
||||
for (auto &FI : FII.second) {
|
||||
GlobalValueSummary *S = FI->summary();
|
||||
@@ -3241,6 +3252,7 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
|
||||
Stream.EmitRecord(bitc::FS_COMBINED_GLOBALVAR_INIT_REFS, NameVals,
|
||||
FSModRefsAbbrev);
|
||||
NameVals.clear();
|
||||
MaybeEmitOriginalName(*S);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -3288,6 +3300,7 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
|
||||
// Emit the finished record.
|
||||
Stream.EmitRecord(Code, NameVals, FSAbbrev);
|
||||
NameVals.clear();
|
||||
MaybeEmitOriginalName(*S);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3307,6 +3320,7 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
|
||||
// Emit the finished record.
|
||||
Stream.EmitRecord(bitc::FS_COMBINED_ALIAS, NameVals, FSAliasAbbrev);
|
||||
NameVals.clear();
|
||||
MaybeEmitOriginalName(*AS);
|
||||
}
|
||||
|
||||
Stream.ExitBlock();
|
||||
|
||||
Reference in New Issue
Block a user