[BOLT][NFC] Simplify YAMLProfileReader

- Add `FunctionSet` type alias.
- Use any_of
- Use ErrorOr handling pattern

Reviewed By: #bolt, maksfb

Differential Revision: https://reviews.llvm.org/D156043
This commit is contained in:
Amir Ayupov 2023-07-26 08:25:28 -07:00 committed by Amir Ayupov
parent cdf7ca6db7
commit e8a75c3f6e
2 changed files with 15 additions and 23 deletions

View File

@ -51,17 +51,17 @@ private:
/// Map a function ID from a YAML profile to a BinaryFunction object.
std::vector<BinaryFunction *> YamlProfileToFunction;
using FunctionSet = std::unordered_set<const BinaryFunction *>;
/// To keep track of functions that have a matched profile before the profile
/// is attributed.
std::unordered_set<const BinaryFunction *> ProfiledFunctions;
FunctionSet ProfiledFunctions;
/// For LTO symbol resolution.
/// Map a common LTO prefix to a list of YAML profiles matching the prefix.
StringMap<std::vector<yaml::bolt::BinaryFunctionProfile *>> LTOCommonNameMap;
/// Map a common LTO prefix to a set of binary functions.
StringMap<std::unordered_set<const BinaryFunction *>>
LTOCommonNameFunctionMap;
StringMap<FunctionSet> LTOCommonNameFunctionMap;
/// Strict matching of a name in a profile to its contents.
StringMap<yaml::bolt::BinaryFunctionProfile *> ProfileNameToProfile;

View File

@ -36,13 +36,12 @@ namespace llvm {
namespace bolt {
bool YAMLProfileReader::isYAML(const StringRef Filename) {
ErrorOr<std::unique_ptr<MemoryBuffer>> MB =
MemoryBuffer::getFileOrSTDIN(Filename);
if (std::error_code EC = MB.getError())
report_error(Filename, EC);
StringRef Buffer = MB.get()->getBuffer();
if (Buffer.startswith("---\n"))
return true;
if (auto MB = MemoryBuffer::getFileOrSTDIN(Filename)) {
StringRef Buffer = (*MB)->getBuffer();
return Buffer.startswith("---\n");
} else {
report_error(Filename, MB.getError());
}
return false;
}
@ -66,13 +65,9 @@ void YAMLProfileReader::buildNameMaps(
}
bool YAMLProfileReader::hasLocalsWithFileName() const {
for (const StringMapEntry<yaml::bolt::BinaryFunctionProfile *> &KV :
ProfileNameToProfile) {
const StringRef &FuncName = KV.getKey();
if (FuncName.count('/') == 2 && FuncName[0] != '/')
return true;
}
return false;
return llvm::any_of(ProfileNameToProfile.keys(), [](StringRef FuncName) {
return FuncName.count('/') == 2 && FuncName[0] != '/';
});
}
bool YAMLProfileReader::parseFunctionProfile(
@ -327,12 +322,9 @@ Error YAMLProfileReader::readProfile(BinaryContext &BC) {
auto profileMatches = [](const yaml::bolt::BinaryFunctionProfile &Profile,
BinaryFunction &BF) {
if (opts::IgnoreHash && Profile.NumBasicBlocks == BF.size())
return true;
if (!opts::IgnoreHash &&
Profile.Hash == static_cast<uint64_t>(BF.getHash()))
return true;
return false;
if (opts::IgnoreHash)
return Profile.NumBasicBlocks == BF.size();
return Profile.Hash == static_cast<uint64_t>(BF.getHash());
};
// We have to do 2 passes since LTO introduces an ambiguity in function