From 0b57cec536236d46e3dba9bd041533462f33dbb7 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Fri, 20 Dec 2019 19:53:05 +0000 Subject: Move all sources from the llvm project into contrib/llvm-project. This uses the new layout of the upstream repository, which was recently migrated to GitHub, and converted into a "monorepo". That is, most of the earlier separate sub-projects with their own branches and tags were consolidated into one top-level directory, and are now branched and tagged together. Updating the vendor area to match this layout is next. --- contrib/llvm/lib/CodeGen/MachineLoopInfo.cpp | 145 --------------------------- 1 file changed, 145 deletions(-) delete mode 100644 contrib/llvm/lib/CodeGen/MachineLoopInfo.cpp (limited to 'contrib/llvm/lib/CodeGen/MachineLoopInfo.cpp') diff --git a/contrib/llvm/lib/CodeGen/MachineLoopInfo.cpp b/contrib/llvm/lib/CodeGen/MachineLoopInfo.cpp deleted file mode 100644 index 3b8b430d1b0f..000000000000 --- a/contrib/llvm/lib/CodeGen/MachineLoopInfo.cpp +++ /dev/null @@ -1,145 +0,0 @@ -//===- MachineLoopInfo.cpp - Natural Loop Calculator ----------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// -// -// This file defines the MachineLoopInfo class that is used to identify natural -// loops and determine the loop depth of various nodes of the CFG. Note that -// the loops identified may actually be several natural loops that share the -// same header node... not just a single natural loop. -// -//===----------------------------------------------------------------------===// - -#include "llvm/CodeGen/MachineLoopInfo.h" -#include "llvm/Analysis/LoopInfoImpl.h" -#include "llvm/CodeGen/MachineDominators.h" -#include "llvm/CodeGen/Passes.h" -#include "llvm/Config/llvm-config.h" -#include "llvm/Support/Debug.h" -#include "llvm/Support/raw_ostream.h" -using namespace llvm; - -// Explicitly instantiate methods in LoopInfoImpl.h for MI-level Loops. -template class llvm::LoopBase; -template class llvm::LoopInfoBase; - -char MachineLoopInfo::ID = 0; -INITIALIZE_PASS_BEGIN(MachineLoopInfo, "machine-loops", - "Machine Natural Loop Construction", true, true) -INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree) -INITIALIZE_PASS_END(MachineLoopInfo, "machine-loops", - "Machine Natural Loop Construction", true, true) - -char &llvm::MachineLoopInfoID = MachineLoopInfo::ID; - -bool MachineLoopInfo::runOnMachineFunction(MachineFunction &) { - releaseMemory(); - LI.analyze(getAnalysis().getBase()); - return false; -} - -void MachineLoopInfo::getAnalysisUsage(AnalysisUsage &AU) const { - AU.setPreservesAll(); - AU.addRequired(); - MachineFunctionPass::getAnalysisUsage(AU); -} - -MachineBasicBlock *MachineLoop::getTopBlock() { - MachineBasicBlock *TopMBB = getHeader(); - MachineFunction::iterator Begin = TopMBB->getParent()->begin(); - if (TopMBB->getIterator() != Begin) { - MachineBasicBlock *PriorMBB = &*std::prev(TopMBB->getIterator()); - while (contains(PriorMBB)) { - TopMBB = PriorMBB; - if (TopMBB->getIterator() == Begin) - break; - PriorMBB = &*std::prev(TopMBB->getIterator()); - } - } - return TopMBB; -} - -MachineBasicBlock *MachineLoop::getBottomBlock() { - MachineBasicBlock *BotMBB = getHeader(); - MachineFunction::iterator End = BotMBB->getParent()->end(); - if (BotMBB->getIterator() != std::prev(End)) { - MachineBasicBlock *NextMBB = &*std::next(BotMBB->getIterator()); - while (contains(NextMBB)) { - BotMBB = NextMBB; - if (BotMBB == &*std::next(BotMBB->getIterator())) - break; - NextMBB = &*std::next(BotMBB->getIterator()); - } - } - return BotMBB; -} - -MachineBasicBlock *MachineLoop::findLoopControlBlock() { - if (MachineBasicBlock *Latch = getLoopLatch()) { - if (isLoopExiting(Latch)) - return Latch; - else - return getExitingBlock(); - } - return nullptr; -} - -DebugLoc MachineLoop::getStartLoc() const { - // Try the pre-header first. - if (MachineBasicBlock *PHeadMBB = getLoopPreheader()) - if (const BasicBlock *PHeadBB = PHeadMBB->getBasicBlock()) - if (DebugLoc DL = PHeadBB->getTerminator()->getDebugLoc()) - return DL; - - // If we have no pre-header or there are no instructions with debug - // info in it, try the header. - if (MachineBasicBlock *HeadMBB = getHeader()) - if (const BasicBlock *HeadBB = HeadMBB->getBasicBlock()) - return HeadBB->getTerminator()->getDebugLoc(); - - return DebugLoc(); -} - -MachineBasicBlock * -MachineLoopInfo::findLoopPreheader(MachineLoop *L, - bool SpeculativePreheader) const { - if (MachineBasicBlock *PB = L->getLoopPreheader()) - return PB; - - if (!SpeculativePreheader) - return nullptr; - - MachineBasicBlock *HB = L->getHeader(), *LB = L->getLoopLatch(); - if (HB->pred_size() != 2 || HB->hasAddressTaken()) - return nullptr; - // Find the predecessor of the header that is not the latch block. - MachineBasicBlock *Preheader = nullptr; - for (MachineBasicBlock *P : HB->predecessors()) { - if (P == LB) - continue; - // Sanity. - if (Preheader) - return nullptr; - Preheader = P; - } - - // Check if the preheader candidate is a successor of any other loop - // headers. We want to avoid having two loop setups in the same block. - for (MachineBasicBlock *S : Preheader->successors()) { - if (S == HB) - continue; - MachineLoop *T = getLoopFor(S); - if (T && T->getHeader() == S) - return nullptr; - } - return Preheader; -} - -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -LLVM_DUMP_METHOD void MachineLoop::dump() const { - print(dbgs()); -} -#endif -- cgit v1.2.3