blob: 0ecea6d6bcbeb5a3448f475e846c605ddf015c51 [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 {
Jakob Stoklund Olesen68be9562010-12-03 19:21:53 +000022class StrongPHIElimination : public MachineFunctionPass {
23public:
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
Jakob Stoklund Olesen68be9562010-12-03 19:21:53 +000029private:
30 bool runOnMachineFunction(MachineFunction &Fn) {
31 llvm_unreachable("Strong phi elimination is not implemented");
32 }
Owen Andersonefbcebc2007-12-23 15:37:26 +000033
Jakob Stoklund Olesen68be9562010-12-03 19:21:53 +000034 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
35 AU.setPreservesCFG();
36 AU.addRequired<MachineDominatorTree>();
37 AU.addRequired<SlotIndexes>();
38 AU.addPreserved<SlotIndexes>();
39 AU.addRequired<LiveIntervals>();
40 AU.addPreserved<LiveIntervals>();
41 MachineFunctionPass::getAnalysisUsage(AU);
42 }
43};
44} // namespace
Owen Anderson0bda0e82007-10-31 03:37:57 +000045
Dan Gohman844731a2008-05-13 00:00:25 +000046char StrongPHIElimination::ID = 0;
Owen Anderson2ab36d32010-10-12 19:48:12 +000047INITIALIZE_PASS_BEGIN(StrongPHIElimination, "strong-phi-node-elimination",
48 "Eliminate PHI nodes for register allocation, intelligently", false, false)
49INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
50INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
51INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
52INITIALIZE_PASS_END(StrongPHIElimination, "strong-phi-node-elimination",
Owen Andersonce665bd2010-10-07 22:25:06 +000053 "Eliminate PHI nodes for register allocation, intelligently", false, false)
Dan Gohman844731a2008-05-13 00:00:25 +000054
Owen Anderson90c579d2010-08-06 18:33:48 +000055char &llvm::StrongPHIEliminationID = StrongPHIElimination::ID;
Owen Anderson0bda0e82007-10-31 03:37:57 +000056