diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/ProfileData/InstrProf.cpp | 25 | ||||
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp | 6 |
2 files changed, 20 insertions, 11 deletions
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp index 7e84a2702bd..f459d2d5431 100644 --- a/llvm/lib/ProfileData/InstrProf.cpp +++ b/llvm/lib/ProfileData/InstrProf.cpp @@ -62,6 +62,10 @@ class InstrProfErrorCategoryType : public std::error_category { return "Counter overflow"; case instrprof_error::value_site_count_mismatch: return "Function value site count change detected (counter mismatch)"; + case instrprof_error::compress_failed: + return "Failed to compress data (zlib)"; + case instrprof_error::uncompress_failed: + return "Failed to uncompress data (zlib)"; } llvm_unreachable("A value of instrprof_error has no message."); } @@ -185,8 +189,9 @@ void InstrProfSymtab::create(Module &M, bool InLTO) { finalizeSymtab(); } -int collectPGOFuncNameStrings(const std::vector<std::string> &NameStrs, - bool doCompression, std::string &Result) { +std::error_code +collectPGOFuncNameStrings(const std::vector<std::string> &NameStrs, + bool doCompression, std::string &Result) { assert(NameStrs.size() && "No name data to emit"); uint8_t Header[16], *P = Header; @@ -208,7 +213,7 @@ int collectPGOFuncNameStrings(const std::vector<std::string> &NameStrs, unsigned HeaderLen = P - &Header[0]; Result.append(HeaderStr, HeaderLen); Result += InputStr; - return 0; + return make_error_code(instrprof_error::success); }; if (!doCompression) @@ -220,7 +225,7 @@ int collectPGOFuncNameStrings(const std::vector<std::string> &NameStrs, zlib::BestSizeCompression); if (Success != zlib::StatusOK) - return 1; + return make_error_code(instrprof_error::compress_failed); return WriteStringToResult( CompressedNameStrings.size(), @@ -234,8 +239,9 @@ StringRef getPGOFuncNameVarInitializer(GlobalVariable *NameVar) { return NameStr; } -int collectPGOFuncNameStrings(const std::vector<GlobalVariable *> &NameVars, - std::string &Result, bool doCompression) { +std::error_code +collectPGOFuncNameStrings(const std::vector<GlobalVariable *> &NameVars, + std::string &Result, bool doCompression) { std::vector<std::string> NameStrs; for (auto *NameVar : NameVars) { NameStrs.push_back(getPGOFuncNameVarInitializer(NameVar)); @@ -244,7 +250,8 @@ int collectPGOFuncNameStrings(const std::vector<GlobalVariable *> &NameVars, NameStrs, zlib::isAvailable() && doCompression, Result); } -int readPGOFuncNameStrings(StringRef NameStrings, InstrProfSymtab &Symtab) { +std::error_code readPGOFuncNameStrings(StringRef NameStrings, + InstrProfSymtab &Symtab) { const uint8_t *P = reinterpret_cast<const uint8_t *>(NameStrings.data()); const uint8_t *EndP = reinterpret_cast<const uint8_t *>(NameStrings.data() + NameStrings.size()); @@ -262,7 +269,7 @@ int readPGOFuncNameStrings(StringRef NameStrings, InstrProfSymtab &Symtab) { CompressedSize); if (zlib::uncompress(CompressedNameStrings, UncompressedNameStrings, UncompressedSize) != zlib::StatusOK) - return 1; + return make_error_code(instrprof_error::uncompress_failed); P += CompressedSize; NameStrings = StringRef(UncompressedNameStrings.data(), UncompressedNameStrings.size()); @@ -281,7 +288,7 @@ int readPGOFuncNameStrings(StringRef NameStrings, InstrProfSymtab &Symtab) { P++; } Symtab.finalizeSymtab(); - return 0; + return make_error_code(instrprof_error::success); } instrprof_error InstrProfValueSiteRecord::merge(InstrProfValueSiteRecord &Input, diff --git a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp index 397e64b410e..930001fd684 100644 --- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -374,8 +374,10 @@ void InstrProfiling::emitNameData() { return; std::string CompressedNameStr; - collectPGOFuncNameStrings(ReferencedNames, CompressedNameStr, - DoNameCompression); + if (auto EC = collectPGOFuncNameStrings(ReferencedNames, CompressedNameStr, + DoNameCompression)) { + llvm::report_fatal_error(EC.message(), false); + } auto &Ctx = M->getContext(); auto *NamesVal = llvm::ConstantDataArray::getString( |