Do not unswitch loop on same value again and again.
authorDevang Patel <dpatel@apple.com>
Mon, 26 Feb 2007 19:31:58 +0000 (19:31 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 26 Feb 2007 19:31:58 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34638 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopUnswitch.cpp

index 8a4ac01fbe4e7f2d7ae7fa9d1483395be3b81011..cd8d82bcde8ae12da4a37c384b226f8c63b28ca1 100644 (file)
@@ -62,6 +62,8 @@ namespace {
 
     // LoopProcessWorklist - List of loops we need to process.
     std::vector<Loop*> LoopProcessWorklist;
+    std::set<Value *> UnswitchedVals;
+
   public:
     virtual bool runOnFunction(Function &F);
     bool visitLoop(Loop *L);
@@ -186,6 +188,11 @@ bool LoopUnswitch::visitLoop(Loop *L) {
         // Find a value to unswitch on:
         // FIXME: this should chose the most expensive case!
         Constant *UnswitchVal = SI->getCaseValue(1);
+        // Do not process same value again and again.
+        if (UnswitchedVals.count(UnswitchVal) != 0)
+          continue;
+        UnswitchedVals.insert(UnswitchVal);
+
         if (UnswitchIfProfitable(LoopCond, UnswitchVal, L)) {
           ++NumSwitches;
           return true;