[PATCH] D22809: GVN-hoist: use DFS numbers instead of walking the instruction stream

Sebastian Pop via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 26 07:24:44 PDT 2016


sebpop created this revision.
sebpop added reviewers: dberlin, majnemer.
sebpop added a subscriber: llvm-commits.

The patch replaces a function that walks the IR with a call to firstInBB() that uses the DFS numbering.

https://reviews.llvm.org/D22809

Files:
  llvm/lib/Transforms/Scalar/GVNHoist.cpp

Index: llvm/lib/Transforms/Scalar/GVNHoist.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/GVNHoist.cpp
+++ llvm/lib/Transforms/Scalar/GVNHoist.cpp
@@ -609,13 +609,6 @@
     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 @@
       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.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D22809.65513.patch
Type: text/x-patch
Size: 1371 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160726/a2641760/attachment.bin>


More information about the llvm-commits mailing list