[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