From 67d65bb69d5cad957cbb6d672dc0b4a19c211a42 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Fri, 4 Jan 2008 20:54:55 +0000 Subject: [PATCH] Don't recalculate the loop info and loop dominators analyses if they're preserved. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45596 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/Passes.h | 8 ++++++++ lib/CodeGen/LiveIntervalAnalysis.cpp | 2 ++ lib/CodeGen/MachineDominators.cpp | 11 ++++++++--- lib/CodeGen/MachineLoopInfo.cpp | 11 ++++++++--- lib/CodeGen/PHIElimination.cpp | 2 ++ lib/CodeGen/RegAllocLinearScan.cpp | 2 ++ lib/CodeGen/SimpleRegisterCoalescing.cpp | 2 ++ lib/CodeGen/TwoAddressInstructionPass.cpp | 2 ++ 8 files changed, 34 insertions(+), 6 deletions(-) diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h index 8899a21922d..be7857c657c 100644 --- a/include/llvm/CodeGen/Passes.h +++ b/include/llvm/CodeGen/Passes.h @@ -38,6 +38,14 @@ namespace llvm { FunctionPass *createMachineFunctionPrinterPass(std::ostream *OS, const std::string &Banner =""); + /// MachineLoopInfo pass - This pass is a loop analysis pass. + /// + extern const PassInfo *MachineLoopInfoID; + + /// MachineDominators pass - This pass is a machine dominators analysis pass. + /// + extern const PassInfo *MachineDominatorsID; + /// PHIElimination pass - This pass eliminates machine instruction PHI nodes /// by inserting copy instructions. This destroys SSA information, but is the /// desired input for some register allocators. This pass is "required" by diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 46cdec7bd6d..5c9d69a231f 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -60,6 +60,8 @@ namespace { void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved(); AU.addRequired(); + AU.addPreservedID(MachineLoopInfoID); + AU.addPreservedID(MachineDominatorsID); AU.addPreservedID(PHIEliminationID); AU.addRequiredID(PHIEliminationID); AU.addRequiredID(TwoAddressInstructionPassID); diff --git a/lib/CodeGen/MachineDominators.cpp b/lib/CodeGen/MachineDominators.cpp index e343240ea27..7c521ccb0e8 100644 --- a/lib/CodeGen/MachineDominators.cpp +++ b/lib/CodeGen/MachineDominators.cpp @@ -13,12 +13,17 @@ //===----------------------------------------------------------------------===// #include "llvm/CodeGen/MachineDominators.h" +#include "llvm/CodeGen/Passes.h" using namespace llvm; TEMPLATE_INSTANTIATION(class DomTreeNodeBase); TEMPLATE_INSTANTIATION(class DominatorTreeBase); -char MachineDominatorTree::ID = 0; -static RegisterPass -E("machinedomtree", "MachineDominator Tree Construction", true); +namespace { + char MachineDominatorTree::ID = 0; + RegisterPass + E("machinedomtree", "MachineDominator Tree Construction", true); +} + +const PassInfo *llvm::MachineDominatorsID = E.getPassInfo(); diff --git a/lib/CodeGen/MachineLoopInfo.cpp b/lib/CodeGen/MachineLoopInfo.cpp index d134357d2af..ad4ad1cea9e 100644 --- a/lib/CodeGen/MachineLoopInfo.cpp +++ b/lib/CodeGen/MachineLoopInfo.cpp @@ -16,15 +16,20 @@ #include "llvm/CodeGen/MachineLoopInfo.h" #include "llvm/CodeGen/MachineDominators.h" +#include "llvm/CodeGen/Passes.h" using namespace llvm; TEMPLATE_INSTANTIATION(class LoopBase); TEMPLATE_INSTANTIATION(class LoopInfoBase); -char MachineLoopInfo::ID = 0; -static RegisterPass -X("machine-loops", "Machine Natural Loop Construction", true); +namespace { + char MachineLoopInfo::ID = 0; + RegisterPass + X("machine-loops", "Machine Natural Loop Construction", true); +} + +const PassInfo *llvm::MachineLoopInfoID = X.getPassInfo(); bool MachineLoopInfo::runOnMachineFunction(MachineFunction &) { releaseMemory(); diff --git a/lib/CodeGen/PHIElimination.cpp b/lib/CodeGen/PHIElimination.cpp index 07c4ef3f509..9276937561b 100644 --- a/lib/CodeGen/PHIElimination.cpp +++ b/lib/CodeGen/PHIElimination.cpp @@ -51,6 +51,8 @@ namespace { virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved(); + AU.addPreservedID(MachineLoopInfoID); + AU.addPreservedID(MachineDominatorsID); MachineFunctionPass::getAnalysisUsage(AU); } diff --git a/lib/CodeGen/RegAllocLinearScan.cpp b/lib/CodeGen/RegAllocLinearScan.cpp index 17d416a4a63..6f850eb1b35 100644 --- a/lib/CodeGen/RegAllocLinearScan.cpp +++ b/lib/CodeGen/RegAllocLinearScan.cpp @@ -104,6 +104,8 @@ namespace { // to coalescing and which analyses coalescing invalidates. AU.addRequiredTransitive(); AU.addRequired(); + AU.addPreserved(); + AU.addPreservedID(MachineDominatorsID); MachineFunctionPass::getAnalysisUsage(AU); } diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index 69dd56d8439..de94688e3ab 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -67,6 +67,8 @@ const PassInfo *llvm::SimpleRegisterCoalescingID = X.getPassInfo(); void SimpleRegisterCoalescing::getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved(); + AU.addPreserved(); + AU.addPreservedID(MachineDominatorsID); AU.addPreservedID(PHIEliminationID); AU.addPreservedID(TwoAddressInstructionPassID); AU.addRequired(); diff --git a/lib/CodeGen/TwoAddressInstructionPass.cpp b/lib/CodeGen/TwoAddressInstructionPass.cpp index dd71bec7eb8..8f0c473d48d 100644 --- a/lib/CodeGen/TwoAddressInstructionPass.cpp +++ b/lib/CodeGen/TwoAddressInstructionPass.cpp @@ -69,6 +69,8 @@ const PassInfo *llvm::TwoAddressInstructionPassID = X.getPassInfo(); void TwoAddressInstructionPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); AU.addPreserved(); + AU.addPreservedID(MachineLoopInfoID); + AU.addPreservedID(MachineDominatorsID); AU.addPreservedID(PHIEliminationID); MachineFunctionPass::getAnalysisUsage(AU); }