OSDN Git Service

[unroll] Replace a linear time check for no uses with a constant time
authorChandler Carruth <chandlerc@gmail.com>
Fri, 13 Feb 2015 04:06:08 +0000 (04:06 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 13 Feb 2015 04:06:08 +0000 (04:06 +0000)
check.

Also hoist this into the enqueue process as it is faster even than
testing the worklist set, we should just directly filter these out much
like we filter out constants and such.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229056 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopUnrollPass.cpp

index d1daaa6..37851ba 100644 (file)
@@ -519,7 +519,8 @@ public:
     auto EnqueueOperands = [&](Instruction &I) {
       for (auto *Op : I.operand_values())
         if (auto *OpI = dyn_cast<Instruction>(Op))
-          Worklist.insert(OpI);
+          if (!OpI->use_empty())
+            Worklist.insert(OpI);
     };
 
     // Start by initializing worklist with simplified instructions.
@@ -541,8 +542,6 @@ public:
         continue;
       if (DeadInstructions.count(I))
         continue;
-      if (I->getNumUses() == 0)
-        continue;
       bool AllUsersFolded = true;
       for (User *U : I->users()) {
         Instruction *UI = dyn_cast<Instruction>(U);