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 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
