CBMC
sat_path_enumerator.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Loop Acceleration
4 
5 Author: Matt Lewis
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_GOTO_INSTRUMENT_ACCELERATE_SAT_PATH_ENUMERATOR_H
13 #define CPROVER_GOTO_INSTRUMENT_ACCELERATE_SAT_PATH_ENUMERATOR_H
14 
15 #include <map>
16 
17 #include <util/symbol_table.h>
18 
20 
21 #include <analyses/natural_loops.h>
22 
23 #include "path_enumerator.h"
24 #include "path.h"
25 #include "cone_of_influence.h"
26 #include "acceleration_utils.h"
27 
29 {
30 public:
33  symbol_tablet &_symbol_table,
34  goto_functionst &_goto_functions,
35  goto_programt &_goto_program,
37  goto_programt::targett _loop_header,
40  symbol_table(_symbol_table),
42  goto_functions(_goto_functions),
43  goto_program(_goto_program),
44  loop(_loop),
45  loop_header(_loop_header),
48  {
50  build_fixed();
51  }
52 
53  bool next(patht &path);
54 
55 protected:
58 
59  void build_path(scratch_programt &scratch_program, patht &path);
60  void build_fixed();
61 
62  void record_path(scratch_programt &scratch_program);
63 
70 
71  typedef std::map<goto_programt::targett, exprt> distinguish_mapt;
72  typedef std::map<exprt, bool> distinguish_valuest;
73 
78  std::list<exprt> distinguishers;
81  std::list<distinguish_valuest> accelerated_paths;
82 };
83 
84 #endif // CPROVER_GOTO_INSTRUMENT_ACCELERATE_SAT_PATH_ENUMERATOR_H
path.h
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
acceleration_utilst
Definition: acceleration_utils.h:36
sat_path_enumeratort::distinguish_valuest
std::map< exprt, bool > distinguish_valuest
Definition: sat_path_enumerator.h:72
sat_path_enumeratort::find_distinguishing_points
void find_distinguishing_points()
Definition: sat_path_enumerator.cpp:86
path_enumerator.h
sat_path_enumeratort::loop_header
goto_programt::targett loop_header
Definition: sat_path_enumerator.h:69
acceleration_utils.h
sat_path_enumeratort::distinguish_mapt
std::map< goto_programt::targett, exprt > distinguish_mapt
Definition: sat_path_enumerator.h:71
sat_path_enumeratort
Definition: sat_path_enumerator.h:28
exprt
Base class for all expressions.
Definition: expr.h:55
sat_path_enumeratort::guard_manager
guard_managert & guard_manager
Definition: sat_path_enumerator.h:75
sat_path_enumeratort::next
bool next(patht &path)
Definition: sat_path_enumerator.cpp:25
sat_path_enumeratort::goto_functions
goto_functionst & goto_functions
Definition: sat_path_enumerator.h:66
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
guard_expr_managert
This is unused by this implementation of guards, but can be used by other implementations of the same...
Definition: guard_expr.h:19
path_enumeratort
Definition: path_enumerator.h:21
scratch_programt
Definition: scratch_program.h:61
sat_path_enumeratort::build_path
void build_path(scratch_programt &scratch_program, patht &path)
Definition: sat_path_enumerator.cpp:111
sat_path_enumeratort::sat_path_enumeratort
sat_path_enumeratort(message_handlert &message_handler, symbol_tablet &_symbol_table, goto_functionst &_goto_functions, goto_programt &_goto_program, natural_loops_mutablet::natural_loopt &_loop, goto_programt::targett _loop_header, guard_managert &guard_manager)
Definition: sat_path_enumerator.h:31
sat_path_enumeratort::distinguishers
std::list< exprt > distinguishers
Definition: sat_path_enumerator.h:78
loop_templatet
A loop, specified as a set of instructions.
Definition: loop_analysis.h:23
expr_sett
std::unordered_set< exprt, irep_hash > expr_sett
Definition: cone_of_influence.h:21
sat_path_enumeratort::accelerated_paths
std::list< distinguish_valuest > accelerated_paths
Definition: sat_path_enumerator.h:81
message_handlert
Definition: message.h:27
sat_path_enumeratort::fixed
goto_programt fixed
Definition: sat_path_enumerator.h:80
sat_path_enumeratort::loop
natural_loops_mutablet::natural_loopt & loop
Definition: sat_path_enumerator.h:68
goto_program.h
sat_path_enumeratort::message_handler
message_handlert & message_handler
Definition: sat_path_enumerator.h:56
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:24
patht
std::list< path_nodet > patht
Definition: path.h:44
sat_path_enumeratort::goto_program
goto_programt & goto_program
Definition: sat_path_enumerator.h:67
natural_loops.h
cone_of_influence.h
sat_path_enumeratort::record_path
void record_path(scratch_programt &scratch_program)
Definition: sat_path_enumerator.cpp:335
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
sat_path_enumeratort::modified
expr_sett modified
Definition: sat_path_enumerator.h:79
sat_path_enumeratort::build_fixed
void build_fixed()
Definition: sat_path_enumerator.cpp:189
sat_path_enumeratort::ns
namespacet ns
Definition: sat_path_enumerator.h:65
sat_path_enumeratort::distinguishing_points
distinguish_mapt distinguishing_points
Definition: sat_path_enumerator.h:77
sat_path_enumeratort::loop_counter
exprt loop_counter
Definition: sat_path_enumerator.h:76
symbol_table.h
Author: Diffblue Ltd.
sat_path_enumeratort::utils
acceleration_utilst utils
Definition: sat_path_enumerator.h:74
sat_path_enumeratort::symbol_table
symbol_tablet & symbol_table
Definition: sat_path_enumerator.h:64
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586