From: Juergen Ributzka Date: Thu, 3 Apr 2014 01:38:47 +0000 (+0000) Subject: Revert "[Constant Hoisting] Lazily compute the idom and cache the result." X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=7fce127f62e3ba3f8890a0863e7f91830c73746a;p=oota-llvm.git Revert "[Constant Hoisting] Lazily compute the idom and cache the result." This code is no longer usefull, because we only compute and use the IDom once. There is no benefit in caching it anymore. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205498 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/ConstantHoisting.cpp b/lib/Transforms/Scalar/ConstantHoisting.cpp index b8c282a4e56..57a15214e65 100644 --- a/lib/Transforms/Scalar/ConstantHoisting.cpp +++ b/lib/Transforms/Scalar/ConstantHoisting.cpp @@ -87,10 +87,9 @@ struct ConstantCandidate { struct RebasedConstantInfo { ConstantUseListType Uses; Constant *Offset; - mutable BasicBlock *IDom; RebasedConstantInfo(ConstantUseListType &&Uses, Constant *Offset) - : Uses(Uses), Offset(Offset), IDom(nullptr) { } + : Uses(Uses), Offset(Offset) { } }; /// \brief A base constant and all its rebased constants. @@ -151,17 +150,6 @@ private: Entry = nullptr; } - /// \brief Find the common dominator of all uses and cache the result for - /// future lookup. - BasicBlock *getIDom(const RebasedConstantInfo &RCI) const { - if (RCI.IDom) - return RCI.IDom; - RCI.IDom = findIDomOfAllUses(RCI.Uses); - assert(RCI.IDom && "Invalid IDom."); - return RCI.IDom; - } - - BasicBlock *findIDomOfAllUses(const ConstantUseListType &Uses) const; Instruction *findMatInsertPt(Instruction *Inst, unsigned Idx = ~0U) const; Instruction *findConstantInsertionPoint(const ConstantInfo &ConstInfo) const; void collectConstantCandidates(ConstCandMapType &ConstCandMap, @@ -214,32 +202,6 @@ bool ConstantHoisting::runOnFunction(Function &Fn) { return MadeChange; } -/// \brief Find nearest common dominator of all uses. -/// FIXME: Replace this with NearestCommonDominator once it is in common code. -BasicBlock * -ConstantHoisting::findIDomOfAllUses(const ConstantUseListType &Uses) const { - // Collect all basic blocks. - SmallPtrSet BBs; - for (auto const &U : Uses) - BBs.insert(findMatInsertPt(U.Inst, U.OpndIdx)->getParent()); - - if (BBs.count(Entry)) - return Entry; - - while (BBs.size() >= 2) { - BasicBlock *BB, *BB1, *BB2; - BB1 = *BBs.begin(); - BB2 = *std::next(BBs.begin()); - BB = DT->findNearestCommonDominator(BB1, BB2); - if (BB == Entry) - return Entry; - BBs.erase(BB1); - BBs.erase(BB2); - BBs.insert(BB); - } - assert((BBs.size() == 1) && "Expected only one element."); - return *BBs.begin(); -} /// \brief Find the constant materialization insertion point. Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst, @@ -262,12 +224,11 @@ Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst, Instruction *ConstantHoisting:: findConstantInsertionPoint(const ConstantInfo &ConstInfo) const { assert(!ConstInfo.RebasedConstants.empty() && "Invalid constant info entry."); - // Collect all IDoms. + // Collect all basic blocks. SmallPtrSet BBs; for (auto const &RCI : ConstInfo.RebasedConstants) - BBs.insert(getIDom(RCI)); - - assert(!BBs.empty() && "No dominators!?"); + for (auto const &U : RCI.Uses) + BBs.insert(U.Inst->getParent()); if (BBs.count(Entry)) return &Entry->front();