| //===- PostDominators.cpp - Post-Dominator Calculation --------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file implements the post-dominator construction algorithms. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/Analysis/PostDominators.h" |
| #include "llvm/ADT/DepthFirstIterator.h" |
| #include "llvm/ADT/SetOperations.h" |
| #include "llvm/IR/CFG.h" |
| #include "llvm/IR/Instructions.h" |
| #include "llvm/IR/PassManager.h" |
| #include "llvm/Support/Debug.h" |
| #include "llvm/Support/GenericDomTreeConstruction.h" |
| using namespace llvm; |
| |
| #define DEBUG_TYPE "postdomtree" |
| |
| //===----------------------------------------------------------------------===// |
| // PostDominatorTree Implementation |
| //===----------------------------------------------------------------------===// |
| |
| char PostDominatorTreeWrapperPass::ID = 0; |
| INITIALIZE_PASS(PostDominatorTreeWrapperPass, "postdomtree", |
| "Post-Dominator Tree Construction", true, true) |
| |
| bool PostDominatorTreeWrapperPass::runOnFunction(Function &F) { |
| DT.recalculate(F); |
| return false; |
| } |
| |
| void PostDominatorTreeWrapperPass::print(raw_ostream &OS, const Module *) const { |
| DT.print(OS); |
| } |
| |
| FunctionPass* llvm::createPostDomTree() { |
| return new PostDominatorTreeWrapperPass(); |
| } |
| |
| char PostDominatorTreeAnalysis::PassID; |
| |
| PostDominatorTree PostDominatorTreeAnalysis::run(Function &F, |
| FunctionAnalysisManager &) { |
| PostDominatorTree PDT; |
| PDT.recalculate(F); |
| return PDT; |
| } |
| |
| PostDominatorTreePrinterPass::PostDominatorTreePrinterPass(raw_ostream &OS) |
| : OS(OS) {} |
| |
| PreservedAnalyses |
| PostDominatorTreePrinterPass::run(Function &F, FunctionAnalysisManager &AM) { |
| OS << "PostDominatorTree for function: " << F.getName() << "\n"; |
| AM.getResult<PostDominatorTreeAnalysis>(F).print(OS); |
| |
| return PreservedAnalyses::all(); |
| } |