From 586d3eaeb59c20f95b1ac89ba53ffca2ddca3866 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Wed, 27 Jul 2016 05:13:52 +0000 Subject: [PATCH] GVN-hoist: use DFS numbers instead of walking the instruction stream The patch replaces a function that walks the IR with a call to firstInBB() that uses the DFS numbering. NFC. Differential Revision: https://reviews.llvm.org/D22809 llvm-svn: 276840 --- llvm/lib/Transforms/Scalar/GVNHoist.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/GVNHoist.cpp b/llvm/lib/Transforms/Scalar/GVNHoist.cpp index 8251a48..6b9142f 100644 --- a/llvm/lib/Transforms/Scalar/GVNHoist.cpp +++ b/llvm/lib/Transforms/Scalar/GVNHoist.cpp @@ -609,13 +609,6 @@ private: return true; } - Instruction *firstOfTwo(Instruction *I, Instruction *J) const { - for (Instruction &I1 : *I->getParent()) - if (&I1 == I || &I1 == J) - return &I1; - llvm_unreachable("Both I and J must be from same BB"); - } - bool makeOperandsAvailable(Instruction *Repl, BasicBlock *HoistPt, const SmallVecInsn &InstructionsToHoist) const { // Check whether the GEP of a ld/st can be synthesized at HoistPt. @@ -685,12 +678,12 @@ private: const SmallVecInsn &InstructionsToHoist = HP.second; Instruction *Repl = nullptr; for (Instruction *I : InstructionsToHoist) - if (I->getParent() == HoistPt) { + if (I->getParent() == HoistPt) // If there are two instructions in HoistPt to be hoisted in place: // update Repl to be the first one, such that we can rename the uses // of the second based on the first. - Repl = !Repl ? I : firstOfTwo(Repl, I); - } + if (!Repl || firstInBB(I, Repl)) + Repl = I; if (Repl) { // Repl is already in HoistPt: it remains in place. -- 2.7.4