diff --git a/bolt/lib/Passes/ReorderFunctions.cpp b/bolt/lib/Passes/ReorderFunctions.cpp --- a/bolt/lib/Passes/ReorderFunctions.cpp +++ b/bolt/lib/Passes/ReorderFunctions.cpp @@ -333,6 +333,7 @@ case RT_USER: { uint32_t Index = 0; + uint32_t InvalidEntries = 0; for (const std::string &Function : readFunctionOrderFile()) { std::vector FuncAddrs; @@ -355,8 +356,10 @@ } if (FuncAddrs.empty()) { - errs() << "BOLT-WARNING: Reorder functions: can't find function for " - << Function << ".\n"; + if (opts::Verbosity >= 1) + errs() << "BOLT-WARNING: Reorder functions: can't find function " + << "for " << Function << ".\n"; + ++InvalidEntries; continue; } @@ -366,8 +369,10 @@ BinaryFunction *BF = BC.getFunctionForSymbol(FuncBD->getSymbol()); if (!BF) { - errs() << "BOLT-WARNING: Reorder functions: can't find function for " - << Function << ".\n"; + if (opts::Verbosity >= 1) + errs() << "BOLT-WARNING: Reorder functions: can't find function " + << "for " << Function << ".\n"; + ++InvalidEntries; break; } if (!BF->hasValidIndex()) @@ -377,6 +382,9 @@ << ".\n"; } } + if (InvalidEntries) + errs() << "BOLT-WARNING: ReorderFunctions: can't find functions for " + << InvalidEntries << " entries in -function-order list.\n"; } break; } diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp --- a/bolt/lib/Rewrite/RewriteInstance.cpp +++ b/bolt/lib/Rewrite/RewriteInstance.cpp @@ -2756,10 +2756,14 @@ LiteThresholdExecCount, static_cast(opts::LiteThresholdCount)); StringSet<> ReorderFunctionsUserSet; + StringSet<> ReorderFunctionsLTOCommonSet; if (opts::ReorderFunctions == ReorderFunctions::RT_USER) { for (const std::string &Function : - ReorderFunctions::readFunctionOrderFile()) + ReorderFunctions::readFunctionOrderFile()) { ReorderFunctionsUserSet.insert(Function); + if (std::optional LTOCommonName = getLTOCommonName(Function)) + ReorderFunctionsLTOCommonSet.insert(*LTOCommonName); + } } uint64_t NumFunctionsToProcess = 0; @@ -2795,6 +2799,10 @@ }); if (Match.has_value()) return true; + for (const StringRef Name : Function.getNames()) + if (std::optional LTOCommonName = getLTOCommonName(Name)) + if (ReorderFunctionsLTOCommonSet.contains(*LTOCommonName)) + return true; } if (ProfileReader && !ProfileReader->mayHaveProfileData(Function))