From f62b084e92e0523bc13ac958603db23e0eccad9a Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 15 Feb 2023 23:31:05 -0800 Subject: [PATCH] [LoopDeletion] Remove legacy pass Following recent changes to remove non-core legacy passes. --- .../transforms/scalar_opts/llvm_scalar_opts.ml | 3 -- .../transforms/scalar_opts/llvm_scalar_opts.mli | 5 -- .../transforms/scalar_opts/scalar_opts_ocaml.c | 6 --- llvm/include/llvm-c/Transforms/Scalar.h | 3 -- llvm/include/llvm/InitializePasses.h | 1 - llvm/include/llvm/LinkAllPasses.h | 1 - llvm/include/llvm/Transforms/Scalar.h | 7 --- llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | 1 - llvm/lib/Transforms/Scalar/LoopDeletion.cpp | 59 ---------------------- llvm/lib/Transforms/Scalar/Scalar.cpp | 5 -- llvm/test/Bindings/OCaml/scalar_opts.ml | 1 - llvm/test/CodeGen/Hexagon/loop-idiom/lcssa.ll | 2 +- polly/lib/CodeGen/CodegenCleanup.cpp | 1 - 13 files changed, 1 insertion(+), 94 deletions(-) diff --git a/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml b/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml index 9feb6b4..30f4f8f 100644 --- a/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml +++ b/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml @@ -42,9 +42,6 @@ external add_jump_threading external add_licm : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit = "llvm_add_licm" -external add_loop_deletion - : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit - = "llvm_add_loop_deletion" external add_loop_idiom : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit = "llvm_add_loop_idiom" diff --git a/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli b/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli index 8d22a68..7ac557d 100644 --- a/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli +++ b/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli @@ -71,11 +71,6 @@ external add_licm : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit = "llvm_add_licm" -(** See the [llvm::createLoopDeletionPass] function. *) -external add_loop_deletion - : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit - = "llvm_add_loop_deletion" - (** See the [llvm::createLoopIdiomPass] function. *) external add_loop_idiom : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit diff --git a/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c b/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c index cdb5f3d..12e0f88 100644 --- a/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c +++ b/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c @@ -92,12 +92,6 @@ value llvm_add_licm(LLVMPassManagerRef PM) { } /* [ unit */ -value llvm_add_loop_deletion(LLVMPassManagerRef PM) { - LLVMAddLoopDeletionPass(PM); - return Val_unit; -} - -/* [ unit */ value llvm_add_loop_idiom(LLVMPassManagerRef PM) { LLVMAddLoopIdiomPass(PM); return Val_unit; diff --git a/llvm/include/llvm-c/Transforms/Scalar.h b/llvm/include/llvm-c/Transforms/Scalar.h index e28b1d7..5aaeb94 100644 --- a/llvm/include/llvm-c/Transforms/Scalar.h +++ b/llvm/include/llvm-c/Transforms/Scalar.h @@ -76,9 +76,6 @@ void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM); /** See llvm::createLICMPass function. */ void LLVMAddLICMPass(LLVMPassManagerRef PM); -/** See llvm::createLoopDeletionPass function. */ -void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM); - /** See llvm::createLoopIdiomPass function */ void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM); diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index 7a1011c..5c531ea 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -206,7 +206,6 @@ void initializeLocalStackSlotPassPass(PassRegistry&); void initializeLocalizerPass(PassRegistry&); void initializeLoopAccessLegacyAnalysisPass(PassRegistry&); void initializeLoopDataPrefetchLegacyPassPass(PassRegistry&); -void initializeLoopDeletionLegacyPassPass(PassRegistry&); void initializeLoopExtractorLegacyPassPass(PassRegistry &); void initializeLoopGuardWideningLegacyPassPass(PassRegistry&); void initializeLoopIdiomRecognizeLegacyPassPass(PassRegistry&); diff --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h index 0b49943..8d1d188 100644 --- a/llvm/include/llvm/LinkAllPasses.h +++ b/llvm/include/llvm/LinkAllPasses.h @@ -153,7 +153,6 @@ namespace { (void) llvm::createGVNPass(); (void) llvm::createNewGVNPass(); (void) llvm::createMemCpyOptPass(); - (void) llvm::createLoopDeletionPass(); (void) llvm::createPostDomTree(); (void) llvm::createInstructionNamerPass(); (void) llvm::createMetaRenamerPass(); diff --git a/llvm/include/llvm/Transforms/Scalar.h b/llvm/include/llvm/Transforms/Scalar.h index 3bc0000..2dea752 100644 --- a/llvm/include/llvm/Transforms/Scalar.h +++ b/llvm/include/llvm/Transforms/Scalar.h @@ -298,13 +298,6 @@ FunctionPass *createMemCpyOptPass(); //===----------------------------------------------------------------------===// // -// LoopDeletion - This pass performs DCE of non-infinite loops that it -// can prove are dead. -// -Pass *createLoopDeletionPass(); - -//===----------------------------------------------------------------------===// -// // ConstantHoisting - This pass prepares a function for expensive constants. // FunctionPass *createConstantHoistingPass(); diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp index a8c4eb2..841e608 100644 --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -154,7 +154,6 @@ void PassManagerBuilder::addFunctionSimplificationPasses( // We resume loop passes creating a second loop pipeline here. MPM.add(createLoopIdiomPass()); // Recognize idioms like memset. MPM.add(createIndVarSimplifyPass()); // Canonicalize indvars - MPM.add(createLoopDeletionPass()); // Delete dead loops // Unroll small loops and perform peeling. MPM.add(createSimpleLoopUnrollPass(OptLevel, DisableUnrollLoops, diff --git a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp index 42fc69a..17ff0c2 100644 --- a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp +++ b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp @@ -539,62 +539,3 @@ PreservedAnalyses LoopDeletionPass::run(Loop &L, LoopAnalysisManager &AM, PA.preserve(); return PA; } - -namespace { -class LoopDeletionLegacyPass : public LoopPass { -public: - static char ID; // Pass ID, replacement for typeid - LoopDeletionLegacyPass() : LoopPass(ID) { - initializeLoopDeletionLegacyPassPass(*PassRegistry::getPassRegistry()); - } - - // Possibly eliminate loop L if it is dead. - bool runOnLoop(Loop *L, LPPassManager &) override; - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addPreserved(); - getLoopAnalysisUsage(AU); - } -}; -} - -char LoopDeletionLegacyPass::ID = 0; -INITIALIZE_PASS_BEGIN(LoopDeletionLegacyPass, "loop-deletion", - "Delete dead loops", false, false) -INITIALIZE_PASS_DEPENDENCY(LoopPass) -INITIALIZE_PASS_END(LoopDeletionLegacyPass, "loop-deletion", - "Delete dead loops", false, false) - -Pass *llvm::createLoopDeletionPass() { return new LoopDeletionLegacyPass(); } - -bool LoopDeletionLegacyPass::runOnLoop(Loop *L, LPPassManager &LPM) { - if (skipLoop(L)) - return false; - DominatorTree &DT = getAnalysis().getDomTree(); - ScalarEvolution &SE = getAnalysis().getSE(); - LoopInfo &LI = getAnalysis().getLoopInfo(); - auto *MSSAAnalysis = getAnalysisIfAvailable(); - MemorySSA *MSSA = nullptr; - if (MSSAAnalysis) - MSSA = &MSSAAnalysis->getMSSA(); - // For the old PM, we can't use OptimizationRemarkEmitter as an analysis - // pass. Function analyses need to be preserved across loop transformations - // but ORE cannot be preserved (see comment before the pass definition). - OptimizationRemarkEmitter ORE(L->getHeader()->getParent()); - - LLVM_DEBUG(dbgs() << "Analyzing Loop for deletion: "); - LLVM_DEBUG(L->dump()); - - LoopDeletionResult Result = deleteLoopIfDead(L, DT, SE, LI, MSSA, ORE); - - // If we can prove the backedge isn't taken, just break it and be done. This - // leaves the loop structure in place which means it can handle dispatching - // to the right exit based on whatever loop invariant structure remains. - if (Result != LoopDeletionResult::Deleted) - Result = merge(Result, breakBackedgeIfNotTaken(L, DT, SE, LI, MSSA, ORE)); - - if (Result == LoopDeletionResult::Deleted) - LPM.markLoopAsDeleted(*L); - - return Result != LoopDeletionResult::Unmodified; -} diff --git a/llvm/lib/Transforms/Scalar/Scalar.cpp b/llvm/lib/Transforms/Scalar/Scalar.cpp index a718aef..24ca54a 100644 --- a/llvm/lib/Transforms/Scalar/Scalar.cpp +++ b/llvm/lib/Transforms/Scalar/Scalar.cpp @@ -59,7 +59,6 @@ void llvm::initializeScalarOpts(PassRegistry &Registry) { initializeLegacyLICMPassPass(Registry); initializeLegacyLoopSinkPassPass(Registry); initializeLoopDataPrefetchLegacyPassPass(Registry); - initializeLoopDeletionLegacyPassPass(Registry); initializeLoopAccessLegacyAnalysisPass(Registry); initializeLoopInstSimplifyLegacyPassPass(Registry); initializeLoopPredicationLegacyPassPass(Registry); @@ -169,10 +168,6 @@ void LLVMAddLICMPass(LLVMPassManagerRef PM) { unwrap(PM)->add(createLICMPass()); } -void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { - unwrap(PM)->add(createLoopDeletionPass()); -} - void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { unwrap(PM)->add(createLoopIdiomPass()); } diff --git a/llvm/test/Bindings/OCaml/scalar_opts.ml b/llvm/test/Bindings/OCaml/scalar_opts.ml index f975546..d63d63b 100644 --- a/llvm/test/Bindings/OCaml/scalar_opts.ml +++ b/llvm/test/Bindings/OCaml/scalar_opts.ml @@ -53,7 +53,6 @@ let test_transforms () = ++ add_instruction_combination ++ add_jump_threading ++ add_licm - ++ add_loop_deletion ++ add_loop_idiom ++ add_loop_rotation ++ add_loop_unroll diff --git a/llvm/test/CodeGen/Hexagon/loop-idiom/lcssa.ll b/llvm/test/CodeGen/Hexagon/loop-idiom/lcssa.ll index cb34d9c..140c676 100644 --- a/llvm/test/CodeGen/Hexagon/loop-idiom/lcssa.ll +++ b/llvm/test/CodeGen/Hexagon/loop-idiom/lcssa.ll @@ -1,4 +1,4 @@ -; RUN: opt -hexagon-loop-idiom -loop-deletion -gvn -S < %s +; RUN: opt -S -hexagon-loop-idiom < %s | opt -S -passes='loop(loop-deletion),gvn' ; REQUIRES: asserts ; This tests that the HexagonLoopIdiom pass does not mark LCSSA information diff --git a/polly/lib/CodeGen/CodegenCleanup.cpp b/polly/lib/CodeGen/CodegenCleanup.cpp index 100bc93..0f66d75 100644 --- a/polly/lib/CodeGen/CodegenCleanup.cpp +++ b/polly/lib/CodeGen/CodegenCleanup.cpp @@ -85,7 +85,6 @@ public: FPM->add(createInstructionCombiningPass(true)); FPM->add(createIndVarSimplifyPass()); FPM->add(createLoopIdiomPass()); - FPM->add(createLoopDeletionPass()); FPM->add(createCFGSimplificationPass()); FPM->add(createSimpleLoopUnrollPass(3)); FPM->add(createMergedLoadStoreMotionPass()); -- 2.7.4