13#ifndef CIRCT_TOOLS_CIRCT_BMC_BMCTRACE_H
14#define CIRCT_TOOLS_CIRCT_BMC_BMCTRACE_H
16#include "llvm/ADT/APInt.h"
17#include "llvm/ADT/ArrayRef.h"
18#include "llvm/ADT/FunctionExtras.h"
19#include "llvm/ADT/StringMap.h"
20#include "llvm/ADT/StringRef.h"
21#include "llvm/Support/raw_ostream.h"
38 llvm::function_ref<std::optional<llvm::APInt>(
Handle,
unsigned width)>;
43 bool modelCompletion,
Handle *value);
57 size_t addSignal(llvm::StringRef name,
unsigned width);
62 void record(
size_t step, llvm::StringRef name,
unsigned width,
Handle handle);
68 std::optional<Handle>
lookup(
size_t step,
size_t signal)
const;
81 using Step = std::vector<std::optional<Handle>>;
93 const char *name, uint32_t width,
static std::unique_ptr< Context > context
llvm::StringRef getTopName() const
bool printTextTrace(llvm::raw_ostream &os, Evaluator evaluate) const
Render the trace as cycle-by-cycle text using the provided evaluator to materialize values from recor...
const char *(*)(Handle context, Handle value) GetNumeralBinaryString
size_t getNumSteps() const
void ensureStep(size_t step)
std::vector< Step > recorded
const void * Handle
Opaque per-signal value reference recorded for a specific cycle.
llvm::ArrayRef< Signal > getSignals() const
size_t addSignal(llvm::StringRef name, unsigned width)
Register a signal to be tracked and return its stable index.
std::vector< std::optional< Handle > > Step
Per-cycle storage for all tracked signals.
llvm::StringMap< size_t > signalIndices
llvm::function_ref< std::optional< llvm::APInt >(Handle, unsigned width)> Evaluator
Callback used to materialize a recorded handle into a concrete value when formatting a trace.
std::vector< Signal > signals
void record(size_t step, size_t signal, Handle handle)
Record the value handle for a tracked signal at the given cycle.
std::optional< Handle > lookup(size_t step, size_t signal) const
Return the recorded handle for a signal at a given cycle, if present.
bool(*)(Handle context, Handle model, Handle expression, bool modelCompletion, Handle *value) ModelEval
Z3 API callbacks passed in by JIT-compiled code.
bool circt_bmc_print_trace(BMCTrace *trace, BMCTrace::Handle context, BMCTrace::Handle model, BMCTrace::ModelEval modelEval, BMCTrace::GetNumeralBinaryString getNumeralBinaryString)
Runtime entry point called on the SAT path while the Z3 context and model are still alive.
void circt_bmc_record_trace(BMCTrace *trace, uint32_t step, const char *name, uint32_t width, BMCTrace::Handle handle)
Runtime entry point called by JIT-compiled BMC code.
Metadata for a tracked signal in the trace.