Author: Arthur Eubanks Date: 2020-11-08T00:32:35-08:00 New Revision: 226e179f7400025d3d320a6f63ded7d747d25c4a
URL: https://github.com/llvm/llvm-project/commit/226e179f7400025d3d320a6f63ded7d747d25c4a DIFF: https://github.com/llvm/llvm-project/commit/226e179f7400025d3d320a6f63ded7d747d25c4a.diff LOG: Revert "[NewPM] Provide method to run all pipeline callbacks, used for -O0" This reverts commit ae38540042668675dd16c642d850115f217ea59f. As well as some follow-up test fixes. The original change causes new-pass-manager.ll to fail when polly is enabled. Added: Modified: clang/lib/CodeGen/BackendUtil.cpp llvm/include/llvm/Passes/PassBuilder.h llvm/lib/Passes/PassBuilder.cpp llvm/test/CodeGen/BPF/optnone-2.ll llvm/test/Other/new-pass-manager.ll Removed: clang/test/CodeGen/bpf-O0.c llvm/test/Other/new-pm-O0-ep-callbacks.ll ################################################################################ diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 702982897c46..81ae79482d90 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1015,9 +1015,6 @@ static PassBuilder::OptimizationLevel mapToLevel(const CodeGenOptions &Opts) { default: llvm_unreachable("Invalid optimization level!"); - case 0: - return PassBuilder::OptimizationLevel::O0; - case 1: return PassBuilder::OptimizationLevel::O1; @@ -1247,10 +1244,6 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( ModulePassManager MPM(CodeGenOpts.DebugPassManager); if (!CodeGenOpts.DisableLLVMPasses) { - // Map our optimization levels into one of the distinct levels used to - // configure the pipeline. - PassBuilder::OptimizationLevel Level = mapToLevel(CodeGenOpts); - bool IsThinLTO = CodeGenOpts.PrepareForThinLTO; bool IsLTO = CodeGenOpts.PrepareForLTO; @@ -1299,6 +1292,10 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( MPM.addPass(NameAnonGlobalPass()); } } else { + // Map our optimization levels into one of the distinct levels used to + // configure the pipeline. + PassBuilder::OptimizationLevel Level = mapToLevel(CodeGenOpts); + // If we reached here with a non-empty index file name, then the index // file was empty and we are not performing ThinLTO backend compilation // (used in testing in a distributed build environment). Drop any the type @@ -1436,8 +1433,6 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( } if (CodeGenOpts.OptimizationLevel == 0) { - PB.runRegisteredEPCallbacks(MPM, Level, CodeGenOpts.DebugPassManager); - // FIXME: the backends do not handle matrix intrinsics currently. Make // sure they are also lowered in O0. A lightweight version of the pass // should run in the backend pipeline on demand. diff --git a/clang/test/CodeGen/bpf-O0.c b/clang/test/CodeGen/bpf-O0.c deleted file mode 100644 index a8957aa9b9b5..000000000000 --- a/clang/test/CodeGen/bpf-O0.c +++ /dev/null @@ -1,7 +0,0 @@ -// RUN: %clang -O0 %s -target bpf -g -c -o /dev/null -fexperimental-new-pass-manager -// REQUIRES: bpf-registered-target - -struct ss { - int a; -}; -int foo() { return __builtin_btf_type_id(0, 0) + __builtin_preserve_type_info(*(struct ss *)0, 0); } diff --git a/llvm/include/llvm/Passes/PassBuilder.h b/llvm/include/llvm/Passes/PassBuilder.h index 98af21b6276d..31c4782eaba3 100644 --- a/llvm/include/llvm/Passes/PassBuilder.h +++ b/llvm/include/llvm/Passes/PassBuilder.h @@ -594,20 +594,15 @@ class PassBuilder { /// Register a callback for a default optimizer pipeline extension point /// /// This extension point allows adding optimizations at the very end of the - /// function optimization pipeline. + /// function optimization pipeline. A key diff erence between this and the + /// legacy PassManager's OptimizerLast callback is that this extension point + /// is not triggered at O0. Extensions to the O0 pipeline should append their + /// passes to the end of the overall pipeline. void registerOptimizerLastEPCallback( const std::function<void(ModulePassManager &, OptimizationLevel)> &C) { OptimizerLastEPCallbacks.push_back(C); } - /// Run all registered extension point callbacks - /// - /// This runs the registered callbacks in the order they would be run in a - /// typical build*Pipeline(). This allows for reusing register*EPCallback() - /// between O0 and O[123] pipelines. - void runRegisteredEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, - bool DebugLogging); - /// Register a callback for parsing an AliasAnalysis Name to populate /// the given AAManager \p AA void registerParseAACallback( diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index f1672c9f89cc..68bbb01d1fda 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -1658,49 +1658,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, return MPM; } -void PassBuilder::runRegisteredEPCallbacks(ModulePassManager &MPM, - OptimizationLevel Level, - bool DebugLogging) { - assert(Level == OptimizationLevel::O0 && - "runRegisteredEPCallbacks should only be used with O0"); - for (auto &C : PipelineStartEPCallbacks) - C(MPM, Level); - if (!LateLoopOptimizationsEPCallbacks.empty()) { - LoopPassManager LPM(DebugLogging); - for (auto &C : LateLoopOptimizationsEPCallbacks) - C(LPM, Level); - MPM.addPass(createModuleToFunctionPassAdaptor( - createFunctionToLoopPassAdaptor(std::move(LPM)))); - } - if (!LoopOptimizerEndEPCallbacks.empty()) { - LoopPassManager LPM(DebugLogging); - for (auto &C : LoopOptimizerEndEPCallbacks) - C(LPM, Level); - MPM.addPass(createModuleToFunctionPassAdaptor( - createFunctionToLoopPassAdaptor(std::move(LPM)))); - } - if (!ScalarOptimizerLateEPCallbacks.empty()) { - FunctionPassManager FPM(DebugLogging); - for (auto &C : ScalarOptimizerLateEPCallbacks) - C(FPM, Level); - MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); - } - if (!CGSCCOptimizerLateEPCallbacks.empty()) { - CGSCCPassManager CGPM(DebugLogging); - for (auto &C : CGSCCOptimizerLateEPCallbacks) - C(CGPM, Level); - MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); - } - if (!VectorizerStartEPCallbacks.empty()) { - FunctionPassManager FPM(DebugLogging); - for (auto &C : VectorizerStartEPCallbacks) - C(FPM, Level); - MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); - } - for (auto &C : OptimizerLastEPCallbacks) - C(MPM, Level); -} - AAManager PassBuilder::buildDefaultAAPipeline() { AAManager AA; @@ -2283,8 +2240,6 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM, MPM.addPass(createModuleToFunctionPassAdaptor(CoroCleanupPass())); } - runRegisteredEPCallbacks(MPM, L, DebugLogging); - // Do nothing else at all! return Error::success(); } diff --git a/llvm/test/CodeGen/BPF/optnone-2.ll b/llvm/test/CodeGen/BPF/optnone-2.ll index 16cbd67f0b6a..82014bdaf2cc 100644 --- a/llvm/test/CodeGen/BPF/optnone-2.ll +++ b/llvm/test/CodeGen/BPF/optnone-2.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -passes='default<O2>' | llc -march=bpfel -filetype=asm -o /dev/null - -; RUN: opt < %s -passes='default<O0>' | llc -march=bpfel -filetype=asm -o /dev/null - +; TODO: add -O0 once that's supported ; IR generated by ; $ cat /tmp/a.c diff --git a/llvm/test/Other/new-pass-manager.ll b/llvm/test/Other/new-pass-manager.ll index e97af3c0b67b..66cf4fb111e9 100644 --- a/llvm/test/Other/new-pass-manager.ll +++ b/llvm/test/Other/new-pass-manager.ll @@ -356,17 +356,10 @@ ; 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<O0>' -passes-ep-vectorizer-start=no-op-function %s 2>&1 \ +; RUN: -passes='default<O0>' %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 \ diff --git a/llvm/test/Other/new-pm-O0-ep-callbacks.ll b/llvm/test/Other/new-pm-O0-ep-callbacks.ll deleted file mode 100644 index 1645156c1b28..000000000000 --- a/llvm/test/Other/new-pm-O0-ep-callbacks.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt -disable-output -debug-pass-manager -passes-ep-late-loop-optimizations=no-op-loop -passes='default<O0>' 2>&1 < %s | FileCheck %s -; RUN: opt -disable-output -debug-pass-manager -passes-ep-loop-optimizer-end=no-op-loop -passes='default<O0>' 2>&1 < %s | FileCheck %s -; RUN: opt -disable-output -debug-pass-manager -passes-ep-scalar-optimizer-late=no-op-function -passes='default<O0>' 2>&1 < %s | FileCheck %s -; RUN: opt -disable-output -debug-pass-manager -passes-ep-cgscc-optimizer-late=no-op-cgscc -passes='default<O0>' 2>&1 < %s | FileCheck %s -; RUN: opt -disable-output -debug-pass-manager -passes-ep-vectorizer-start=no-op-function -passes='default<O0>' 2>&1 < %s | FileCheck %s -; RUN: opt -disable-output -debug-pass-manager -passes-ep-pipeline-start=no-op-module -passes='default<O0>' 2>&1 < %s | FileCheck %s -; RUN: opt -disable-output -debug-pass-manager -passes-ep-optimizer-last=no-op-function -passes='default<O0>' 2>&1 < %s | FileCheck %s - -; CHECK: Running pass: NoOp - -declare void @bar() local_unnamed_addr - -define void @foo(i32 %n) local_unnamed_addr { -entry: - br label %loop -loop: - %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i32 %iv, 1 - tail call void @bar() - %cmp = icmp eq i32 %iv, %n - br i1 %cmp, label %exit, label %loop -exit: - ret void -} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits