[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

Tom Stellard tom at stellard.net
Tue Sep 18 06:34:30 PDT 2012


On Mon, Sep 17, 2012 at 01:20:16PM -0700, Bill Wendling wrote:
> 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?
>

It's not necessary.  I'll make this change.

-Tom

> 
> > +  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
> 
> _______________________________________________
> 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