1243789Sdim//===- MachinePostDominators.cpp -Machine Post Dominator Calculation ------===//
2243789Sdim//
3243789Sdim//                     The LLVM Compiler Infrastructure
4243789Sdim//
5243789Sdim// This file is distributed under the University of Illinois Open Source
6243789Sdim// License. See LICENSE.TXT for details.
7243789Sdim//
8243789Sdim//===----------------------------------------------------------------------===//
9243789Sdim//
10243789Sdim// This file implements simple dominator construction algorithms for finding
11243789Sdim// post dominators on machine functions.
12243789Sdim//
13243789Sdim//===----------------------------------------------------------------------===//
14243789Sdim
15243789Sdim#include "llvm/CodeGen/MachinePostDominators.h"
16243789Sdim
17243789Sdimusing namespace llvm;
18243789Sdim
19243789Sdimchar MachinePostDominatorTree::ID = 0;
20243789Sdim
21243789Sdim//declare initializeMachinePostDominatorTreePass
22243789SdimINITIALIZE_PASS(MachinePostDominatorTree, "machinepostdomtree",
23243789Sdim                "MachinePostDominator Tree Construction", true, true)
24243789Sdim
25243789SdimMachinePostDominatorTree::MachinePostDominatorTree() : MachineFunctionPass(ID) {
26243789Sdim  initializeMachinePostDominatorTreePass(*PassRegistry::getPassRegistry());
27243789Sdim  DT = new DominatorTreeBase<MachineBasicBlock>(true); //true indicate
28243789Sdim                                                       // postdominator
29243789Sdim}
30243789Sdim
31243789SdimFunctionPass *
32243789SdimMachinePostDominatorTree::createMachinePostDominatorTreePass() {
33243789Sdim  return new MachinePostDominatorTree();
34243789Sdim}
35243789Sdim
36243789Sdimbool
37243789SdimMachinePostDominatorTree::runOnMachineFunction(MachineFunction &F) {
38243789Sdim  DT->recalculate(F);
39243789Sdim  return false;
40243789Sdim}
41243789Sdim
42243789SdimMachinePostDominatorTree::~MachinePostDominatorTree() {
43243789Sdim  delete DT;
44243789Sdim}
45243789Sdim
46243789Sdimvoid
47243789SdimMachinePostDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const {
48243789Sdim  AU.setPreservesAll();
49243789Sdim  MachineFunctionPass::getAnalysisUsage(AU);
50243789Sdim}
51243789Sdim
52243789Sdimvoid
53243789SdimMachinePostDominatorTree::print(llvm::raw_ostream &OS, const Module *M) const {
54243789Sdim  DT->print(OS);
55243789Sdim}
56