29#ifndef CPROVER_MEMORY_MODEL_SUP_CLOCK
48 if(
e1->atomic_section_id!=0 &&
49 e1->atomic_section_id==
e2->atomic_section_id)
53 return e1->is_shared_write() &&
e2->is_shared_read();
66 for(per_thread_mapt::const_iterator
75 for(event_listt::const_iterator
80 if((*e_it)->is_memory_barrier())
83 event_listt::const_iterator next=
e_it;
89 for(event_listt::const_iterator
94 if(((*e_it)->is_spawn() && !(*e_it2)->is_memory_barrier()) ||
103 if((*e_it2)->is_spawn())
109 if((*e_it2)->is_memory_barrier())
111 const codet &code = (*e_it2)->source.pc->code();
113 if((*e_it)->is_shared_read() &&
117 else if((*e_it)->is_shared_write() &&
143 if((*e_it2)->is_shared_read())
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Data structure for representing an arbitrary statement in a program.
Base class for all expressions.
bool is_false() const
Return whether the expression is a constant representing false.
The Boolean constant false.
bool get_bool(const irep_idt &name) const
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_symb...
std::map< unsigned, event_listt > per_thread_mapt
void build_per_thread_map(const symex_target_equationt &equation, per_thread_mapt &dest) const
void from_read(symex_target_equationt &equation)
void thread_spawn(symex_target_equationt &equation, const per_thread_mapt &per_thread_map)
void write_serialization_external(symex_target_equationt &equation)
virtual exprt before(event_it e1, event_it e2)
virtual void operator()(symex_target_equationt &equation, message_handlert &)
void program_order(symex_target_equationt &equation)
virtual bool program_order_is_relaxed(partial_order_concurrencyt::event_it e1, partial_order_concurrencyt::event_it e2) const
Class that provides messages with a built-in verbosity 'level'.
std::vector< event_it > event_listt
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 (w...
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 c...
irep_idt address(event_it event) const
Produce an address ID for an 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.
eventst::const_iterator event_it
Inheriting the interface of symex_targett this class represents the SSA form of the input program as ...
The Boolean constant true.
Memory models for partial order concurrency.
bool simplify(exprt &expr, const namespacet &ns)
#define PRECONDITION(CONDITION)
API to expression classes.