@@ -87,6 +87,9 @@ llvm::cl::list<std::string>
87
87
SILDisablePass (" sil-disable-pass" , llvm::cl::CommaSeparated,
88
88
llvm::cl::desc (" Disable passes "
89
89
" 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" ));
90
93
91
94
llvm::cl::list<std::string> SILVerifyBeforePass (
92
95
" sil-verify-before-pass" , llvm::cl::CommaSeparated,
@@ -204,7 +207,13 @@ static bool doPrintAfter(SILTransform *T, SILFunction *F, bool Default) {
204
207
return Default;
205
208
}
206
209
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
+
208
217
for (const std::string &NamePattern : SILDisablePass) {
209
218
if (T->getTag ().find (NamePattern) != StringRef::npos
210
219
|| T->getID ().find (NamePattern) != StringRef::npos) {
@@ -395,7 +404,7 @@ void SILPassManager::runPassOnFunction(unsigned TransIdx, SILFunction *F) {
395
404
return ;
396
405
}
397
406
398
- if (isDisabled (SFT)) {
407
+ if (isDisabled (SFT, F )) {
399
408
if (SILPrintPassName)
400
409
dumpPassInfo (" (Disabled)" , TransIdx, F);
401
410
return ;
0 commit comments