Allow bugpoint to try new an different methods for pruning down lists
authorChris Lattner <sabre@nondot.org>
Thu, 24 Apr 2003 19:32:42 +0000 (19:32 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 24 Apr 2003 19:32:42 +0000 (19:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5905 91177308-0d34-0410-b5e6-96231b3b80d8

tools/bugpoint/Miscompilation.cpp

index d382c06c83444795e05f9e34dfd01586d186511b..4960b8205de5cde957858d47a8d9f9448cf5b1e2 100644 (file)
@@ -72,6 +72,30 @@ struct ListReducer {
         break;
       }
     }
+
+    // Okay, we trimmed as much off the top and the bottom of the list as we
+    // could.  If there is more two elements in the list, try deleting interior
+    // elements and testing that.
+    //
+    if (TheList.size() > 2) {
+      bool Changed = true;
+      std::vector<ElTy> EmptyList;
+      while (Changed) {
+        Changed = false;
+        std::vector<ElTy> TrimmedList;
+        for (unsigned i = 1; i < TheList.size()-1; ++i) { // Check interior elts
+          std::vector<ElTy> TestList(TheList);
+          TestList.erase(TestList.begin()+i);
+
+          if (doTest(EmptyList, TestList) == KeepSuffix) {
+            // We can trim down the list!
+            TheList.swap(TestList);
+            --i;  // Don't skip an element of the list
+            Changed = true;
+          }
+        }
+      }
+    }
   }
 };
 
@@ -187,7 +211,7 @@ public:
                             const std::vector<Function*> &Kept) {
     if (TestFuncs(Kept, false))
       return KeepSuffix;
-    if (TestFuncs(Prefix, false))
+    if (!Prefix.empty() && TestFuncs(Prefix, false))
       return KeepPrefix;
     return NoFailure;
   }