forked from OSchip/llvm-project
Reapply^3 "[ProfileData] (clang) Use Error in InstrProf and Coverage, NFC"
Sync up with "(llvm) Use Error in InstrProf and Coverage". llvm-svn: 270021
This commit is contained in:
parent
9152fd17e9
commit
fa2d595541
|
@ -141,11 +141,13 @@ CodeGenModule::CodeGenModule(ASTContext &C, const HeaderSearchOptions &HSO,
|
|||
if (CodeGenOpts.hasProfileClangUse()) {
|
||||
auto ReaderOrErr = llvm::IndexedInstrProfReader::create(
|
||||
CodeGenOpts.ProfileInstrumentUsePath);
|
||||
if (std::error_code EC = ReaderOrErr.getError()) {
|
||||
if (auto E = ReaderOrErr.takeError()) {
|
||||
unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
|
||||
"Could not read profile %0: %1");
|
||||
getDiags().Report(DiagID) << CodeGenOpts.ProfileInstrumentUsePath
|
||||
<< EC.message();
|
||||
llvm::handleAllErrors(std::move(E), [&](const llvm::ErrorInfoBase &EI) {
|
||||
getDiags().Report(DiagID) << CodeGenOpts.ProfileInstrumentUsePath
|
||||
<< EI.message();
|
||||
});
|
||||
} else
|
||||
PGOReader = std::move(ReaderOrErr.get());
|
||||
}
|
||||
|
|
|
@ -800,20 +800,21 @@ void CodeGenPGO::loadRegionCounts(llvm::IndexedInstrProfReader *PGOReader,
|
|||
bool IsInMainFile) {
|
||||
CGM.getPGOStats().addVisited(IsInMainFile);
|
||||
RegionCounts.clear();
|
||||
llvm::ErrorOr<llvm::InstrProfRecord> RecordErrorOr =
|
||||
llvm::Expected<llvm::InstrProfRecord> RecordExpected =
|
||||
PGOReader->getInstrProfRecord(FuncName, FunctionHash);
|
||||
if (std::error_code EC = RecordErrorOr.getError()) {
|
||||
if (EC == llvm::instrprof_error::unknown_function)
|
||||
if (auto E = RecordExpected.takeError()) {
|
||||
auto IPE = llvm::InstrProfError::take(std::move(E));
|
||||
if (IPE == llvm::instrprof_error::unknown_function)
|
||||
CGM.getPGOStats().addMissing(IsInMainFile);
|
||||
else if (EC == llvm::instrprof_error::hash_mismatch)
|
||||
else if (IPE == llvm::instrprof_error::hash_mismatch)
|
||||
CGM.getPGOStats().addMismatched(IsInMainFile);
|
||||
else if (EC == llvm::instrprof_error::malformed)
|
||||
else if (IPE == llvm::instrprof_error::malformed)
|
||||
// TODO: Consider a more specific warning for this case.
|
||||
CGM.getPGOStats().addMismatched(IsInMainFile);
|
||||
return;
|
||||
}
|
||||
ProfRecord =
|
||||
llvm::make_unique<llvm::InstrProfRecord>(std::move(RecordErrorOr.get()));
|
||||
llvm::make_unique<llvm::InstrProfRecord>(std::move(RecordExpected.get()));
|
||||
RegionCounts = ProfRecord->Counts;
|
||||
}
|
||||
|
||||
|
|
|
@ -403,7 +403,8 @@ static void setPGOUseInstrumentor(CodeGenOptions &Opts,
|
|||
const std::string ProfileName) {
|
||||
auto ReaderOrErr = llvm::IndexedInstrProfReader::create(ProfileName);
|
||||
// In error, return silently and let Clang PGOUse report the error message.
|
||||
if (ReaderOrErr.getError()) {
|
||||
if (auto E = ReaderOrErr.takeError()) {
|
||||
llvm::consumeError(std::move(E));
|
||||
Opts.setProfileUse(CodeGenOptions::ProfileClangInstr);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue