Skip to content

Commit 0d20a9d

Browse files
committed
chore: Add max-sym-cycles case in iterative deepening searcher
1 parent 91c4174 commit 0d20a9d

5 files changed

Lines changed: 5127 additions & 2 deletions

File tree

include/klee/Core/TerminationTypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ enum Reason {
9494
MaxSteppedInstructions,
9595
MaxTime,
9696
MaxCycles,
97+
MaxSymCycles,
9798
MaxForks,
9899
CovCheck,
99100
NoMoreStates,

lib/Core/Searcher.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,26 @@ class MaxCyclesMetric final : public IterativeDeepeningSearcher::Metric {
669669
}
670670
};
671671

672+
class MaxSymCyclesMetric final : public IterativeDeepeningSearcher::Metric {
673+
public:
674+
using ty = unsigned long long;
675+
676+
private:
677+
ty maxCycles;
678+
679+
public:
680+
explicit MaxSymCyclesMetric(ty maxCycles) : maxCycles(maxCycles){};
681+
explicit MaxSymCyclesMetric() : MaxSymCyclesMetric(1ULL){};
682+
683+
bool exceeds(const ExecutionState &state) const final {
684+
return state.isSymbolicCycled(maxCycles);
685+
}
686+
void increaseLimit() final {
687+
maxCycles *= 4ULL;
688+
klee_message("increased max-sym-cycles to %llu", maxCycles);
689+
}
690+
};
691+
672692
IterativeDeepeningSearcher::IterativeDeepeningSearcher(Searcher *baseSearcher,
673693
HaltExecution::Reason m)
674694
: baseSearcher{baseSearcher} {
@@ -679,6 +699,9 @@ IterativeDeepeningSearcher::IterativeDeepeningSearcher(Searcher *baseSearcher,
679699
case HaltExecution::Reason::MaxCycles:
680700
metric = std::make_unique<MaxCyclesMetric>();
681701
return;
702+
case HaltExecution::Reason::MaxSymCycles:
703+
metric = std::make_unique<MaxSymCyclesMetric>();
704+
return;
682705
default:
683706
klee_error("Illegal metric for iterative deepening searcher: %d", m);
684707
}

lib/Core/UserSearcher.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ cl::opt<HaltExecution::Reason> UseIterativeDeepeningSearch(
5858
clEnumValN(HaltExecution::Reason::MaxTime, "max-time",
5959
"metric is maximum time"),
6060
clEnumValN(HaltExecution::Reason::MaxCycles, "max-cycles",
61-
"metric is maximum cycles")),
61+
"metric is maximum cycles"),
62+
clEnumValN(HaltExecution::Reason::MaxSymCycles, "max-sym-cycles",
63+
"metric is maximum symbolic cycles")),
6264
cl::init(HaltExecution::Reason::Unspecified), cl::cat(SearchCat));
6365

6466
cl::opt<bool> UseBatchingSearch(

scripts/kleef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def klee_options(
8080
"--memory-backend=mixed",
8181
"--max-fixed-size-structures-size=64",
8282
"--use-intermittent-equalities-rewriter",
83-
"--use-iterative-deepening-search=max-cycles",
83+
"--use-iterative-deepening-search=max-sym-cycles",
8484
"--optimize=true",
8585
]
8686
if run_forever:

0 commit comments

Comments
 (0)