diff --git a/llvm/include/llvm/IR/PassManager.h b/llvm/include/llvm/IR/PassManager.h --- a/llvm/include/llvm/IR/PassManager.h +++ b/llvm/include/llvm/IR/PassManager.h @@ -491,6 +491,9 @@ ExtraArgTs... ExtraArgs) { PreservedAnalyses PA = PreservedAnalyses::all(); + if (Passes.empty()) + return PA; + // Request PassInstrumentation from analysis manager, will use it to run // instrumenting callbacks for the passes later. // Here we use std::tuple wrapper over getResult which helps to extract diff --git a/llvm/test/Other/new-pass-manager.ll b/llvm/test/Other/new-pass-manager.ll --- a/llvm/test/Other/new-pass-manager.ll +++ b/llvm/test/Other/new-pass-manager.ll @@ -356,17 +356,11 @@ ; CHECK-CALLGRAPH: Running analysis: CallGraphAnalysis ; CHECK-CALLGRAPH: Finished llvm::Module pass manager run -;; If Polly is enabled, registerPollyPasses adds an ep-vectorizer-start callback. -;; There may or may not be a function pass manager run. -;; Add a no-op-function to unify the two cases. ; RUN: opt -disable-output -disable-verify -debug-pass-manager \ -; RUN: -passes='default' -passes-ep-vectorizer-start=no-op-function %s 2>&1 \ +; RUN: -passes='default' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-O0 ; CHECK-O0: Starting llvm::Module pass manager run ; CHECK-O0-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}> -; CHECK-O0-NEXT: Starting llvm::Function pass manager run -; CHECK-O0-NEXT: Running pass: NoOpFunctionPass on foo -; CHECK-O0-NEXT: Finished llvm::Function pass manager run ; CHECK-O0-NEXT: Finished llvm::Module pass manager run ; RUN: opt -disable-output -disable-verify -debug-pass-manager \