about summary refs log tree commit diff homepage
path: root/lib/Core/Executor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Core/Executor.cpp')
-rw-r--r--lib/Core/Executor.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index cea7f173..cc3ac50f 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -365,6 +365,12 @@ cl::opt<double> MaxStaticCPSolvePct(
              "instructions (default=1.0 (always))"),
     cl::cat(TerminationCat));
 
+cl::opt<std::string> MaxStaticPctCheckDelay(
+    "max-static-pct-check-delay",
+    cl::desc("Time after which the --max-static-*-pct checks are enforced (default=60s)"),
+    cl::init("60s"),
+    cl::cat(TerminationCat));
+
 cl::opt<std::string> TimerInterval(
     "timer-interval",
     cl::desc("Minimum interval to check timers. "
@@ -485,6 +491,8 @@ Executor::Executor(LLVMContext &ctx, const InterpreterOptions &opts,
   this->solver = new TimingSolver(solver, EqualitySubstitution);
   memory = new MemoryManager(&arrayCache);
 
+  maxStaticPctCheckDelay = time::Span{MaxStaticPctCheckDelay};
+
   initializeSearchOptions();
 
   if (OnlyOutputStatesCoveringNew && !StatsTracker::useIStats())
@@ -971,7 +979,9 @@ ref<Expr> Executor::maxStaticPctChecks(ExecutionState &current,
       MaxStaticCPForkPct == 1. && MaxStaticCPSolvePct == 1.)
     return condition;
 
-  if (statsTracker->elapsed() <= time::seconds(60))
+  // these checks are performed only after MaxStaticPctCheckDelay time has
+  // passed since execution started
+  if (statsTracker->elapsed() <= maxStaticPctCheckDelay)
     return condition;
 
   StatisticManager &sm = *theStatisticManager;