c62b1cd360b99aa4387f5059b23392996764b657
[oota-llvm.git] / lib / CodeGen / StrongPHIElimination.cpp
1 //===- StrongPhiElimination.cpp - Eliminate PHI nodes by inserting copies -===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //
11 //===----------------------------------------------------------------------===//
12
13 #define DEBUG_TYPE "strongphielim"
14 #include "llvm/CodeGen/Passes.h"
15 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
16 #include "llvm/CodeGen/MachineDominators.h"
17 #include "llvm/CodeGen/MachineFunctionPass.h"
18 #include "llvm/Support/ErrorHandling.h"
19 using namespace llvm;
20
21 namespace {
22   class StrongPHIElimination : public MachineFunctionPass {
23   public:
24     static char ID; // Pass identification, replacement for typeid
25     StrongPHIElimination() : MachineFunctionPass(ID) {
26       initializeStrongPHIEliminationPass(*PassRegistry::getPassRegistry());
27     }
28
29     virtual void getAnalysisUsage(AnalysisUsage&) const;
30     bool runOnMachineFunction(MachineFunction&);
31   };
32 } // namespace
33
34 char StrongPHIElimination::ID = 0;
35 INITIALIZE_PASS_BEGIN(StrongPHIElimination, "strong-phi-node-elimination",
36   "Eliminate PHI nodes for register allocation, intelligently", false, false)
37 INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
38 INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
39 INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
40 INITIALIZE_PASS_END(StrongPHIElimination, "strong-phi-node-elimination",
41   "Eliminate PHI nodes for register allocation, intelligently", false, false)
42
43 char &llvm::StrongPHIEliminationID = StrongPHIElimination::ID;
44
45 void StrongPHIElimination::getAnalysisUsage(AnalysisUsage& AU) const {
46   AU.setPreservesCFG();
47   AU.addRequired<MachineDominatorTree>();
48   AU.addRequired<SlotIndexes>();
49   AU.addPreserved<SlotIndexes>();
50   AU.addRequired<LiveIntervals>();
51   AU.addPreserved<LiveIntervals>();
52   MachineFunctionPass::getAnalysisUsage(AU);
53 }
54
55 bool StrongPHIElimination::runOnMachineFunction(MachineFunction& Fn) {
56   llvm_unreachable("Strong phi elimination is not implemented");
57 }