@@ -49,6 +49,12 @@ ForceInlineFunctions("force-inline",
4949 cl::Hidden,
5050 cl::cat(BoltOptCategory));
5151
52+ static cl::list<std::string> SkipInlineFunctions (
53+ " skip-inline" , cl::CommaSeparated,
54+ cl::desc (" list of functions to never consider for inlining" ),
55+ cl::value_desc(" func1,func2,func3,..." ), cl::Hidden,
56+ cl::cat(BoltOptCategory));
57+
5258static cl::opt<bool > InlineAll (" inline-all" , cl::desc(" inline all functions" ),
5359 cl::cat(BoltOptCategory));
5460
@@ -105,6 +111,12 @@ bool mustConsider(const llvm::bolt::BinaryFunction &Function) {
105111 return false ;
106112}
107113
114+ bool mustSkip (const llvm::bolt::BinaryFunction &Function) {
115+ return llvm::any_of (opts::SkipInlineFunctions, [&](const std::string &Name) {
116+ return Function.hasName (Name);
117+ });
118+ }
119+
108120void syncOptions () {
109121 if (opts::InlineIgnoreCFI)
110122 opts::InlineIgnoreLeafCFI = true ;
@@ -223,7 +235,7 @@ InliningInfo getInliningInfo(const BinaryFunction &BF) {
223235void Inliner::findInliningCandidates (BinaryContext &BC) {
224236 for (const auto &BFI : BC.getBinaryFunctions ()) {
225237 const BinaryFunction &Function = BFI.second ;
226- if (!shouldOptimize (Function))
238+ if (!shouldOptimize (Function) || opts::mustSkip (Function) )
227239 continue ;
228240 const InliningInfo InlInfo = getInliningInfo (Function);
229241 if (InlInfo.Type != INL_NONE)
0 commit comments