[llvm-commits] [llvm] r164029 - in /llvm/trunk: include/llvm/CodeGen/MachinePostDominators.h include/llvm/InitializePasses.h lib/CodeGen/CMakeLists.txt lib/CodeGen/CodeGen.cpp lib/CodeGen/MachinePostDominators.cpp
Bill Wendling
wendling at apple.com
Mon Sep 17 13:20:16 PDT 2012
On Sep 17, 2012, at 7:08 AM, Tom Stellard <thomas.stellard at amd.com> wrote:
> Author: tstellar
> Date: Mon Sep 17 09:08:37 2012
> New Revision: 164029
>
> URL: http://llvm.org/viewvc/llvm-project?rev=164029&view=rev
> Log:
> Add a MachinePostDominator pass
>
> This is used in the AMDIL and R600 backends.
>
> Added:
> llvm/trunk/include/llvm/CodeGen/MachinePostDominators.h
> llvm/trunk/lib/CodeGen/MachinePostDominators.cpp
> Modified:
> llvm/trunk/include/llvm/InitializePasses.h
> llvm/trunk/lib/CodeGen/CMakeLists.txt
> llvm/trunk/lib/CodeGen/CodeGen.cpp
>
> Added: llvm/trunk/include/llvm/CodeGen/MachinePostDominators.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachinePostDominators.h?rev=164029&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachinePostDominators.h (added)
> +++ llvm/trunk/include/llvm/CodeGen/MachinePostDominators.h Mon Sep 17 09:08:37 2012
> +namespace llvm {
> +
> +///
> +/// PostDominatorTree Class - Concrete subclass of DominatorTree that is used
> +/// to compute the a post-dominator tree.
> +///
> +struct MachinePostDominatorTree : public MachineFunctionPass {
> + static char ID;
> +
> + DominatorTreeBase<MachineBasicBlock> *DT;
> +
Hi Tom,
Is it necessary to expose DT to the users of this class? If not, then could you make it 'private' instead?
-bw
> + MachinePostDominatorTree();
> +
> + ~MachinePostDominatorTree();
> +
> + FunctionPass *createMachinePostDominatorTreePass();
> +
> + const std::vector<MachineBasicBlock *> &getRoots() const {
> + return DT->getRoots();
> + }
> +
> + MachineDomTreeNode *getRootNode() const {
> + return DT->getRootNode();
> + }
> +
> + MachineDomTreeNode *operator[](MachineBasicBlock *BB) const {
> + return DT->getNode(BB);
> + }
> +
> + MachineDomTreeNode *getNode(MachineBasicBlock *BB) const {
> + return DT->getNode(BB);
> + }
> +
> + bool dominates(MachineDomTreeNode *A, MachineDomTreeNode *B) const {
> + return DT->dominates(A, B);
> + }
> +
> + bool dominates(MachineBasicBlock *A, MachineBasicBlock *B) const {
> + return DT->dominates(A, B);
> + }
> +
> + bool
> + properlyDominates(const MachineDomTreeNode *A, MachineDomTreeNode *B) const {
> + return DT->properlyDominates(A, B);
> + }
> +
> + bool
> + properlyDominates(MachineBasicBlock *A, MachineBasicBlock *B) const {
> + return DT->properlyDominates(A, B);
> + }
> +
> + MachineBasicBlock *findNearestCommonDominator(MachineBasicBlock *A,
> + MachineBasicBlock *B) {
> + return DT->findNearestCommonDominator(A, B);
> + }
> +
> + virtual bool runOnMachineFunction(MachineFunction &MF);
> + virtual void getAnalysisUsage(AnalysisUsage &AU) const;
> + virtual void print(llvm::raw_ostream &OS, const Module *M = 0) const;
> +};
> +} //end of namespace llvm
> +
> +#endif
>
> Modified: llvm/trunk/include/llvm/InitializePasses.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=164029&r1=164028&r2=164029&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/InitializePasses.h (original)
> +++ llvm/trunk/include/llvm/InitializePasses.h Mon Sep 17 09:08:37 2012
> @@ -167,6 +167,7 @@
> void initializeMachineBranchProbabilityInfoPass(PassRegistry&);
> void initializeMachineCSEPass(PassRegistry&);
> void initializeMachineDominatorTreePass(PassRegistry&);
> +void initializeMachinePostDominatorTreePass(PassRegistry&);
> void initializeMachineLICMPass(PassRegistry&);
> void initializeMachineLoopInfoPass(PassRegistry&);
> void initializeMachineLoopRangesPass(PassRegistry&);
>
> Modified: llvm/trunk/lib/CodeGen/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CMakeLists.txt?rev=164029&r1=164028&r2=164029&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/CMakeLists.txt (original)
> +++ llvm/trunk/lib/CodeGen/CMakeLists.txt Mon Sep 17 09:08:37 2012
> @@ -45,6 +45,7 @@
> MachineCopyPropagation.cpp
> MachineCSE.cpp
> MachineDominators.cpp
> + MachinePostDominators.cpp
> MachineFunction.cpp
> MachineFunctionAnalysis.cpp
> MachineFunctionPass.cpp
>
> Modified: llvm/trunk/lib/CodeGen/CodeGen.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CodeGen.cpp?rev=164029&r1=164028&r2=164029&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/CodeGen.cpp (original)
> +++ llvm/trunk/lib/CodeGen/CodeGen.cpp Mon Sep 17 09:08:37 2012
> @@ -41,6 +41,7 @@
> initializeMachineCopyPropagationPass(Registry);
> initializeMachineCSEPass(Registry);
> initializeMachineDominatorTreePass(Registry);
> + initializeMachinePostDominatorTreePass(Registry);
> initializeMachineLICMPass(Registry);
> initializeMachineLoopInfoPass(Registry);
> initializeMachineModuleInfoPass(Registry);
>
> Added: llvm/trunk/lib/CodeGen/MachinePostDominators.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachinePostDominators.cpp?rev=164029&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachinePostDominators.cpp (added)
> +++ llvm/trunk/lib/CodeGen/MachinePostDominators.cpp Mon Sep 17 09:08:37 2012
> @@ -0,0 +1,55 @@
> +//===- MachinePostDominators.cpp -Machine 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 simple dominator construction algorithms for finding
> +// post dominators on machine functions.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/CodeGen/MachinePostDominators.h"
> +
> +using namespace llvm;
> +
> +char MachinePostDominatorTree::ID = 0;
> +
> +//declare initializeMachinePostDominatorTreePass
> +INITIALIZE_PASS(MachinePostDominatorTree, "machinepostdomtree",
> + "MachinePostDominator Tree Construction", true, true)
> +
> +MachinePostDominatorTree::MachinePostDominatorTree() : MachineFunctionPass(ID) {
> + initializeMachinePostDominatorTreePass(*PassRegistry::getPassRegistry());
> + DT = new DominatorTreeBase<MachineBasicBlock>(true); //true indicate
> + // postdominator
> +}
> +
> +FunctionPass *
> +MachinePostDominatorTree::createMachinePostDominatorTreePass() {
> + return new MachinePostDominatorTree();
> +}
> +
> +bool
> +MachinePostDominatorTree::runOnMachineFunction(MachineFunction &F) {
> + DT->recalculate(F);
> + return false;
> +}
> +
> +MachinePostDominatorTree::~MachinePostDominatorTree() {
> + delete DT;
> +}
> +
> +void
> +MachinePostDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const {
> + AU.setPreservesAll();
> + MachineFunctionPass::getAnalysisUsage(AU);
> +}
> +
> +void
> +MachinePostDominatorTree::print(llvm::raw_ostream &OS, const Module *M) const {
> + DT->print(OS);
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list