blob: c62b1cd360b99aa4387f5059b23392996764b657 [file] [log] [blame]
Owen Anderson0bda0e82007-10-31 03:37:57 +00001//===- StrongPhiElimination.cpp - Eliminate PHI nodes by inserting copies -===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Owen Anderson0bda0e82007-10-31 03:37:57 +00007//
8//===----------------------------------------------------------------------===//
9//
Owen Anderson0bda0e82007-10-31 03:37:57 +000010//
11//===----------------------------------------------------------------------===//
12
13#define DEBUG_TYPE "strongphielim"
14#include "llvm/CodeGen/Passes.h"
Owen Andersoneb37ecc2008-03-10 07:22:36 +000015#include "llvm/CodeGen/LiveIntervalAnalysis.h"
Owen Anderson0bda0e82007-10-31 03:37:57 +000016#include "llvm/CodeGen/MachineDominators.h"
17#include "llvm/CodeGen/MachineFunctionPass.h"
Jakob Stoklund Olesen68be9562010-12-03 19:21:53 +000018#include "llvm/Support/ErrorHandling.h"
Owen Anderson0bda0e82007-10-31 03:37:57 +000019using namespace llvm;
20
Owen Anderson0bda0e82007-10-31 03:37:57 +000021namespace {
Cameron Zwarich9eaf49b2010-12-05 22:34:08 +000022 class StrongPHIElimination : public MachineFunctionPass {
23 public:
24 static char ID; // Pass identification, replacement for typeid
25 StrongPHIElimination() : MachineFunctionPass(ID) {
26 initializeStrongPHIEliminationPass(*PassRegistry::getPassRegistry());
27 }
Owen Anderson0bda0e82007-10-31 03:37:57 +000028
Cameron Zwarich9eaf49b2010-12-05 22:34:08 +000029 virtual void getAnalysisUsage(AnalysisUsage&) const;
30 bool runOnMachineFunction(MachineFunction&);
31 };
Jakob Stoklund Olesen68be9562010-12-03 19:21:53 +000032} // namespace
Owen Anderson0bda0e82007-10-31 03:37:57 +000033
Dan Gohman844731a2008-05-13 00:00:25 +000034char StrongPHIElimination::ID = 0;
Owen Anderson2ab36d32010-10-12 19:48:12 +000035INITIALIZE_PASS_BEGIN(StrongPHIElimination, "strong-phi-node-elimination",
36 "Eliminate PHI nodes for register allocation, intelligently", false, false)
37INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
38INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
39INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
40INITIALIZE_PASS_END(StrongPHIElimination, "strong-phi-node-elimination",
Owen Andersonce665bd2010-10-07 22:25:06 +000041 "Eliminate PHI nodes for register allocation, intelligently", false, false)
Dan Gohman844731a2008-05-13 00:00:25 +000042
Owen Anderson90c579d2010-08-06 18:33:48 +000043char &llvm::StrongPHIEliminationID = StrongPHIElimination::ID;
Owen Anderson0bda0e82007-10-31 03:37:57 +000044
Cameron Zwarich9eaf49b2010-12-05 22:34:08 +000045void 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
55bool StrongPHIElimination::runOnMachineFunction(MachineFunction& Fn) {
56 llvm_unreachable("Strong phi elimination is not implemented");
57}