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 
19 
20 #include <analyses/natural_loops.h>
21 
22 #include "path.h"
23 #include "cone_of_influence.h"
24 #include "acceleration_utils.h"
25 
26 class path_acceleratort;
27 
29 {
30 public:
33  symbol_table_baset &_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),
45  loop(_loop),
46  loop_header(_loop_header),
48  {
51  build_fixed();
53  }
54 
55  bool accelerate(path_acceleratort &accelerator);
56 
57  bool fit_polynomial(
58  exprt &target,
59  polynomialt &polynomial,
60  patht &path);
61 
62  bool find_path(patht &path);
63 
64 protected:
66 
67  void assert_for_values(
68  scratch_programt &program,
69  std::map<exprt, exprt> &values,
70  std::set<std::pair<expr_listt, exprt> > &coefficients,
71  int num_unwindings,
72  goto_programt &loop_body,
73  exprt &target);
74  void cone_of_influence(const exprt &target, expr_sett &cone);
75 
77 
78  void build_path(scratch_programt &scratch_program, patht &path);
79  void build_fixed();
80 
81  void record_path(scratch_programt &scratch_program);
82 
83  bool depends_on_array(const exprt &e, exprt &array);
84 
92 
93  typedef std::
94  map<goto_programt::targett, exprt, goto_programt::target_less_than>
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
Loop Acceleration.
void find_modified(const patht &path, expr_sett &modified)
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)
natural_loops_mutablet::natural_loopt & loop
void record_path(scratch_programt &scratch_program)
bool fit_polynomial(exprt &target, polynomialt &polynomial, patht &path)
std::map< goto_programt::targett, exprt, goto_programt::target_less_than > distinguish_mapt
void cone_of_influence(const exprt &target, expr_sett &cone)
void build_path(scratch_programt &scratch_program, patht &path)
disjunctive_polynomial_accelerationt(message_handlert &message_handler, symbol_table_baset &_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)
Base class for all expressions.
Definition: expr.h:56
A collection of goto functions.
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:73
instructionst::iterator targett
Definition: goto_program.h:614
A loop, specified as a set of instructions.
Definition: loop_analysis.h:24
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:94
The NIL expression.
Definition: std_expr.h:3073
The symbol table base class interface.
Loop Acceleration.
std::unordered_set< exprt, irep_hash > expr_sett
Concrete Goto Program.
Compute natural loops in a goto_function.
Loop Acceleration.
std::list< path_nodet > patht
Definition: path.h:44
This is unused by this implementation of guards, but can be used by other implementations of the same...
Definition: guard_expr.h:20