From: Chandler Carruth Date: Fri, 13 Feb 2015 04:14:05 +0000 (+0000) Subject: [unroll] Directly query for dead instructions. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=758256535ca42889f5334198480eb222c2d0e511;p=oota-llvm.git [unroll] Directly query for dead instructions. In the unroll analyzer, it is checking each user to see if that user will become dead. However, it first checked if that user was missing from the simplified values map, and then if was also missing from the dead instructions set. We add everything from the simplified values map to the dead instructions set, so the first step is completely subsumed by the second. Moreover, the first step requires *inserting* something into the simplified value map which isn't what we want at all. This also replaces a dyn_cast with a cast as an instruction cannot be used by a non-instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229057 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/LoopUnrollPass.cpp b/lib/Transforms/Scalar/LoopUnrollPass.cpp index 37851ba87da..4c57c922bc9 100644 --- a/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -543,13 +543,12 @@ public: if (DeadInstructions.count(I)) continue; bool AllUsersFolded = true; - for (User *U : I->users()) { - Instruction *UI = dyn_cast(U); - if (!SimplifiedValues[UI] && !DeadInstructions.count(UI)) { + for (User *U : I->users()) + if (!DeadInstructions.count(cast(U))) { AllUsersFolded = false; break; } - } + if (AllUsersFolded) { NumberOfOptimizedInstructions += TTI.getUserCost(I); DeadInstructions.insert(I);