CBMC
enumerating_loop_acceleration.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_ENUMERATING_LOOP_ACCELERATION_H
13 #define CPROVER_GOTO_INSTRUMENT_ACCELERATE_ENUMERATING_LOOP_ACCELERATION_H
14 
15 #include <memory>
16 
17 #include <util/make_unique.h>
18 
20 
21 #include <analyses/natural_loops.h>
22 
23 #include "polynomial_accelerator.h"
24 #include "path_enumerator.h"
25 #include "sat_path_enumerator.h"
26 
27 
29 {
30 public:
32  message_handlert &message_handler,
33  symbol_tablet &_symbol_table,
34  goto_functionst &_goto_functions,
35  goto_programt &_goto_program,
37  goto_programt::targett _loop_header,
38  int _path_limit,
40  : symbol_table(_symbol_table),
41  goto_functions(_goto_functions),
42  goto_program(_goto_program),
43  loop(_loop),
44  loop_header(_loop_header),
47  message_handler,
51  path_limit(_path_limit),
53  message_handler,
57  loop,
60  {
61  }
62 
63  bool accelerate(path_acceleratort &accelerator);
64 
65 protected:
74 
75  std::unique_ptr<path_enumeratort> path_enumerator;
76 };
77 
78 #endif // CPROVER_GOTO_INSTRUMENT_ACCELERATE_ENUMERATING_LOOP_ACCELERATION_H
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
enumerating_loop_accelerationt::symbol_table
symbol_tablet & symbol_table
Definition: enumerating_loop_acceleration.h:66
path_enumerator.h
sat_path_enumeratort
Definition: sat_path_enumerator.h:28
enumerating_loop_accelerationt::loop
natural_loops_mutablet::natural_loopt & loop
Definition: enumerating_loop_acceleration.h:69
enumerating_loop_accelerationt::path_enumerator
std::unique_ptr< path_enumeratort > path_enumerator
Definition: enumerating_loop_acceleration.h:75
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
util_make_unique
std::unique_ptr< T > util_make_unique(Ts &&... ts)
Definition: make_unique.h:19
enumerating_loop_accelerationt::enumerating_loop_accelerationt
enumerating_loop_accelerationt(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, int _path_limit, guard_managert &guard_manager)
Definition: enumerating_loop_acceleration.h:31
make_unique.h
enumerating_loop_accelerationt::goto_program
goto_programt & goto_program
Definition: enumerating_loop_acceleration.h:68
enumerating_loop_accelerationt::goto_functions
goto_functionst & goto_functions
Definition: enumerating_loop_acceleration.h:67
enumerating_loop_accelerationt::polynomial_accelerator
polynomial_acceleratort polynomial_accelerator
Definition: enumerating_loop_acceleration.h:72
loop_templatet
A loop, specified as a set of instructions.
Definition: loop_analysis.h:23
path_acceleratort
Definition: accelerator.h:26
message_handlert
Definition: message.h:27
goto_program.h
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:24
sat_path_enumerator.h
enumerating_loop_accelerationt::path_limit
int path_limit
Definition: enumerating_loop_acceleration.h:73
enumerating_loop_accelerationt::loop_header
goto_programt::targett loop_header
Definition: enumerating_loop_acceleration.h:70
natural_loops.h
polynomial_acceleratort
Definition: polynomial_accelerator.h:30
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
enumerating_loop_accelerationt::accelerate
bool accelerate(path_acceleratort &accelerator)
Definition: enumerating_loop_acceleration.cpp:16
polynomial_accelerator.h
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586
enumerating_loop_accelerationt::guard_manager
guard_managert & guard_manager
Definition: enumerating_loop_acceleration.h:71
enumerating_loop_accelerationt
Definition: enumerating_loop_acceleration.h:28