mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-01 16:33:37 +01:00
f28b3bb262
shouldn't do AU.setPreservesCFG(), because even though CodeGen passes don't modify the LLVM IR CFG, they may modify the MachineFunction CFG, and passes like MachineLoop are registered with isCFGOnly set to true. llvm-svn: 77691
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
//===- MachineLoopInfo.cpp - Natural Loop Calculator ----------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// 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/CodeGen/MachineDominators.h"
|
|
#include "llvm/CodeGen/Passes.h"
|
|
using namespace llvm;
|
|
|
|
#define MLB class LoopBase<MachineBasicBlock, MachineLoop>
|
|
TEMPLATE_INSTANTIATION(MLB);
|
|
#undef MLB
|
|
#define MLIB class LoopInfoBase<MachineBasicBlock, MachineLoop>
|
|
TEMPLATE_INSTANTIATION(MLIB);
|
|
#undef MLIB
|
|
|
|
char MachineLoopInfo::ID = 0;
|
|
static RegisterPass<MachineLoopInfo>
|
|
X("machine-loops", "Machine Natural Loop Construction", true);
|
|
|
|
const PassInfo *const llvm::MachineLoopInfoID = &X;
|
|
|
|
bool MachineLoopInfo::runOnMachineFunction(MachineFunction &) {
|
|
releaseMemory();
|
|
LI.Calculate(getAnalysis<MachineDominatorTree>().getBase()); // Update
|
|
return false;
|
|
}
|
|
|
|
void MachineLoopInfo::getAnalysisUsage(AnalysisUsage &AU) const {
|
|
AU.setPreservesAll();
|
|
AU.addRequired<MachineDominatorTree>();
|
|
MachineFunctionPass::getAnalysisUsage(AU);
|
|
}
|