[llvm] [NFCI][BitcodeReader]Read real GUID from VI as opposed to storing it in map (PR #107735)
Mingming Liu via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 7 21:42:10 PDT 2024
https://github.com/minglotus-6 created https://github.com/llvm/llvm-project/pull/107735
Currently, `ValueIdToValueInfoMap` [1] stores `std::tuple<ValueInfo, GlobalValue::GUID /* original GUID */, GlobalValue::GUID /* real GUID*/ >`. This change updates the stored value type to `std::pair<ValueInfo, GlobalValue::GUID /* original GUID */>`, and reads real GUID from ValueInfo.
When an entry is inserted into `ValueIdToValueInfoMap`, ValueInfo is created or inserted using real GUID [2]. ValueInfo keeps a pointer to GlobalValueMap [3], using either `GUID` or `{GUID, Name}` when reading per-module summaries to create a combined summary.
[1] https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#L947-L950
[2] [first](https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#L7130-L7133), [second](https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#L7221-L7222), [third](https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#L7622-L7623)
[3] https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/include/llvm/IR/ModuleSummaryIndex.h#L1427-L1431
[4] https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/include/llvm/IR/ModuleSummaryIndex.h#L1631
and https://github.com/llvm/llvm-project/blob/caebb4562ce634a22f7b13480b19cffc2a6a6730/llvm/include/llvm/IR/ModuleSummaryIndex.h#L1621
>From 18c5a90abbeaf62de6714792122aada21eb97581 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Sat, 7 Sep 2024 21:23:01 -0700
Subject: [PATCH] [NFCI][BitcodeReader]Read real GUID from VI as opposed to
storing it in map
---
llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 27 ++++++++++-------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 250ba425a5d591..c30a44207d8401 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -943,10 +943,8 @@ class ModuleSummaryIndexBitcodeReader : public BitcodeReaderBase {
// they are recorded in the summary index being built.
// 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 (this is the second tuple member).
- // The third tuple member is the real GUID of the ValueInfo.
- DenseMap<unsigned,
- std::tuple<ValueInfo, GlobalValue::GUID, GlobalValue::GUID>>
+ // identical (this is the second tuple member). ValueInfo has the real GUID.
+ DenseMap<unsigned, std::pair<ValueInfo, GlobalValue::GUID>>
ValueIdToValueInfoMap;
/// Map populated during module path string table parsing, from the
@@ -999,7 +997,7 @@ class ModuleSummaryIndexBitcodeReader : public BitcodeReaderBase {
parseParamAccesses(ArrayRef<uint64_t> Record);
template <bool AllowNullValueInfo = false>
- std::tuple<ValueInfo, GlobalValue::GUID, GlobalValue::GUID>
+ std::pair<ValueInfo, GlobalValue::GUID>
getValueInfoFromValueId(unsigned ValueId);
void addThisModule();
@@ -7101,7 +7099,7 @@ ModuleSummaryIndexBitcodeReader::getThisModule() {
}
template <bool AllowNullValueInfo>
-std::tuple<ValueInfo, GlobalValue::GUID, GlobalValue::GUID>
+std::pair<ValueInfo, GlobalValue::GUID>
ModuleSummaryIndexBitcodeReader::getValueInfoFromValueId(unsigned ValueId) {
auto VGI = ValueIdToValueInfoMap[ValueId];
// We can have a null value info for memprof callsite info records in
@@ -7128,10 +7126,10 @@ void ModuleSummaryIndexBitcodeReader::setValueGUID(
// 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_tuple(
+ ValueIdToValueInfoMap[ValueID] = std::make_pair(
TheIndex.getOrInsertValueInfo(
ValueGUID, UseStrtab ? ValueName : TheIndex.saveString(ValueName)),
- OriginalNameID, ValueGUID);
+ OriginalNameID);
}
// Specialized value symbol table parser used when reading module index
@@ -7219,8 +7217,8 @@ Error ModuleSummaryIndexBitcodeReader::parseValueSymbolTable(
GlobalValue::GUID RefGUID = Record[1];
// 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_tuple(
- TheIndex.getOrInsertValueInfo(RefGUID), RefGUID, RefGUID);
+ ValueIdToValueInfoMap[ValueID] =
+ std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
break;
}
}
@@ -7620,8 +7618,8 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
} else {
RefGUID = Record[1];
}
- ValueIdToValueInfoMap[ValueID] = std::make_tuple(
- TheIndex.getOrInsertValueInfo(RefGUID), RefGUID, RefGUID);
+ ValueIdToValueInfoMap[ValueID] =
+ std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
break;
}
// FS_PERMODULE is legacy and does not have support for the tail call flag.
@@ -7679,9 +7677,8 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
// the prevailing copy of a symbol. The linker doesn't resolve local
// linkage values so don't check whether those are prevailing.
auto LT = (GlobalValue::LinkageTypes)Flags.Linkage;
- if (IsPrevailing &&
- !GlobalValue::isLocalLinkage(LT) &&
- !IsPrevailing(std::get<2>(VIAndOriginalGUID))) {
+ if (IsPrevailing && !GlobalValue::isLocalLinkage(LT) &&
+ !IsPrevailing(VIAndOriginalGUID.first.getGUID())) {
PendingCallsites.clear();
PendingAllocs.clear();
}
More information about the llvm-commits
mailing list