CBMC
|
#include <memory_model_tso.h>
Public Member Functions | |
memory_model_tsot (const namespacet &_ns) | |
virtual void | operator() (symex_target_equationt &equation, message_handlert &) |
![]() | |
memory_model_sct (const namespacet &_ns) | |
![]() | |
memory_model_baset (const namespacet &_ns) | |
virtual | ~memory_model_baset () |
![]() | |
partial_order_concurrencyt (const namespacet &_ns) | |
virtual | ~partial_order_concurrencyt () |
Protected Member Functions | |
virtual exprt | before (event_it e1, event_it e2) |
virtual bool | program_order_is_relaxed (partial_order_concurrencyt::event_it e1, partial_order_concurrencyt::event_it e2) const |
void | program_order (symex_target_equationt &equation) |
![]() | |
void | build_per_thread_map (const symex_target_equationt &equation, per_thread_mapt &dest) const |
void | thread_spawn (symex_target_equationt &equation, const per_thread_mapt &per_thread_map) |
void | program_order (symex_target_equationt &equation) |
void | from_read (symex_target_equationt &equation) |
void | write_serialization_external (symex_target_equationt &equation) |
![]() | |
bool | po (event_it e1, event_it e2) |
In-thread program order. | |
symbol_exprt | nondet_bool_symbol (const std::string &prefix) |
void | read_from (symex_target_equationt &equation) |
For each read r from every address we collect the choice symbols S via register_read_from_choice_symbol (for potential read-write pairs) and add a constraint r.guard => \/S. | |
symbol_exprt | register_read_from_choice_symbol (const event_it &r, const event_it &w, symex_target_equationt &equation) |
Introduce a new choice symbol s for the pair (r , w ) add constraint s => (w.guard /\ r.lhs=w.lhs) add constraint s => before(w,r) [if w is from another thread]. | |
![]() | |
void | build_event_lists (symex_target_equationt &equation, message_handlert &message_handler) |
First call add_init_writes then for each shared read/write (or spawn) populate: 1) the address_map (with a list of reads/writes for the address of each event) 2) the numbering map (with per-thread unique number of every event) | |
void | add_init_writes (symex_target_equationt &) |
For each shared read event and for each shared write event that appears after spawn or has false guard prepend a shared write SSA step with non-deterministic value. | |
irep_idt | address (event_it event) const |
Produce an address ID for an event. | |
symbol_exprt | clock (event_it e, axiomt axiom) |
Produce a clock symbol for some event. | |
void | build_clock_type () |
Initialize the clock_type so that it can be used to number events. | |
void | add_constraint (symex_target_equationt &equation, const exprt &cond, const std::string &msg, const symex_targett::sourcet &source) const |
Simplify and add a constraint to equation. | |
exprt | before (event_it e1, event_it e2, unsigned axioms) |
Build the partial order constraint for two events: if e1 and e2 are in the same atomic section then constrain with equality between their clocks otherwise constrain with e1 clock being less than e2 clock. | |
Definition at line 17 of file memory_model_tso.h.
|
inlineexplicit |
Definition at line 20 of file memory_model_tso.h.
Reimplemented from memory_model_sct.
Definition at line 34 of file memory_model_tso.cpp.
|
virtual |
Reimplemented from memory_model_sct.
Reimplemented in memory_model_psot.
Definition at line 17 of file memory_model_tso.cpp.
|
protected |
Definition at line 56 of file memory_model_tso.cpp.
|
protectedvirtual |
Reimplemented from memory_model_sct.
Reimplemented in memory_model_psot.
Definition at line 40 of file memory_model_tso.cpp.