CBMC
disjunctive_polynomial_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_DISJUNCTIVE_POLYNOMIAL_ACCELERATION_H
13 #define CPROVER_GOTO_INSTRUMENT_ACCELERATE_DISJUNCTIVE_POLYNOMIAL_ACCELERATION_H
14 
15 #include <map>
16 #include <set>
17 
18 #include <util/symbol_table.h>
19 
21 
22 #include <analyses/natural_loops.h>
23 
24 #include "path.h"
25 #include "cone_of_influence.h"
26 #include "acceleration_utils.h"
27 
28 class path_acceleratort;
29 
31 {
32 public:
35  symbol_tablet &_symbol_table,
36  goto_functionst &_goto_functions,
37  goto_programt &_goto_program,
39  goto_programt::targett _loop_header,
42  symbol_table(_symbol_table),
44  goto_functions(_goto_functions),
45  goto_program(_goto_program),
47  loop(_loop),
48  loop_header(_loop_header),
50  {
53  build_fixed();
55  }
56 
57  bool accelerate(path_acceleratort &accelerator);
58 
59  bool fit_polynomial(
60  exprt &target,
61  polynomialt &polynomial,
62  patht &path);
63 
64  bool find_path(patht &path);
65 
66 protected:
68 
69  void assert_for_values(
70  scratch_programt &program,
71  std::map<exprt, exprt> &values,
72  std::set<std::pair<expr_listt, exprt> > &coefficients,
73  int num_unwindings,
74  goto_programt &loop_body,
75  exprt &target);
76  void cone_of_influence(const exprt &target, expr_sett &cone);
77 
79 
80  void build_path(scratch_programt &scratch_program, patht &path);
81  void build_fixed();
82 
83  void record_path(scratch_programt &scratch_program);
84 
85  bool depends_on_array(const exprt &e, exprt &array);
86 
94 
95  typedef std::map<goto_programt::targett, exprt> distinguish_mapt;
96  typedef std::map<exprt, bool> distinguish_valuest;
97 
101  std::list<symbol_exprt> distinguishers;
104  std::list<distinguish_valuest> accelerated_paths;
105 };
106 
107 // NOLINTNEXTLINE(whitespace/line_length)
108 #endif // CPROVER_GOTO_INSTRUMENT_ACCELERATE_DISJUNCTIVE_POLYNOMIAL_ACCELERATION_H
path.h
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
polynomialt
Definition: polynomial.h:41
disjunctive_polynomial_accelerationt::utils
acceleration_utilst utils
Definition: disjunctive_polynomial_acceleration.h:98
disjunctive_polynomial_accelerationt::build_path
void build_path(scratch_programt &scratch_program, patht &path)
Definition: disjunctive_polynomial_acceleration.cpp:762
acceleration_utilst
Definition: acceleration_utils.h:36
disjunctive_polynomial_accelerationt::distinguish_mapt
std::map< goto_programt::targett, exprt > distinguish_mapt
Definition: disjunctive_polynomial_acceleration.h:95
disjunctive_polynomial_accelerationt::distinguish_valuest
std::map< exprt, bool > distinguish_valuest
Definition: disjunctive_polynomial_acceleration.h:96
disjunctive_polynomial_accelerationt::goto_functions
goto_functionst & goto_functions
Definition: disjunctive_polynomial_acceleration.h:89
disjunctive_polynomial_accelerationt::find_path
bool find_path(patht &path)
Definition: disjunctive_polynomial_acceleration.cpp:325
acceleration_utils.h
disjunctive_polynomial_accelerationt::goto_program
goto_programt & goto_program
Definition: disjunctive_polynomial_acceleration.h:90
disjunctive_polynomial_accelerationt::find_distinguishing_points
void find_distinguishing_points()
Definition: disjunctive_polynomial_acceleration.cpp:739
disjunctive_polynomial_accelerationt::message_handler
message_handlert & message_handler
Definition: disjunctive_polynomial_acceleration.h:67
disjunctive_polynomial_accelerationt::assert_for_values
void assert_for_values(scratch_programt &program, std::map< exprt, exprt > &values, std::set< std::pair< expr_listt, exprt > > &coefficients, int num_unwindings, goto_programt &loop_body, exprt &target)
Definition: disjunctive_polynomial_acceleration.cpp:634
exprt
Base class for all expressions.
Definition: expr.h:55
disjunctive_polynomial_accelerationt::disjunctive_polynomial_accelerationt
disjunctive_polynomial_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, guard_managert &guard_manager)
Definition: disjunctive_polynomial_acceleration.h:33
acceleration_utilst::find_modified
void find_modified(const patht &path, expr_sett &modified)
Definition: acceleration_utils.cpp:76
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
disjunctive_polynomial_accelerationt::loop_header
goto_programt::targett loop_header
Definition: disjunctive_polynomial_acceleration.h:93
disjunctive_polynomial_accelerationt::loop_counter
exprt loop_counter
Definition: disjunctive_polynomial_acceleration.h:99
scratch_programt
Definition: scratch_program.h:61
nil_exprt
The NIL expression.
Definition: std_expr.h:3025
disjunctive_polynomial_accelerationt::modified
expr_sett modified
Definition: disjunctive_polynomial_acceleration.h:102
loop_templatet
A loop, specified as a set of instructions.
Definition: loop_analysis.h:23
disjunctive_polynomial_accelerationt::symbol_table
symbol_tablet & symbol_table
Definition: disjunctive_polynomial_acceleration.h:87
path_acceleratort
Definition: accelerator.h:26
expr_sett
std::unordered_set< exprt, irep_hash > expr_sett
Definition: cone_of_influence.h:21
message_handlert
Definition: message.h:27
disjunctive_polynomial_accelerationt::accelerate
bool accelerate(path_acceleratort &accelerator)
Definition: disjunctive_polynomial_acceleration.cpp:37
disjunctive_polynomial_accelerationt::loop
natural_loops_mutablet::natural_loopt & loop
Definition: disjunctive_polynomial_acceleration.h:92
disjunctive_polynomial_accelerationt::distinguishing_points
distinguish_mapt distinguishing_points
Definition: disjunctive_polynomial_acceleration.h:100
disjunctive_polynomial_accelerationt::guard_manager
guard_managert & guard_manager
Definition: disjunctive_polynomial_acceleration.h:91
disjunctive_polynomial_accelerationt
Definition: disjunctive_polynomial_acceleration.h:30
goto_program.h
disjunctive_polynomial_accelerationt::ns
namespacet ns
Definition: disjunctive_polynomial_acceleration.h:88
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:24
disjunctive_polynomial_accelerationt::build_fixed
void build_fixed()
Definition: disjunctive_polynomial_acceleration.cpp:840
disjunctive_polynomial_accelerationt::depends_on_array
bool depends_on_array(const exprt &e, exprt &array)
Definition: disjunctive_polynomial_acceleration.cpp:1001
patht
std::list< path_nodet > patht
Definition: path.h:44
disjunctive_polynomial_accelerationt::fixed
goto_programt fixed
Definition: disjunctive_polynomial_acceleration.h:103
natural_loops.h
cone_of_influence.h
disjunctive_polynomial_accelerationt::fit_polynomial
bool fit_polynomial(exprt &target, polynomialt &polynomial, patht &path)
Definition: disjunctive_polynomial_acceleration.cpp:386
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
disjunctive_polynomial_accelerationt::record_path
void record_path(scratch_programt &scratch_program)
Definition: disjunctive_polynomial_acceleration.cpp:986
disjunctive_polynomial_accelerationt::distinguishers
std::list< symbol_exprt > distinguishers
Definition: disjunctive_polynomial_acceleration.h:101
disjunctive_polynomial_accelerationt::accelerated_paths
std::list< distinguish_valuest > accelerated_paths
Definition: disjunctive_polynomial_acceleration.h:104
symbol_table.h
Author: Diffblue Ltd.
disjunctive_polynomial_accelerationt::cone_of_influence
void cone_of_influence(const exprt &target, expr_sett &cone)
Definition: disjunctive_polynomial_acceleration.cpp:731
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586