[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 d1daaa684ad1954d5a08652e77246c72d2c27651..37851ba87da3a7c0b20d868639ecb7f08a02b2eb 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);