From 82cb30f10cf0849b876e6722e0a2305c91855239 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Fri, 13 Feb 2015 04:06:08 +0000 Subject: [PATCH] [unroll] Replace a linear time check for no uses with a constant time 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. llvm-svn: 229056 --- llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp index d1daaa684ad1..37851ba87da3 100644 --- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -519,7 +519,8 @@ public: auto EnqueueOperands = [&](Instruction &I) { for (auto *Op : I.operand_values()) if (auto *OpI = dyn_cast(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(U);