Skip to content

Commit

Permalink
IR: Tweak the API around adding modules to the summary index.
Browse files Browse the repository at this point in the history
The current name (addModulePath) and return value
(ModulePathStringTableTy::iterator) is a little confusing. This
API adds a module, not just a path. And the iterator is basically
just an implementation detail of the summary index. Address
both of those issues by renaming to addModule and introducing a
ModuleSummaryIndex::ModuleInfo type that the function returns.

Differential Revision: https://reviews.llvm.org/D34124

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305422 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
pcc committed Jun 14, 2017
1 parent 458f913 commit ff3e8e2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 23 deletions.
15 changes: 7 additions & 8 deletions include/llvm/IR/ModuleSummaryIndex.h
Original file line number Diff line number Diff line change
Expand Up @@ -691,14 +691,13 @@ class ModuleSummaryIndex {
return Pair.first;
}

/// Add a new module path with the given \p Hash, mapped to the given \p
/// ModID, and return an iterator to the entry in the index.
ModulePathStringTableTy::iterator
addModulePath(StringRef ModPath, uint64_t ModId,
ModuleHash Hash = ModuleHash{{0}}) {
return ModulePathStringTable.insert(std::make_pair(
ModPath,
std::make_pair(ModId, Hash))).first;
typedef ModulePathStringTableTy::value_type ModuleInfo;

/// Add a new module with the given \p Hash, mapped to the given \p
/// ModID, and return a reference to the module.
ModuleInfo *addModule(StringRef ModPath, uint64_t ModId,
ModuleHash Hash = ModuleHash{{0}}) {
return &*ModulePathStringTable.insert({ModPath, {ModId, Hash}}).first;
}

/// Check if the given Module has any functions available for exporting
Expand Down
30 changes: 15 additions & 15 deletions lib/Bitcode/Reader/BitcodeReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@ class ModuleSummaryIndexBitcodeReader : public BitcodeReaderBase {
std::pair<ValueInfo, GlobalValue::GUID>
getValueInfoFromValueId(unsigned ValueId);

ModulePathStringTableTy::iterator addThisModulePath();
ModuleSummaryIndex::ModuleInfo *addThisModule();
};

} // end anonymous namespace
Expand Down Expand Up @@ -4701,9 +4701,9 @@ ModuleSummaryIndexBitcodeReader::ModuleSummaryIndexBitcodeReader(
: BitcodeReaderBase(std::move(Cursor), Strtab), TheIndex(TheIndex),
ModulePath(ModulePath), ModuleId(ModuleId) {}

ModulePathStringTableTy::iterator
ModuleSummaryIndexBitcodeReader::addThisModulePath() {
return TheIndex.addModulePath(ModulePath, ModuleId);
ModuleSummaryIndex::ModuleInfo *
ModuleSummaryIndexBitcodeReader::addThisModule() {
return TheIndex.addModule(ModulePath, ModuleId);
}

std::pair<ValueInfo, GlobalValue::GUID>
Expand Down Expand Up @@ -4899,7 +4899,7 @@ Error ModuleSummaryIndexBitcodeReader::parseModule() {
case bitc::MODULE_CODE_HASH: {
if (Record.size() != 5)
return error("Invalid hash length " + Twine(Record.size()).str());
auto &Hash = addThisModulePath()->second.second;
auto &Hash = addThisModule()->second.second;
int Pos = 0;
for (auto &Val : Record) {
assert(!(Val >> 32) && "Unexpected high bits set");
Expand Down Expand Up @@ -5080,7 +5080,7 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
PendingTypeTestAssumeConstVCalls.clear();
PendingTypeCheckedLoadConstVCalls.clear();
auto VIAndOriginalGUID = getValueInfoFromValueId(ValueID);
FS->setModulePath(addThisModulePath()->first());
FS->setModulePath(addThisModule()->first());
FS->setOriginalName(VIAndOriginalGUID.second);
TheIndex.addGlobalValueSummary(VIAndOriginalGUID.first, std::move(FS));
break;
Expand All @@ -5100,7 +5100,7 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
// string table section in the per-module index, we create a single
// module path string table entry with an empty (0) ID to take
// ownership.
AS->setModulePath(addThisModulePath()->first());
AS->setModulePath(addThisModule()->first());

GlobalValue::GUID AliaseeGUID =
getValueInfoFromValueId(AliaseeID).first.getGUID();
Expand All @@ -5123,7 +5123,7 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
std::vector<ValueInfo> Refs =
makeRefList(ArrayRef<uint64_t>(Record).slice(2));
auto FS = llvm::make_unique<GlobalVarSummary>(Flags, std::move(Refs));
FS->setModulePath(addThisModulePath()->first());
FS->setModulePath(addThisModule()->first());
auto GUID = getValueInfoFromValueId(ValueID);
FS->setOriginalName(GUID.second);
TheIndex.addGlobalValueSummary(GUID.first, std::move(FS));
Expand Down Expand Up @@ -5265,7 +5265,7 @@ Error ModuleSummaryIndexBitcodeReader::parseModuleStringTable() {
SmallVector<uint64_t, 64> Record;

SmallString<128> ModulePath;
ModulePathStringTableTy::iterator LastSeenModulePath;
ModuleSummaryIndex::ModuleInfo *LastSeenModule = nullptr;

while (true) {
BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
Expand All @@ -5292,8 +5292,8 @@ Error ModuleSummaryIndexBitcodeReader::parseModuleStringTable() {
if (convertToString(Record, 1, ModulePath))
return error("Invalid record");

LastSeenModulePath = TheIndex.addModulePath(ModulePath, ModuleId);
ModuleIdMap[ModuleId] = LastSeenModulePath->first();
LastSeenModule = TheIndex.addModule(ModulePath, ModuleId);
ModuleIdMap[ModuleId] = LastSeenModule->first();

ModulePath.clear();
break;
Expand All @@ -5302,15 +5302,15 @@ Error ModuleSummaryIndexBitcodeReader::parseModuleStringTable() {
case bitc::MST_CODE_HASH: {
if (Record.size() != 5)
return error("Invalid hash length " + Twine(Record.size()).str());
if (LastSeenModulePath == TheIndex.modulePaths().end())
if (!LastSeenModule)
return error("Invalid hash that does not follow a module path");
int Pos = 0;
for (auto &Val : Record) {
assert(!(Val >> 32) && "Unexpected high bits set");
LastSeenModulePath->second.second[Pos++] = Val;
LastSeenModule->second.second[Pos++] = Val;
}
// Reset LastSeenModulePath to avoid overriding the hash unexpectedly.
LastSeenModulePath = TheIndex.modulePaths().end();
// Reset LastSeenModule to avoid overriding the hash unexpectedly.
LastSeenModule = nullptr;
break;
}
}
Expand Down

0 comments on commit ff3e8e2

Please sign in to comment.