Revert "[JumpThreading] Prevent non-deterministic use lists"
authorPablo Barrio <pablo.barrio@arm.com>
Tue, 15 Nov 2016 15:42:17 +0000 (15:42 +0000)
committerPablo Barrio <pablo.barrio@arm.com>
Tue, 15 Nov 2016 15:42:17 +0000 (15:42 +0000)
This reverts commit f2c2f5354070469dac253373c66527ca971ddc66.

llvm-svn: 286975

llvm/lib/Transforms/Scalar/JumpThreading.cpp

index c37659b..05ac11f 100644 (file)
@@ -2042,18 +2042,19 @@ bool JumpThreadingPass::TryToUnfoldSelectInCurrBB(BasicBlock *BB) {
       // Look for scalar booleans used in selects as conditions. If there are
       // several selects that use the same boolean, they are candidates for jump
       // threading and therefore we should unfold them.
-      for (Use& U : I.uses()) {
-        auto *SI = dyn_cast<SelectInst>(U.getUser());
-        if (SI && U.getOperandNo() == 0)
+      for (Value *U : I.users())
+        if (auto *SI = dyn_cast<SelectInst>(U))
           Selects.push_back(SI);
-      }
-
       if (Selects.size() <= 1)
         continue;
 
+      // Remove duplicates
+      std::sort(Selects.begin(), Selects.end());
+      auto NewEnd = std::unique(Selects.begin(), Selects.end());
+
       Changed = true;
-      for (auto SI : Selects)
-        expandSelect(SI);
+      for (auto SI = Selects.begin(); SI != NewEnd; ++SI)
+        expandSelect(*SI);
     }
   }