cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
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 <
goto-programs/goto_program.h
>
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
28
class
disjunctive_polynomial_accelerationt
29
{
30
public
:
31
disjunctive_polynomial_accelerationt
(
32
message_handlert
&
message_handler
,
33
symbol_table_baset
&_symbol_table,
34
goto_functionst
&_goto_functions,
35
goto_programt
&_goto_program,
36
natural_loops_mutablet::natural_loopt
&_loop,
37
goto_programt::targett
_loop_header,
38
guard_managert
&
guard_manager
)
39
:
message_handler
(
message_handler
),
40
symbol_table
(_symbol_table),
41
ns
(
symbol_table
),
42
goto_functions
(_goto_functions),
43
goto_program
(_goto_program),
44
guard_manager
(
guard_manager
),
45
loop
(_loop),
46
loop_header
(_loop_header),
47
utils
(
symbol_table
,
message_handler
,
goto_functions
,
loop_counter
)
48
{
49
loop_counter
=
nil_exprt
();
50
find_distinguishing_points
();
51
build_fixed
();
52
utils
.find_modified(
loop
,
modified
);
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
:
65
message_handlert
&
message_handler
;
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
76
void
find_distinguishing_points
();
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
85
symbol_table_baset
&
symbol_table
;
86
namespacet
ns
;
87
goto_functionst
&
goto_functions
;
88
goto_programt
&
goto_program
;
89
guard_managert
&
guard_manager
;
90
natural_loops_mutablet::natural_loopt
&
loop
;
91
goto_programt::targett
loop_header
;
92
93
typedef
std::
94
map<goto_programt::targett, exprt, goto_programt::target_less_than>
95
distinguish_mapt
;
96
typedef
std::map<exprt, bool>
distinguish_valuest
;
97
98
acceleration_utilst
utils
;
99
exprt
loop_counter
;
100
distinguish_mapt
distinguishing_points
;
101
std::list<symbol_exprt>
distinguishers
;
102
expr_sett
modified
;
103
goto_programt
fixed
;
104
std::list<distinguish_valuest>
accelerated_paths
;
105
};
106
107
// NOLINTNEXTLINE(whitespace/line_length)
108
#endif
// CPROVER_GOTO_INSTRUMENT_ACCELERATE_DISJUNCTIVE_POLYNOMIAL_ACCELERATION_H
acceleration_utils.h
Loop Acceleration.
acceleration_utilst
Definition
acceleration_utils.h:35
disjunctive_polynomial_accelerationt::goto_functions
goto_functionst & goto_functions
Definition
disjunctive_polynomial_acceleration.h:87
disjunctive_polynomial_accelerationt::accelerated_paths
std::list< distinguish_valuest > accelerated_paths
Definition
disjunctive_polynomial_acceleration.h:104
disjunctive_polynomial_accelerationt::guard_manager
guard_managert & guard_manager
Definition
disjunctive_polynomial_acceleration.h:89
disjunctive_polynomial_accelerationt::distinguishers
std::list< symbol_exprt > distinguishers
Definition
disjunctive_polynomial_acceleration.h:101
disjunctive_polynomial_accelerationt::depends_on_array
bool depends_on_array(const exprt &e, exprt &array)
Definition
disjunctive_polynomial_acceleration.cpp:1001
disjunctive_polynomial_accelerationt::symbol_table
symbol_table_baset & symbol_table
Definition
disjunctive_polynomial_acceleration.h:85
disjunctive_polynomial_accelerationt::modified
expr_sett modified
Definition
disjunctive_polynomial_acceleration.h:102
disjunctive_polynomial_accelerationt::build_fixed
void build_fixed()
Definition
disjunctive_polynomial_acceleration.cpp:840
disjunctive_polynomial_accelerationt::message_handler
message_handlert & message_handler
Definition
disjunctive_polynomial_acceleration.h:65
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
disjunctive_polynomial_accelerationt::loop
natural_loops_mutablet::natural_loopt & loop
Definition
disjunctive_polynomial_acceleration.h:90
disjunctive_polynomial_accelerationt::record_path
void record_path(scratch_programt &scratch_program)
Definition
disjunctive_polynomial_acceleration.cpp:986
disjunctive_polynomial_accelerationt::loop_header
goto_programt::targett loop_header
Definition
disjunctive_polynomial_acceleration.h:91
disjunctive_polynomial_accelerationt::goto_program
goto_programt & goto_program
Definition
disjunctive_polynomial_acceleration.h:88
disjunctive_polynomial_accelerationt::fit_polynomial
bool fit_polynomial(exprt &target, polynomialt &polynomial, patht &path)
Definition
disjunctive_polynomial_acceleration.cpp:386
disjunctive_polynomial_accelerationt::accelerate
bool accelerate(path_acceleratort &accelerator)
Definition
disjunctive_polynomial_acceleration.cpp:37
disjunctive_polynomial_accelerationt::fixed
goto_programt fixed
Definition
disjunctive_polynomial_acceleration.h:103
disjunctive_polynomial_accelerationt::find_path
bool find_path(patht &path)
Definition
disjunctive_polynomial_acceleration.cpp:325
disjunctive_polynomial_accelerationt::distinguishing_points
distinguish_mapt distinguishing_points
Definition
disjunctive_polynomial_acceleration.h:100
disjunctive_polynomial_accelerationt::distinguish_mapt
std::map< goto_programt::targett, exprt, goto_programt::target_less_than > distinguish_mapt
Definition
disjunctive_polynomial_acceleration.h:95
disjunctive_polynomial_accelerationt::cone_of_influence
void cone_of_influence(const exprt &target, expr_sett &cone)
Definition
disjunctive_polynomial_acceleration.cpp:731
disjunctive_polynomial_accelerationt::ns
namespacet ns
Definition
disjunctive_polynomial_acceleration.h:86
disjunctive_polynomial_accelerationt::find_distinguishing_points
void find_distinguishing_points()
Definition
disjunctive_polynomial_acceleration.cpp:739
disjunctive_polynomial_accelerationt::loop_counter
exprt loop_counter
Definition
disjunctive_polynomial_acceleration.h:99
disjunctive_polynomial_accelerationt::build_path
void build_path(scratch_programt &scratch_program, patht &path)
Definition
disjunctive_polynomial_acceleration.cpp:762
disjunctive_polynomial_accelerationt::utils
acceleration_utilst utils
Definition
disjunctive_polynomial_acceleration.h:98
disjunctive_polynomial_accelerationt::distinguish_valuest
std::map< exprt, bool > distinguish_valuest
Definition
disjunctive_polynomial_acceleration.h:96
disjunctive_polynomial_accelerationt::disjunctive_polynomial_accelerationt
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)
Definition
disjunctive_polynomial_acceleration.h:31
exprt
Base class for all expressions.
Definition
expr.h:57
goto_functionst
A collection of goto functions.
Definition
goto_functions.h:25
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition
goto_program.h:72
goto_programt::targett
instructionst::iterator targett
Definition
goto_program.h:613
message_handlert
Definition
message.h:27
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition
namespace.h:91
natural_loops_templatet< goto_programt, goto_programt::targett, goto_programt::target_less_than >::natural_loopt
parentt::loopt natural_loopt
Definition
natural_loops.h:53
nil_exprt
The NIL expression.
Definition
std_expr.h:3134
path_acceleratort
Definition
accelerator.h:27
polynomialt
Definition
polynomial.h:42
scratch_programt
Definition
scratch_program.h:61
symbol_table_baset
The symbol table base class interface.
Definition
symbol_table_base.h:23
cone_of_influence.h
Loop Acceleration.
expr_sett
std::unordered_set< exprt, irep_hash > expr_sett
Definition
cone_of_influence.h:21
goto_program.h
Concrete Goto Program.
guard_managert
guard_expr_managert guard_managert
Definition
guard.h:28
natural_loops.h
Compute natural loops in a goto_function.
path.h
Loop Acceleration.
patht
std::list< path_nodet > patht
Definition
path.h:44
goto-instrument
accelerate
disjunctive_polynomial_acceleration.h
Generated by
1.17.0