Skip to content

Commit b3b94a6

Browse files
authored
Merge pull request #4511 from diffblue/functions-is-a-lowering
functionst is a lowering, not a flattening
2 parents 1f5a62f + f3b2587 commit b3b94a6

File tree

5 files changed

+31
-34
lines changed

5 files changed

+31
-34
lines changed

src/solvers/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,12 @@ SRC = $(BOOLEFORCE_SRC) \
134134
flattening/bv_utils.cpp \
135135
flattening/c_bit_field_replacement_type.cpp \
136136
flattening/equality.cpp \
137-
flattening/functions.cpp \
138137
flattening/pointer_logic.cpp \
139138
floatbv/float_bv.cpp \
140139
floatbv/float_utils.cpp \
141140
floatbv/float_approximation.cpp \
142141
lowering/byte_operators.cpp \
142+
lowering/functions.cpp \
143143
lowering/popcount.cpp \
144144
bdd/miniBDD/miniBDD.cpp \
145145
prop/bdd_expr.cpp \

src/solvers/flattening/boolbv.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ Author: Daniel Kroening, [email protected]
1919
#include <util/mp_arith.h>
2020
#include <util/optional.h>
2121

22+
#include <solvers/lowering/functions.h>
23+
2224
#include "bv_utils.h"
2325
#include "boolbv_width.h"
2426
#include "boolbv_map.h"
2527
#include "arrays.h"
26-
#include "functions.h"
2728

2829
class extractbit_exprt;
2930
class extractbits_exprt;

src/solvers/flattening/functions.cpp renamed to src/solvers/lowering/functions.cpp

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,33 @@ Author: Daniel Kroening, [email protected]
88

99
#include "functions.h"
1010

11-
#include <util/std_types.h>
1211
#include <util/std_expr.h>
12+
#include <util/std_types.h>
1313

14-
void functionst::record(
15-
const function_application_exprt &function_application)
14+
void functionst::record(const function_application_exprt &function_application)
1615
{
17-
function_map[function_application.function()].applications.
18-
insert(function_application);
16+
function_map[function_application.function()].applications.insert(
17+
function_application);
1918
}
2019

2120
void functionst::add_function_constraints()
2221
{
23-
for(function_mapt::const_iterator it=
24-
function_map.begin();
25-
it!=function_map.end();
26-
it++)
27-
add_function_constraints(it->second);
22+
for(const auto &function : function_map)
23+
add_function_constraints(function.second);
2824
}
2925

30-
exprt functionst::arguments_equal(const exprt::operandst &o1,
31-
const exprt::operandst &o2)
26+
exprt functionst::arguments_equal(
27+
const exprt::operandst &o1,
28+
const exprt::operandst &o2)
3229
{
3330
PRECONDITION(o1.size() == o2.size());
3431

3532
exprt::operandst conjuncts;
3633
conjuncts.reserve(o1.size());
3734

38-
for(std::size_t i=0; i<o1.size(); i++)
35+
for(std::size_t i = 0; i < o1.size(); i++)
3936
{
40-
exprt lhs=o1[i];
37+
exprt lhs = o1[i];
4138
exprt rhs = typecast_exprt::conditional_cast(o2[i], o1[i].type());
4239
conjuncts.push_back(equal_exprt(lhs, rhs));
4340
}
@@ -50,21 +47,20 @@ void functionst::add_function_constraints(const function_infot &info)
5047
// Do Ackermann's function reduction.
5148
// This is quadratic, slow, and needs to be modernized.
5249

53-
for(std::set<function_application_exprt>::const_iterator
54-
it1=info.applications.begin();
55-
it1!=info.applications.end();
50+
for(std::set<function_application_exprt>::const_iterator it1 =
51+
info.applications.begin();
52+
it1 != info.applications.end();
5653
it1++)
5754
{
58-
for(std::set<function_application_exprt>::const_iterator
59-
it2=info.applications.begin();
60-
it2!=it1;
55+
for(std::set<function_application_exprt>::const_iterator it2 =
56+
info.applications.begin();
57+
it2 != it1;
6158
it2++)
6259
{
63-
exprt arguments_equal_expr=
60+
exprt arguments_equal_expr =
6461
arguments_equal(it1->arguments(), it2->arguments());
6562

66-
implies_exprt implication(arguments_equal_expr,
67-
equal_exprt(*it1, *it2));
63+
implies_exprt implication(arguments_equal_expr, equal_exprt(*it1, *it2));
6864

6965
prop_conv.set_to_true(implication);
7066
}

src/solvers/flattening/functions.h renamed to src/solvers/lowering/functions.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ Author: Daniel Kroening, [email protected]
99
/// \file
1010
/// Uninterpreted Functions
1111

12-
#ifndef CPROVER_SOLVERS_FLATTENING_FUNCTIONS_H
13-
#define CPROVER_SOLVERS_FLATTENING_FUNCTIONS_H
12+
#ifndef CPROVER_SOLVERS_LOWERING_FUNCTIONS_H
13+
#define CPROVER_SOLVERS_LOWERING_FUNCTIONS_H
1414

1515
#include <map>
1616
#include <set>
@@ -22,15 +22,15 @@ Author: Daniel Kroening, [email protected]
2222
class functionst
2323
{
2424
public:
25-
explicit functionst(prop_convt &_prop_conv):
26-
prop_conv(_prop_conv) { }
25+
explicit functionst(prop_convt &_prop_conv) : prop_conv(_prop_conv)
26+
{
27+
}
2728

2829
virtual ~functionst()
2930
{
3031
}
3132

32-
void record(
33-
const function_application_exprt &function_application);
33+
void record(const function_application_exprt &function_application);
3434

3535
virtual void post_process()
3636
{
@@ -53,8 +53,7 @@ class functionst
5353
virtual void add_function_constraints();
5454
virtual void add_function_constraints(const function_infot &info);
5555

56-
exprt arguments_equal(const exprt::operandst &o1,
57-
const exprt::operandst &o2);
56+
exprt arguments_equal(const exprt::operandst &o1, const exprt::operandst &o2);
5857
};
5958

60-
#endif // CPROVER_SOLVERS_FLATTENING_FUNCTIONS_H
59+
#endif // CPROVER_SOLVERS_LOWERING_FUNCTIONS_H
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
solvers
12
solvers/lowering
23
util

0 commit comments

Comments
 (0)