mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
59e885531a
trees into the Support library. These are all expressed in terms of the generic GraphTraits and CFG, with no reliance on any concrete IR types. Putting them in support clarifies that and makes the fact that the static analyzer in Clang uses them much more sane. When moving the Dominators.h file into the IR library I claimed that this was the right home for it but not something I planned to work on. Oops. So why am I doing this? It happens to be one step toward breaking the requirement that IR verification can only be performed from inside of a pass context, which completely blocks the implementation of verification for the new pass manager infrastructure. Fixing it will also allow removing the concept of the "preverify" step (WTF???) and allow the verifier to cleanly flag functions which fail verification in a way that precludes even computing dominance information. Currently, that results in a fatal error even when you ask the verifier to not fatally error. It's awesome like that. The yak shaving will continue... llvm-svn: 199095
51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
//===- 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.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#define DEBUG_TYPE "postdomtree"
|
|
|
|
#include "llvm/Analysis/PostDominators.h"
|
|
#include "llvm/ADT/DepthFirstIterator.h"
|
|
#include "llvm/ADT/SetOperations.h"
|
|
#include "llvm/Support/GenericDomTreeConstruction.h"
|
|
#include "llvm/IR/Instructions.h"
|
|
#include "llvm/Support/CFG.h"
|
|
#include "llvm/Support/Debug.h"
|
|
using namespace llvm;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// PostDominatorTree Implementation
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
char PostDominatorTree::ID = 0;
|
|
INITIALIZE_PASS(PostDominatorTree, "postdomtree",
|
|
"Post-Dominator Tree Construction", true, true)
|
|
|
|
bool PostDominatorTree::runOnFunction(Function &F) {
|
|
DT->recalculate(F);
|
|
return false;
|
|
}
|
|
|
|
PostDominatorTree::~PostDominatorTree() {
|
|
delete DT;
|
|
}
|
|
|
|
void PostDominatorTree::print(raw_ostream &OS, const Module *) const {
|
|
DT->print(OS);
|
|
}
|
|
|
|
|
|
FunctionPass* llvm::createPostDomTree() {
|
|
return new PostDominatorTree();
|
|
}
|
|
|