swamulism created this revision. swamulism added a reviewer: aeubanks. swamulism requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
Currently there is an issue where the legacy pass manager uses a different OptBisect counter than the new pass manager. This means that when using OptBisect under the NPM it runs twice when it should only run once. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D92897 Files: clang/lib/CodeGen/BackendUtil.cpp clang/test/CodeGen/new-pass-manager-O1-opt-bisect.c llvm/include/llvm/Passes/StandardInstrumentations.h Index: llvm/include/llvm/Passes/StandardInstrumentations.h =================================================================== --- llvm/include/llvm/Passes/StandardInstrumentations.h +++ llvm/include/llvm/Passes/StandardInstrumentations.h @@ -281,6 +281,7 @@ void registerCallbacks(PassInstrumentationCallbacks &PIC); TimePassesHandler &getTimePasses() { return TimePasses; } + OptBisectInstrumentation &getOptBisect() { return OptBisect; } }; extern template class ChangeReporter<std::string>; Index: clang/test/CodeGen/new-pass-manager-O1-opt-bisect.c =================================================================== --- /dev/null +++ clang/test/CodeGen/new-pass-manager-O1-opt-bisect.c @@ -0,0 +1,8 @@ +// Test NPM with -O1/opt-bisect +// +// RUN: %clang_cc1 -triple x86_64-linux-gnu -O1 -fexperimental-new-pass-manager %s -fdebug-pass-manager -mllvm -opt-bisect-limit=-1 -emit-llvm -o /dev/null 2>&1 | FileCheck %s + +// CHECK: BISECT: running pass (1) +// CHECK-NOT: BISECT: running pass (1) + +int func(int a) { return a; } Index: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -1149,6 +1149,9 @@ SI.registerCallbacks(PIC); PassBuilder PB(CodeGenOpts.DebugPassManager, TM.get(), PTO, PGOOpt, &PIC); + // Sets legacy pass manager OptBisect to the same one as npm so passes are properly skipped + TheModule->getContext().setOptPassGate(SI.getOptBisect()); + // Attempt to load pass plugins and register their callbacks with PB. for (auto &PluginFN : CodeGenOpts.PassPlugins) { auto PassPlugin = PassPlugin::Load(PluginFN);
Index: llvm/include/llvm/Passes/StandardInstrumentations.h =================================================================== --- llvm/include/llvm/Passes/StandardInstrumentations.h +++ llvm/include/llvm/Passes/StandardInstrumentations.h @@ -281,6 +281,7 @@ void registerCallbacks(PassInstrumentationCallbacks &PIC); TimePassesHandler &getTimePasses() { return TimePasses; } + OptBisectInstrumentation &getOptBisect() { return OptBisect; } }; extern template class ChangeReporter<std::string>; Index: clang/test/CodeGen/new-pass-manager-O1-opt-bisect.c =================================================================== --- /dev/null +++ clang/test/CodeGen/new-pass-manager-O1-opt-bisect.c @@ -0,0 +1,8 @@ +// Test NPM with -O1/opt-bisect +// +// RUN: %clang_cc1 -triple x86_64-linux-gnu -O1 -fexperimental-new-pass-manager %s -fdebug-pass-manager -mllvm -opt-bisect-limit=-1 -emit-llvm -o /dev/null 2>&1 | FileCheck %s + +// CHECK: BISECT: running pass (1) +// CHECK-NOT: BISECT: running pass (1) + +int func(int a) { return a; } Index: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -1149,6 +1149,9 @@ SI.registerCallbacks(PIC); PassBuilder PB(CodeGenOpts.DebugPassManager, TM.get(), PTO, PGOOpt, &PIC); + // Sets legacy pass manager OptBisect to the same one as npm so passes are properly skipped + TheModule->getContext().setOptPassGate(SI.getOptBisect()); + // Attempt to load pass plugins and register their callbacks with PB. for (auto &PluginFN : CodeGenOpts.PassPlugins) { auto PassPlugin = PassPlugin::Load(PluginFN);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits