15bool DeltaAlgorithm::GetTestResult(
const changeset_ty &Changes) {
16 if (FailedTestsCache.count(Changes))
21 FailedTestsCache.insert(Changes);
26void DeltaAlgorithm::Split(
const changeset_ty &S, changesetlist_ty &Res) {
31 unsigned idx = 0,
N = S.size() / 2;
32 for (changeset_ty::const_iterator it = S.begin(),
33 ie = S.end(); it != ie; ++it, ++idx)
34 ((idx <
N) ?
LHS :
RHS).insert(*it);
42DeltaAlgorithm::Delta(
const changeset_ty &Changes,
43 const changesetlist_ty &Sets) {
53 if (Search(Changes, Sets, Res))
59 Split(Set, SplitSets);
60 if (SplitSets.size() == Sets.size())
63 return Delta(Changes, SplitSets);
66bool DeltaAlgorithm::Search(
const changeset_ty &Changes,
67 const changesetlist_ty &Sets,
70 for (changesetlist_ty::const_iterator it = Sets.begin(),
71 ie = Sets.end(); it != ie; ++it) {
73 if (GetTestResult(*it)) {
76 Res = Delta(*it, Sets);
82 if (Sets.size() > 2) {
85 std::set_difference(Changes.begin(), Changes.end(), it->begin(),
87 std::inserter(Complement, Complement.begin()));
88 if (GetTestResult(Complement)) {
90 ComplementSets.insert(ComplementSets.end(), Sets.begin(), it);
91 ComplementSets.insert(ComplementSets.end(), it + 1, Sets.end());
92 Res = Delta(Complement, ComplementSets);
108 Split(Changes, Sets);
110 return Delta(Changes, Sets);
virtual bool ExecuteOneTest(const changeset_ty &S)=0
ExecuteOneTest - Execute a single test predicate on the change set S.
virtual ~DeltaAlgorithm()
virtual void UpdatedSearchState(const changeset_ty &Changes, const changesetlist_ty &Sets)
UpdatedSearchState - Callback used when the search state changes.
changeset_ty Run(const changeset_ty &Changes)
Run - Minimize the set Changes by executing.
std::set< change_ty > changeset_ty
std::vector< changeset_ty > changesetlist_ty
This is an optimization pass for GlobalISel generic memory operations.