[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