Owen, Everything seems to be fine now.
Thanks! Regards Hartmut > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Owen Anderson > Sent: Thursday, October 18, 2007 12:14 AM > To: [email protected] > Subject: [llvm-commits] [llvm] r43115 - in /llvm/trunk: > include/llvm/Analysis/DominatorInternals.h > include/llvm/Analysis/Dominators.h > lib/Transforms/Utils/CodeExtractor.cpp > lib/Transforms/Utils/LoopSimplify.cpp > > Author: resistor > Date: Thu Oct 18 00:13:52 2007 > New Revision: 43115 > > URL: http://llvm.org/viewvc/llvm-project?rev=43115&view=rev > Log: > Move Split<...>() into DomTreeBase. This should make the > #include's of DominatorInternals.h in CodeExtractor and > LoopSimplify unnecessary. > > Hartmut, could you confirm that this fixes the issues you were seeing? > > Modified: > llvm/trunk/include/llvm/Analysis/DominatorInternals.h > llvm/trunk/include/llvm/Analysis/Dominators.h > llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp > llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp > > Modified: llvm/trunk/include/llvm/Analysis/DominatorInternals.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/An alysis/DominatorInternals.h?rev=43115&r1=43114&r2=43115> &view=diff > > ============================================================== > ================ > --- llvm/trunk/include/llvm/Analysis/DominatorInternals.h (original) > +++ llvm/trunk/include/llvm/Analysis/DominatorInternals.h Thu Oct 18 > +++ 00:13:52 2007 > @@ -303,93 +303,6 @@ > DT.DFSInfoValid = false; > } > > -// NewBB is split and now it has one successor. Update > dominator tree to -// reflect this change. > -template<class NodeT, class GraphT> > -void Split(DominatorTreeBase<typename GraphT::NodeType>& DT, > - typename GraphT::NodeType* NewBB) { > - assert(std::distance(GraphT::child_begin(NewBB), > GraphT::child_end(NewBB)) == 1 > - && "NewBB should have a single successor!"); > - typename GraphT::NodeType* NewBBSucc = *GraphT::child_begin(NewBB); > - > - std::vector<typename GraphT::NodeType*> PredBlocks; > - for (typename GraphTraits<Inverse<NodeT> >::ChildIteratorType PI = > - GraphTraits<Inverse<NodeT> >::child_begin(NewBB), > - PE = GraphTraits<Inverse<NodeT> >::child_end(NewBB); > PI != PE; ++PI) > - PredBlocks.push_back(*PI); > - > - assert(!PredBlocks.empty() && "No predblocks??"); > - > - // The newly inserted basic block will dominate existing > basic blocks iff the > - // PredBlocks dominate all of the non-pred blocks. If > all predblocks dominate > - // the non-pred blocks, then they all must be the same block! > - // > - bool NewBBDominatesNewBBSucc = true; > - { > - typename GraphT::NodeType* OnePred = PredBlocks[0]; > - unsigned i = 1, e = PredBlocks.size(); > - for (i = 1; !DT.isReachableFromEntry(OnePred); ++i) { > - assert(i != e && "Didn't find reachable pred?"); > - OnePred = PredBlocks[i]; > - } > - > - for (; i != e; ++i) > - if (PredBlocks[i] != OnePred && > DT.isReachableFromEntry(OnePred)) { > - NewBBDominatesNewBBSucc = false; > - break; > - } > - > - if (NewBBDominatesNewBBSucc) > - for (typename GraphTraits<Inverse<NodeT> > >::ChildIteratorType PI = > - GraphTraits<Inverse<NodeT> >::child_begin(NewBBSucc), > - E = GraphTraits<Inverse<NodeT> > >::child_end(NewBBSucc); PI != E; ++PI) > - if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) { > - NewBBDominatesNewBBSucc = false; > - break; > - } > - } > - > - // The other scenario where the new block can dominate its > successors are when > - // all predecessors of NewBBSucc that are not NewBB are > dominated by NewBBSucc > - // already. > - if (!NewBBDominatesNewBBSucc) { > - NewBBDominatesNewBBSucc = true; > - for (typename GraphTraits<Inverse<NodeT> > >::ChildIteratorType PI = > - GraphTraits<Inverse<NodeT> >::child_begin(NewBBSucc), > - E = GraphTraits<Inverse<NodeT> > >::child_end(NewBBSucc); PI != E; ++PI) > - if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) { > - NewBBDominatesNewBBSucc = false; > - break; > - } > - } > - > - // Find NewBB's immediate dominator and create new > dominator tree node for > - // NewBB. > - BasicBlock *NewBBIDom = 0; > - unsigned i = 0; > - for (i = 0; i < PredBlocks.size(); ++i) > - if (DT.isReachableFromEntry(PredBlocks[i])) { > - NewBBIDom = PredBlocks[i]; > - break; > - } > - assert(i != PredBlocks.size() && "No reachable preds?"); > - for (i = i + 1; i < PredBlocks.size(); ++i) { > - if (DT.isReachableFromEntry(PredBlocks[i])) > - NewBBIDom = DT.findNearestCommonDominator(NewBBIDom, > PredBlocks[i]); > - } > - assert(NewBBIDom && "No immediate dominator found??"); > - > - // Create the new dominator tree node... and set the idom of NewBB. > - DomTreeNode *NewBBNode = DT.addNewBlock(NewBB, NewBBIDom); > - > - // If NewBB strictly dominates other blocks, then it is > now the immediate > - // dominator of NewBBSucc. Update the dominator tree as > appropriate. > - if (NewBBDominatesNewBBSucc) { > - DomTreeNode *NewBBSuccNode = DT.getNode(NewBBSucc); > - DT.changeImmediateDominator(NewBBSuccNode, NewBBNode); > - } > -} > - > } > > #endif > > Modified: llvm/trunk/include/llvm/Analysis/Dominators.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/An alysis/Dominators.h?rev=43115&r1=43114&r2=43115&view=diff > > ============================================================== > ================ > --- llvm/trunk/include/llvm/Analysis/Dominators.h (original) > +++ llvm/trunk/include/llvm/Analysis/Dominators.h Thu Oct 18 00:13:52 > +++ 2007 > @@ -202,6 +202,93 @@ > Vertex.clear(); > RootNode = 0; > } > + > + // NewBB is split and now it has one successor. Update > dominator tree > + to // reflect this change. > + template<class N, class GraphT> > + void Split(DominatorTreeBase<typename GraphT::NodeType>& DT, > + typename GraphT::NodeType* NewBB) { > + assert(std::distance(GraphT::child_begin(NewBB), > GraphT::child_end(NewBB)) == 1 > + && "NewBB should have a single successor!"); > + typename GraphT::NodeType* NewBBSucc = > *GraphT::child_begin(NewBB); > + > + std::vector<typename GraphT::NodeType*> PredBlocks; > + for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI = > + GraphTraits<Inverse<N> >::child_begin(NewBB), > + PE = GraphTraits<Inverse<N> >::child_end(NewBB); PI > != PE; ++PI) > + PredBlocks.push_back(*PI); > + > + assert(!PredBlocks.empty() && "No predblocks??"); > + > + // The newly inserted basic block will dominate > existing basic blocks iff the > + // PredBlocks dominate all of the non-pred blocks. If > all predblocks dominate > + // the non-pred blocks, then they all must be the same block! > + // > + bool NewBBDominatesNewBBSucc = true; > + { > + typename GraphT::NodeType* OnePred = PredBlocks[0]; > + unsigned i = 1, e = PredBlocks.size(); > + for (i = 1; !DT.isReachableFromEntry(OnePred); ++i) { > + assert(i != e && "Didn't find reachable pred?"); > + OnePred = PredBlocks[i]; > + } > + > + for (; i != e; ++i) > + if (PredBlocks[i] != OnePred && > DT.isReachableFromEntry(OnePred)) { > + NewBBDominatesNewBBSucc = false; > + break; > + } > + > + if (NewBBDominatesNewBBSucc) > + for (typename GraphTraits<Inverse<N> > >::ChildIteratorType PI = > + GraphTraits<Inverse<N> >::child_begin(NewBBSucc), > + E = GraphTraits<Inverse<N> > >::child_end(NewBBSucc); PI != E; ++PI) > + if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) { > + NewBBDominatesNewBBSucc = false; > + break; > + } > + } > + > + // The other scenario where the new block can dominate > its successors are when > + // all predecessors of NewBBSucc that are not NewBB are > dominated by NewBBSucc > + // already. > + if (!NewBBDominatesNewBBSucc) { > + NewBBDominatesNewBBSucc = true; > + for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI = > + GraphTraits<Inverse<N> >::child_begin(NewBBSucc), > + E = GraphTraits<Inverse<N> > >::child_end(NewBBSucc); PI != E; ++PI) > + if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) { > + NewBBDominatesNewBBSucc = false; > + break; > + } > + } > + > + // Find NewBB's immediate dominator and create new > dominator tree node for > + // NewBB. > + BasicBlock *NewBBIDom = 0; > + unsigned i = 0; > + for (i = 0; i < PredBlocks.size(); ++i) > + if (DT.isReachableFromEntry(PredBlocks[i])) { > + NewBBIDom = PredBlocks[i]; > + break; > + } > + assert(i != PredBlocks.size() && "No reachable preds?"); > + for (i = i + 1; i < PredBlocks.size(); ++i) { > + if (DT.isReachableFromEntry(PredBlocks[i])) > + NewBBIDom = DT.findNearestCommonDominator(NewBBIDom, > PredBlocks[i]); > + } > + assert(NewBBIDom && "No immediate dominator found??"); > + > + // Create the new dominator tree node... and set the > idom of NewBB. > + DomTreeNode *NewBBNode = DT.addNewBlock(NewBB, NewBBIDom); > + > + // If NewBB strictly dominates other blocks, then it is > now the immediate > + // dominator of NewBBSucc. Update the dominator tree as > appropriate. > + if (NewBBDominatesNewBBSucc) { > + DomTreeNode *NewBBSuccNode = DT.getNode(NewBBSucc); > + DT.changeImmediateDominator(NewBBSuccNode, NewBBNode); > + } > + } > > public: > DominatorTreeBase(intptr_t ID, bool isPostDom) @@ -425,6 +512,15 @@ > assert(getNode(BB) && "Removing node that isn't in > dominator tree."); > DomTreeNodes.erase(BB); > } > + > + /// splitBlock - BB is split and now it has one successor. Update > + dominator /// tree to reflect this change. > + void splitBlock(NodeT* NewBB) { > + if (this->IsPostDominators) > + Split<Inverse<NodeT*>, GraphTraits<Inverse<NodeT*> > > >(*this, NewBB); > + else > + Split<NodeT*, GraphTraits<NodeT*> >(*this, NewBB); } > > /// print - Convert to human readable form > /// > @@ -471,21 +567,6 @@ > friend void Calculate(DominatorTreeBase<typename > GraphT::NodeType>& DT, > Function& F); > > - template<class N, class GraphT> > - friend void Split(DominatorTreeBase<typename GraphT::NodeType>& DT, > - typename GraphT::NodeType* NewBB); > - > -public: > - /// splitBlock - BB is split and now it has one successor. > Update dominator > - /// tree to reflect this change. > - void splitBlock(NodeT* NewBB) { > - if (this->IsPostDominators) > - Split<Inverse<NodeT*>, GraphTraits<Inverse<NodeT*> > > >(*this, NewBB); > - else > - Split<NodeT*, GraphTraits<NodeT*> >(*this, NewBB); > - } > - > -protected: > /// updateDFSNumbers - Assign In and Out numbers to the > nodes while walking > /// dominator tree in dfs order. > void updateDFSNumbers() { > > Modified: llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ Utils/CodeExtractor.cpp?rev=43115&r1=43114&r2=43115&view=diff > > ============================================================== > ================ > --- llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp (original) > +++ llvm/trunk/lib/Transforms/Utils/CodeExtractor.cpp Thu Oct 18 > +++ 00:13:52 2007 > @@ -21,7 +21,6 @@ > #include "llvm/Module.h" > #include "llvm/Pass.h" > #include "llvm/Analysis/Dominators.h" > -#include "llvm/Analysis/DominatorInternals.h" > #include "llvm/Analysis/LoopInfo.h" > #include "llvm/Analysis/Verifier.h" > #include "llvm/Transforms/Utils/BasicBlockUtils.h" > > Modified: llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ Utils/LoopSimplify.cpp?rev=43115&r1=43114&r2=43115&view=diff > > ============================================================== > ================ > --- llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp (original) > +++ llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp Thu Oct > 18 00:13:52 > +++ 2007 > @@ -40,7 +40,6 @@ > #include "llvm/Type.h" > #include "llvm/Analysis/AliasAnalysis.h" > #include "llvm/Analysis/Dominators.h" > -#include "llvm/Analysis/DominatorInternals.h" > #include "llvm/Analysis/LoopInfo.h" > #include "llvm/Support/CFG.h" > #include "llvm/Support/Compiler.h" > > > _______________________________________________ > llvm-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
