[llvm-branch-commits] [Transforms] Delete loop-extract pass (PR #214252)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Aug 5 08:17:45 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
This was only used by bugpoint as far as I can tell, which was deleted
in 9d5574dda60151dcd1eb6f315c20e4d9120596f9. Given it is not used
anywhere, remove it.
I'm also not sure it's super useful for downstreams. When we were doing
a research project during my undergrad that needed loop etraction, we
ended up writing our own utilities to do this for reasons that I cannot
remember exactly.
---
Patch is 44.79 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/214252.diff
24 Files Affected:
- (modified) llvm/docs/Passes.md (-8)
- (modified) llvm/include/llvm/InitializePasses.h (-2)
- (modified) llvm/include/llvm/LinkAllPasses.h (-2)
- (modified) llvm/include/llvm/Transforms/IPO.h (-12)
- (removed) llvm/include/llvm/Transforms/IPO/LoopExtractor.h (-35)
- (modified) llvm/lib/Passes/PassBuilder.cpp (-5)
- (modified) llvm/lib/Passes/PassRegistry.def (-8)
- (modified) llvm/lib/Transforms/IPO/CMakeLists.txt (-1)
- (modified) llvm/lib/Transforms/IPO/IPO.cpp (-2)
- (removed) llvm/lib/Transforms/IPO/LoopExtractor.cpp (-289)
- (modified) llvm/test/Other/new-pm-print-pipeline.ll (-3)
- (removed) llvm/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll (-75)
- (removed) llvm/test/Transforms/CodeExtractor/2004-03-14-DominanceProblem.ll (-33)
- (removed) llvm/test/Transforms/CodeExtractor/2004-03-14-NoSwitchSupport.ll (-28)
- (removed) llvm/test/Transforms/CodeExtractor/2004-03-17-MissedLiveIns.ll (-47)
- (removed) llvm/test/Transforms/CodeExtractor/2004-03-17-UpdatePHIsOutsideRegion.ll (-23)
- (removed) llvm/test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll (-198)
- (removed) llvm/test/Transforms/CodeExtractor/BlockAddressReference.ll (-36)
- (removed) llvm/test/Transforms/CodeExtractor/BlockAddressSelfReference.ll (-50)
- (removed) llvm/test/Transforms/CodeExtractor/LoopExtractor.ll (-68)
- (removed) llvm/test/Transforms/CodeExtractor/LoopExtractor_alloca.ll (-54)
- (removed) llvm/test/Transforms/CodeExtractor/LoopExtractor_crash.ll (-46)
- (removed) llvm/test/Transforms/CodeExtractor/LoopExtractor_infinite.ll (-53)
- (removed) llvm/test/Transforms/CodeExtractor/LoopExtractor_min_wrapper.ll (-35)
``````````diff
diff --git a/llvm/docs/Passes.md b/llvm/docs/Passes.md
index 353130bb4a062..60366dddbd300 100644
--- a/llvm/docs/Passes.md
+++ b/llvm/docs/Passes.md
@@ -589,14 +589,6 @@ eliminating loops with non-infinite computable trip counts that have no side
effects or volatile instructions, and do not contribute to the computation of
the function's return value.
-(passes-loop-extract)=
-
-### `loop-extract`: Extract loops into new functions
-
-A pass wrapper around the `ExtractLoop()` scalar transformation to extract
-each top-level loop into its own new function. If the loop is the *only* loop
-in a given function, it is not touched.
-
### `loop-fusion`: Loop Fusion
Merges adjacent loops when it can prove the transformation preserves the
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index d80e02dcb356f..74fe01a46b5b9 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -174,7 +174,6 @@ LLVM_ABI void initializeLocalStackSlotPassPass(PassRegistry &);
LLVM_ABI void initializeLocalizerPass(PassRegistry &);
LLVM_ABI void initializeLogicalSROALegacyPassPass(PassRegistry &);
LLVM_ABI void initializeLoopDataPrefetchLegacyPassPass(PassRegistry &);
-LLVM_ABI void initializeLoopExtractorLegacyPassPass(PassRegistry &);
LLVM_ABI void initializeLoopInfoWrapperPassPass(PassRegistry &);
LLVM_ABI void initializeLoopPassPass(PassRegistry &);
LLVM_ABI void initializeLoopSimplifyPass(PassRegistry &);
@@ -306,7 +305,6 @@ LLVM_ABI void
initializeSeparateConstOffsetFromGEPLegacyPassPass(PassRegistry &);
LLVM_ABI void initializeShadowStackGCLoweringPass(PassRegistry &);
LLVM_ABI void initializeShrinkWrapLegacyPass(PassRegistry &);
-LLVM_ABI void initializeSingleLoopExtractorPass(PassRegistry &);
LLVM_ABI void initializeSinkingLegacyPassPass(PassRegistry &);
LLVM_ABI void initializeSjLjEHPreparePass(PassRegistry &);
LLVM_ABI void initializeSlotIndexesWrapperPassPass(PassRegistry &);
diff --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h
index 5182341fa7a89..6b8c1e22521ad 100644
--- a/llvm/include/llvm/LinkAllPasses.h
+++ b/llvm/include/llvm/LinkAllPasses.h
@@ -95,7 +95,6 @@ struct ForcePassLinking {
(void)llvm::createLCSSAPass();
(void)llvm::createLICMPass();
(void)llvm::createLazyValueInfoPass();
- (void)llvm::createLoopExtractorPass();
(void)llvm::createLoopSimplifyPass();
(void)llvm::createLoopStrengthReducePass();
(void)llvm::createLoopTermFoldPass();
@@ -119,7 +118,6 @@ struct ForcePassLinking {
(void)llvm::createRegionViewerPass();
(void)llvm::createSafeStackPass();
(void)llvm::createSROAPass();
- (void)llvm::createSingleLoopExtractorPass();
(void)llvm::createTailCallEliminationPass();
(void)llvm::createConstantHoistingPass();
(void)llvm::createCodeGenPrepareLegacyPass();
diff --git a/llvm/include/llvm/Transforms/IPO.h b/llvm/include/llvm/Transforms/IPO.h
index 7523ae66429ac..7c2135084cacc 100644
--- a/llvm/include/llvm/Transforms/IPO.h
+++ b/llvm/include/llvm/Transforms/IPO.h
@@ -33,18 +33,6 @@ LLVM_ABI ModulePass *createDeadArgEliminationPass();
/// bugpoint.
LLVM_ABI ModulePass *createDeadArgHackingPass();
-//===----------------------------------------------------------------------===//
-//
-/// createLoopExtractorPass - This pass extracts all natural loops from the
-/// program into a function if it can.
-///
-LLVM_ABI Pass *createLoopExtractorPass();
-
-/// createSingleLoopExtractorPass - This pass extracts one natural loop from the
-/// program into a function if it can. This is used by bugpoint.
-///
-LLVM_ABI Pass *createSingleLoopExtractorPass();
-
//===----------------------------------------------------------------------===//
/// createBarrierNoopPass - This pass is purely a module pass barrier in a pass
/// manager.
diff --git a/llvm/include/llvm/Transforms/IPO/LoopExtractor.h b/llvm/include/llvm/Transforms/IPO/LoopExtractor.h
deleted file mode 100644
index 23328232d376d..0000000000000
--- a/llvm/include/llvm/Transforms/IPO/LoopExtractor.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//===- LoopExtractor.h - Extract each loop into a new function ------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// A pass wrapper around the ExtractLoop() scalar transformation to extract each
-// top-level loop into its own new function. If the loop is the ONLY loop in a
-// given function, it is not touched. This is a pass most useful for debugging
-// via bugpoint.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TRANSFORMS_IPO_LOOPEXTRACTOR_H
-#define LLVM_TRANSFORMS_IPO_LOOPEXTRACTOR_H
-
-#include "llvm/IR/PassManager.h"
-
-namespace llvm {
-
-struct LoopExtractorPass : public OptionalPassInfoMixin<LoopExtractorPass> {
- LoopExtractorPass(unsigned NumLoops = ~0) : NumLoops(NumLoops) {}
- LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
- LLVM_ABI void
- printPipeline(raw_ostream &OS,
- function_ref<StringRef(StringRef)> MapClassName2PassName);
-
-private:
- unsigned NumLoops;
-};
-} // namespace llvm
-
-#endif // LLVM_TRANSFORMS_IPO_LOOPEXTRACTOR_H
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 17d096eba7e36..db4b92811f57e 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -243,7 +243,6 @@
#include "llvm/Transforms/IPO/InferFunctionAttrs.h"
#include "llvm/Transforms/IPO/Instrumentor.h"
#include "llvm/Transforms/IPO/Internalize.h"
-#include "llvm/Transforms/IPO/LoopExtractor.h"
#include "llvm/Transforms/IPO/LowerTypeTests.h"
#include "llvm/Transforms/IPO/MemProfContextDisambiguation.h"
#include "llvm/Transforms/IPO/MergeFunctions.h"
@@ -969,10 +968,6 @@ Expected<bool> parseDropUnnecessaryAssumesPassOptions(StringRef Params) {
"DropUnnecessaryAssumes");
}
-Expected<bool> parseLoopExtractorPassOptions(StringRef Params) {
- return PassBuilder::parseSinglePassOption(Params, "single", "LoopExtractor");
-}
-
Expected<bool> parseLowerMatrixIntrinsicsPassOptions(StringRef Params) {
return PassBuilder::parseSinglePassOption(Params, "minimal",
"LowerMatrixIntrinsics");
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 90593c1effa40..5e592945d0de7 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -246,14 +246,6 @@ MODULE_PASS_WITH_PARAMS(
MODULE_PASS_WITH_PARAMS(
"ipsccp", "IPSCCPPass", [](IPSCCPOptions Opts) { return IPSCCPPass(Opts); },
parseIPSCCPOptions, "no-func-spec;func-spec")
-MODULE_PASS_WITH_PARAMS(
- "loop-extract", "LoopExtractorPass",
- [](bool Single) {
- if (Single)
- return LoopExtractorPass(1);
- return LoopExtractorPass();
- },
- parseLoopExtractorPassOptions, "single")
MODULE_PASS_WITH_PARAMS(
"memprof-use", "MemProfUsePass",
[](std::string Opts) { return MemProfUsePass(Opts); },
diff --git a/llvm/lib/Transforms/IPO/CMakeLists.txt b/llvm/lib/Transforms/IPO/CMakeLists.txt
index 23c610f1c15e6..ca0e140264829 100644
--- a/llvm/lib/Transforms/IPO/CMakeLists.txt
+++ b/llvm/lib/Transforms/IPO/CMakeLists.txt
@@ -31,7 +31,6 @@ add_llvm_component_library(LLVMipo
InstrumentorConfigFile.cpp
InstrumentorStubPrinter.cpp
Internalize.cpp
- LoopExtractor.cpp
LowerTypeTests.cpp
MemProfContextDisambiguation.cpp
MergeFunctions.cpp
diff --git a/llvm/lib/Transforms/IPO/IPO.cpp b/llvm/lib/Transforms/IPO/IPO.cpp
index 61a6462c53eae..e289e31c43b36 100644
--- a/llvm/lib/Transforms/IPO/IPO.cpp
+++ b/llvm/lib/Transforms/IPO/IPO.cpp
@@ -22,6 +22,4 @@ void llvm::initializeIPO(PassRegistry &Registry) {
initializeDAEPass(Registry);
initializeExpandVariadicsPass(Registry);
initializeGlobalDCELegacyPassPass(Registry);
- initializeLoopExtractorLegacyPassPass(Registry);
- initializeSingleLoopExtractorPass(Registry);
}
diff --git a/llvm/lib/Transforms/IPO/LoopExtractor.cpp b/llvm/lib/Transforms/IPO/LoopExtractor.cpp
deleted file mode 100644
index 8182ef6449d02..0000000000000
--- a/llvm/lib/Transforms/IPO/LoopExtractor.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-//===- LoopExtractor.cpp - Extract each loop into a new function ----------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// A pass wrapper around the ExtractLoop() scalar transformation to extract each
-// top-level loop into its own new function. If the loop is the ONLY loop in a
-// given function, it is not touched. This is a pass most useful for debugging
-// via bugpoint.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Transforms/IPO/LoopExtractor.h"
-#include "llvm/ADT/Statistic.h"
-#include "llvm/Analysis/AssumptionCache.h"
-#include "llvm/Analysis/LoopInfo.h"
-#include "llvm/IR/Dominators.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/Module.h"
-#include "llvm/IR/PassManager.h"
-#include "llvm/InitializePasses.h"
-#include "llvm/Pass.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/Transforms/Utils.h"
-#include "llvm/Transforms/Utils/CodeExtractor.h"
-using namespace llvm;
-
-#define DEBUG_TYPE "loop-extract"
-
-STATISTIC(NumExtracted, "Number of loops extracted");
-
-namespace {
-struct LoopExtractorLegacyPass : public ModulePass {
- static char ID; // Pass identification, replacement for typeid
-
- unsigned NumLoops;
-
- explicit LoopExtractorLegacyPass(unsigned NumLoops = ~0)
- : ModulePass(ID), NumLoops(NumLoops) {}
-
- bool runOnModule(Module &M) override;
-
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.addRequiredID(BreakCriticalEdgesID);
- AU.addRequired<DominatorTreeWrapperPass>();
- AU.addRequired<LoopInfoWrapperPass>();
- AU.addPreserved<LoopInfoWrapperPass>();
- AU.addRequiredID(LoopSimplifyID);
- AU.addUsedIfAvailable<AssumptionCacheTracker>();
- }
-};
-
-struct LoopExtractor {
- explicit LoopExtractor(
- unsigned NumLoops,
- function_ref<DominatorTree &(Function &)> LookupDomTree,
- function_ref<LoopInfo &(Function &)> LookupLoopInfo,
- function_ref<AssumptionCache *(Function &)> LookupAssumptionCache)
- : NumLoops(NumLoops), LookupDomTree(LookupDomTree),
- LookupLoopInfo(LookupLoopInfo),
- LookupAssumptionCache(LookupAssumptionCache) {}
- bool runOnModule(Module &M);
-
-private:
- // The number of natural loops to extract from the program into functions.
- unsigned NumLoops;
-
- function_ref<DominatorTree &(Function &)> LookupDomTree;
- function_ref<LoopInfo &(Function &)> LookupLoopInfo;
- function_ref<AssumptionCache *(Function &)> LookupAssumptionCache;
-
- bool runOnFunction(Function &F);
-
- bool extractLoops(Loop::iterator From, Loop::iterator To, LoopInfo &LI,
- DominatorTree &DT);
- bool extractLoop(Loop *L, LoopInfo &LI, DominatorTree &DT);
-};
-} // namespace
-
-char LoopExtractorLegacyPass::ID = 0;
-INITIALIZE_PASS_BEGIN(LoopExtractorLegacyPass, "loop-extract",
- "Extract loops into new functions", false, false)
-INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
-INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
-INITIALIZE_PASS_END(LoopExtractorLegacyPass, "loop-extract",
- "Extract loops into new functions", false, false)
-
-namespace {
- /// SingleLoopExtractor - For bugpoint.
-struct SingleLoopExtractor : public LoopExtractorLegacyPass {
- static char ID; // Pass identification, replacement for typeid
- SingleLoopExtractor() : LoopExtractorLegacyPass(1) {}
-};
-} // End anonymous namespace
-
-char SingleLoopExtractor::ID = 0;
-INITIALIZE_PASS(SingleLoopExtractor, "loop-extract-single",
- "Extract at most one loop into a new function", false, false)
-
-// createLoopExtractorPass - This pass extracts all natural loops from the
-// program into a function if it can.
-//
-Pass *llvm::createLoopExtractorPass() { return new LoopExtractorLegacyPass(); }
-
-bool LoopExtractorLegacyPass::runOnModule(Module &M) {
- if (skipModule(M))
- return false;
-
- bool Changed = false;
- auto LookupDomTree = [this](Function &F) -> DominatorTree & {
- return this->getAnalysis<DominatorTreeWrapperPass>(F).getDomTree();
- };
- auto LookupLoopInfo = [this, &Changed](Function &F) -> LoopInfo & {
- return this->getAnalysis<LoopInfoWrapperPass>(F, &Changed).getLoopInfo();
- };
- auto LookupACT = [this](Function &F) -> AssumptionCache * {
- if (auto *ACT = this->getAnalysisIfAvailable<AssumptionCacheTracker>())
- return ACT->lookupAssumptionCache(F);
- return nullptr;
- };
- return LoopExtractor(NumLoops, LookupDomTree, LookupLoopInfo, LookupACT)
- .runOnModule(M) ||
- Changed;
-}
-
-bool LoopExtractor::runOnModule(Module &M) {
- if (M.empty())
- return false;
-
- if (!NumLoops)
- return false;
-
- bool Changed = false;
-
- // The end of the function list may change (new functions will be added at the
- // end), so we run from the first to the current last.
- auto I = M.begin(), E = --M.end();
- while (true) {
- Function &F = *I;
-
- Changed |= runOnFunction(F);
- if (!NumLoops)
- break;
-
- // If this is the last function.
- if (I == E)
- break;
-
- ++I;
- }
- return Changed;
-}
-
-bool LoopExtractor::runOnFunction(Function &F) {
- // Do not modify `optnone` functions.
- if (F.hasOptNone())
- return false;
-
- if (F.empty())
- return false;
-
- bool Changed = false;
- LoopInfo &LI = LookupLoopInfo(F);
-
- // If there are no loops in the function.
- if (LI.empty())
- return Changed;
-
- DominatorTree &DT = LookupDomTree(F);
-
- // If there is more than one top-level loop in this function, extract all of
- // the loops.
- if (std::next(LI.begin()) != LI.end())
- return Changed | extractLoops(LI.begin(), LI.end(), LI, DT);
-
- // Otherwise there is exactly one top-level loop.
- Loop *TLL = *LI.begin();
-
- // If the loop is in LoopSimplify form, then extract it only if this function
- // is more than a minimal wrapper around the loop.
- if (TLL->isLoopSimplifyForm()) {
- bool ShouldExtractLoop = false;
-
- // Extract the loop if the entry block doesn't branch to the loop header.
- auto *EntryTI = dyn_cast<UncondBrInst>(F.getEntryBlock().getTerminator());
- if (EntryTI && EntryTI->getSuccessor() != TLL->getHeader()) {
- ShouldExtractLoop = true;
- } else {
- // Check to see if any exits from the loop are more than just return
- // blocks.
- SmallVector<BasicBlock *, 8> ExitBlocks;
- TLL->getExitBlocks(ExitBlocks);
- for (auto *ExitBlock : ExitBlocks)
- if (!isa<ReturnInst>(ExitBlock->getTerminator())) {
- ShouldExtractLoop = true;
- break;
- }
- }
-
- if (ShouldExtractLoop)
- return Changed | extractLoop(TLL, LI, DT);
- }
-
- // Okay, this function is a minimal container around the specified loop.
- // If we extract the loop, we will continue to just keep extracting it
- // infinitely... so don't extract it. However, if the loop contains any
- // sub-loops, extract them.
- return Changed | extractLoops(TLL->begin(), TLL->end(), LI, DT);
-}
-
-bool LoopExtractor::extractLoops(Loop::iterator From, Loop::iterator To,
- LoopInfo &LI, DominatorTree &DT) {
- bool Changed = false;
- SmallVector<Loop *, 8> Loops;
-
- // Save the list of loops, as it may change.
- Loops.assign(From, To);
- for (Loop *L : Loops) {
- // If LoopSimplify form is not available, stay out of trouble.
- if (!L->isLoopSimplifyForm())
- continue;
-
- Changed |= extractLoop(L, LI, DT);
- if (!NumLoops)
- break;
- }
- return Changed;
-}
-
-bool LoopExtractor::extractLoop(Loop *L, LoopInfo &LI, DominatorTree &DT) {
- assert(NumLoops != 0);
- Function &Func = *L->getHeader()->getParent();
- AssumptionCache *AC = LookupAssumptionCache(Func);
- CodeExtractorAnalysisCache CEAC(Func);
- CodeExtractor Extractor(L->getBlocks(), &DT, false, nullptr, nullptr, AC);
- if (Extractor.isEligible()) {
- // Remove loop while blocks are still in the current function
- LI.erase(L);
- [[maybe_unused]] Function *ExtrF = Extractor.extractCodeRegion(CEAC);
- assert(ExtrF && "CodeExtractor didn't extact eligible loop");
- --NumLoops;
- ++NumExtracted;
- return true;
- }
- return false;
-}
-
-// createSingleLoopExtractorPass - This pass extracts one natural loop from the
-// program into a function if it can. This is used by bugpoint.
-//
-Pass *llvm::createSingleLoopExtractorPass() {
- return new SingleLoopExtractor();
-}
-
-PreservedAnalyses LoopExtractorPass::run(Module &M, ModuleAnalysisManager &AM) {
- auto &FAM = AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
- auto LookupDomTree = [&FAM](Function &F) -> DominatorTree & {
- return FAM.getResult<DominatorTreeAnalysis>(F);
- };
- auto LookupLoopInfo = [&FAM](Function &F) -> LoopInfo & {
- return FAM.getResult<LoopAnalysis>(F);
- };
- auto LookupAssumptionCache = [&FAM](Function &F) -> AssumptionCache * {
- return FAM.getCachedResult<AssumptionAnalysis>(F);
- };
- if (!LoopExtractor(NumLoops, LookupDomTree, LookupLoopInfo,
- LookupAssumptionCache)
- .runOnModule(M))
- return PreservedAnalyses::all();
-
- PreservedAnalyses PA;
- PA.preserve<LoopAnalysis>();
- return PA;
-}
-
-void LoopExtractorPass::printPipeline(
- raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
- static_cast<PassInfoMixin<LoopExtractorPass> *>(this)->printPipeline(
- OS, MapClassName2PassName);
- OS << '<';
- if (NumLoops == 1)
- OS << "single";
- OS << '>';
-}
diff --git a/llvm/test/Other/new-pm-print-pipeline.ll b/llvm/test/Other/new-pm-print-pipeline.ll
index 110ff23131667..2a1192b6b66bd 100644
--- a/llvm/test/Other/new-pm-print-pipeline.ll
+++ b/llvm/test/Other/new-pm-print-pipeline.ll
@@ -43,9 +43,6 @@
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan<kernel;recover>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
; CHECK-14: hwasan<>,hwasan<kernel;recover>
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract<single>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
-; CHECK-16: loop-extract<>,loop-extract<single>
-
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(print<stack-lifetime><may>,print<stack-lifetime><must>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-17
; CHECK-17: function(print<stack-lifetime><may>,print<stack-lifetime><must>)
diff --git a/llvm/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll b/llvm/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll
deleted file mode 100644
index bcf418e17aae4..0000000000000
--- a/llvm/test/Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll
+++ /dev/null
@@ -1,75 +0,0 @@
-; RUN: opt < %s -passes='function(loop-simplify),loop-extract' -disable-output
-
-define void @solve() {
-entry:
- br label %loopentry.0
-
-loopentry.0: ; preds = %endif.0, %entry
- br i1 false, label %no_exit.0, label %loopexit.0
-
-no_exit.0: ; preds = %loopentry.0
- br i1 false, label %then.0, label %endif.0
-
-then.0: ; preds = %no_exit.0
- br i1 false, label %shortcirc_done, label %shortcirc_next
-
-shortcirc_next: ; preds = %then.0
- br label %shortcirc_done
-
-shortcirc_done: ; preds = %shortcirc_next, %then.0
- br i1 false, label %then.1, label %endif.1
-
-then.1: ; preds = %shortcirc_done
- br i1 false, label %cond_true, label %cond_false
-
-cond_true: ; preds = %then.1
- br label %cond_conti...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/214252
More information about the llvm-branch-commits
mailing list