69#ifndef KLEE_MERGEHANDLER_H
70#define KLEE_MERGEHANDLER_H
74#include "llvm/Support/CommandLine.h"
120 std::map<llvm::Instruction *, std::vector<ExecutionState *> >
Implements smart-pointer ref<> used by KLEE.
ExecutionState representing a path under exploration.
Represents one klee_open_merge() call. Handles merging of states that branched from it.
void releaseStates()
Immediately release the merged states that have run into a 'klee_merge_close()'.
void addClosedState(ExecutionState *es, llvm::Instruction *mp)
Called when a state runs into a 'klee_close_merge()' call.
bool hasMergedStates()
True, if any states have run into 'klee_close_merge()' and have not been released yet.
class ReferenceCounter _refCount
Required by klee::ref-managed objects.
double closedMean
The average number of instructions between the open and close merge of each state that has finished s...
std::map< llvm::Instruction *, std::vector< ExecutionState * > > reachedCloseMerge
Mapping the different 'klee_close_merge' calls to the states that ran into them.
unsigned closedStateCount
Number of states that are tracked by this MergeHandler, that ran into a relevant klee_close_merge.
void addOpenState(ExecutionState *es)
Add state to the 'openStates' vector.
unsigned getInstructionDistance(ExecutionState *es)
Get distance of state from the openInstruction.
uint64_t openInstruction
The instruction count when the state ran into the klee_open_merge.
ExecutionState * getPrioritizeState()
Return state that should be prioritized to complete this merge.
std::vector< ExecutionState * > openStates
States that ran through the klee_open_merge, but not yet into a corresponding klee_close_merge.
MergeHandler(Executor *_executor, ExecutionState *es)
void removeOpenState(ExecutionState *es)
Remove state from the 'openStates' vector.
Reference counter to be used as part of a ref-managed struct or class.
llvm::cl::opt< bool > DebugLogIncompleteMerge
llvm::cl::opt< bool > UseMerge
llvm::cl::opt< bool > DebugLogMerge