aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-04-24 19:32:42 +0000
committerChris Lattner <sabre@nondot.org>2003-04-24 19:32:42 +0000
commita148ccb15888091c42fa986e612a8ae1e448282f (patch)
tree0ae596afda69f7d579cff0b0d01d9dfcd640ff39
parent9c3b55ea9f5fe17c5713757e97aa62e0fb356dcf (diff)
Allow bugpoint to try new an different methods for pruning down lists
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5905 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--tools/bugpoint/Miscompilation.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp
index d382c06c83..4960b8205d 100644
--- a/tools/bugpoint/Miscompilation.cpp
+++ b/tools/bugpoint/Miscompilation.cpp
@@ -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;
}