14c9df7c619ba827729490757dae6dc35bb068a9fChris Lattner//===- PostDominators.cpp - Post-Dominator Calculation --------------------===//
22b37d7cf28b1382420b5e4007042feeb66d21ac8Misha Brukman//
3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//                     The LLVM Compiler Infrastructure
4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
72b37d7cf28b1382420b5e4007042feeb66d21ac8Misha Brukman//
8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//===----------------------------------------------------------------------===//
91715229db9c04e73ba8acb8579eb2b9465209785Chris Lattner//
104c9df7c619ba827729490757dae6dc35bb068a9fChris Lattner// This file implements the post-dominator construction algorithms.
111715229db9c04e73ba8acb8579eb2b9465209785Chris Lattner//
121715229db9c04e73ba8acb8579eb2b9465209785Chris Lattner//===----------------------------------------------------------------------===//
131715229db9c04e73ba8acb8579eb2b9465209785Chris Lattner
14a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner#include "llvm/Analysis/PostDominators.h"
15551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#include "llvm/ADT/DepthFirstIterator.h"
16551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#include "llvm/ADT/SetOperations.h"
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/CFG.h"
180b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Instructions.h"
19d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/Debug.h"
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Support/GenericDomTreeConstruction.h"
21cd7c2877307bc82fdda978dc6f97d4c608e77a80Chris Lattnerusing namespace llvm;
22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "postdomtree"
24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
2594108ab8a36806d5c7fb56bed4ddffda064f5c5dChris Lattner//===----------------------------------------------------------------------===//
263dc6776b338f81e2d47daa42cc12c9f91053043dOwen Anderson//  PostDominatorTree Implementation
27442b32b5c5f690bc9b49d67b3ec76008879bc4d9Nate Begeman//===----------------------------------------------------------------------===//
28442b32b5c5f690bc9b49d67b3ec76008879bc4d9Nate Begeman
291997473cf72957d0e70322e2fe6fe2ab141c58a6Devang Patelchar PostDominatorTree::ID = 0;
30d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(PostDominatorTree, "postdomtree",
31ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson                "Post-Dominator Tree Construction", true, true)
32442b32b5c5f690bc9b49d67b3ec76008879bc4d9Nate Begeman
33471ab54df756f2f48c9146ad897672662c3f25f9Owen Andersonbool PostDominatorTree::runOnFunction(Function &F) {
34d20cc14dbf6d54d896e67b9920cd9bccdc14c41aOwen Anderson  DT->recalculate(F);
35471ab54df756f2f48c9146ad897672662c3f25f9Owen Anderson  return false;
36471ab54df756f2f48c9146ad897672662c3f25f9Owen Anderson}
37471ab54df756f2f48c9146ad897672662c3f25f9Owen Anderson
38791102fb1192ac9483274e54cbc42480c9b1af10Chris LattnerPostDominatorTree::~PostDominatorTree() {
39f6055806d4a6a39c49c441215a9a5d3a8e933de0Torok Edwin  delete DT;
40f6055806d4a6a39c49c441215a9a5d3a8e933de0Torok Edwin}
41f6055806d4a6a39c49c441215a9a5d3a8e933de0Torok Edwin
4245cfe545ec8177262dabc70580ce05feaa1c3880Chris Lattnervoid PostDominatorTree::print(raw_ostream &OS, const Module *) const {
4345cfe545ec8177262dabc70580ce05feaa1c3880Chris Lattner  DT->print(OS);
44791102fb1192ac9483274e54cbc42480c9b1af10Chris Lattner}
45791102fb1192ac9483274e54cbc42480c9b1af10Chris Lattner
46791102fb1192ac9483274e54cbc42480c9b1af10Chris Lattner
475771d6c16d71dc3bba59b88592686c76f07f4721Owen AndersonFunctionPass* llvm::createPostDomTree() {
485771d6c16d71dc3bba59b88592686c76f07f4721Owen Anderson  return new PostDominatorTree();
495771d6c16d71dc3bba59b88592686c76f07f4721Owen Anderson}
505771d6c16d71dc3bba59b88592686c76f07f4721Owen Anderson
51