@@ -87,6 +87,9 @@ llvm::cl::list<std::string>
8787 SILDisablePass (" sil-disable-pass" , llvm::cl::CommaSeparated,
8888 llvm::cl::desc (" Disable passes "
8989 " which contain a string from this list" ));
90+ llvm::cl::list<std::string> SILDisablePassOnlyFun (
91+ " sil-disable-pass-only-function" , llvm::cl::CommaSeparated,
92+ llvm::cl::desc (" Apply -sil-disable-pass only on this function" ));
9093
9194llvm::cl::list<std::string> SILVerifyBeforePass (
9295 " sil-verify-before-pass" , llvm::cl::CommaSeparated,
@@ -204,7 +207,13 @@ static bool doPrintAfter(SILTransform *T, SILFunction *F, bool Default) {
204207 return Default;
205208}
206209
207- static bool isDisabled (SILTransform *T) {
210+ static bool isDisabled (SILTransform *T, SILFunction *F = nullptr ) {
211+ if (!SILDisablePassOnlyFun.empty () && F &&
212+ SILDisablePassOnlyFun.end () == std::find (SILDisablePassOnlyFun.begin (),
213+ SILDisablePassOnlyFun.end (),
214+ F->getName ()))
215+ return false ;
216+
208217 for (const std::string &NamePattern : SILDisablePass) {
209218 if (T->getTag ().find (NamePattern) != StringRef::npos
210219 || T->getID ().find (NamePattern) != StringRef::npos) {
@@ -395,7 +404,7 @@ void SILPassManager::runPassOnFunction(unsigned TransIdx, SILFunction *F) {
395404 return ;
396405 }
397406
398- if (isDisabled (SFT)) {
407+ if (isDisabled (SFT, F )) {
399408 if (SILPrintPassName)
400409 dumpPassInfo (" (Disabled)" , TransIdx, F);
401410 return ;
0 commit comments