Skip to content

Commit 8d497eb

Browse files
Use vector instead of list for get_value_set result
vectors are generally more efficient than list, unless we use concatenation or insertion which doesn't appear to be case here.
1 parent 1e06eda commit 8d497eb

15 files changed

+31
-32
lines changed

src/goto-symex/postcondition.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,13 @@ bool postconditiont::is_used(
160160
else if(expr.id()==ID_dereference)
161161
{
162162
// aliasing may happen here
163-
value_setst::valuest expr_set =
163+
std::vector<exprt> expr_set =
164164
value_set.get_value_set(to_dereference_expr(expr).pointer(), ns);
165165
std::unordered_set<irep_idt> symbols;
166166

167-
for(value_setst::valuest::const_iterator
168-
it=expr_set.begin();
169-
it!=expr_set.end();
170-
it++)
167+
for(const exprt &e : expr_set)
171168
{
172-
const exprt tmp = get_original_name(*it);
169+
const exprt tmp = get_original_name(e);
173170
find_symbols(tmp, symbols);
174171
}
175172

src/goto-symex/precondition.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,12 @@ void preconditiont::compute_rec(exprt &dest)
112112

113113
// aliasing may happen here
114114

115-
value_setst::valuest expr_set = value_sets.get_values(
115+
const std::vector<exprt> expr_set = value_sets.get_values(
116116
SSA_step.source.function_id, target, deref_expr.pointer());
117117
std::unordered_set<irep_idt> symbols;
118118

119-
for(value_setst::valuest::const_iterator
120-
it=expr_set.begin();
121-
it!=expr_set.end();
122-
it++)
123-
find_symbols(*it, symbols);
119+
for(const exprt &e : expr_set)
120+
find_symbols(e, symbols);
124121

125122
if(symbols.find(lhs_identifier)!=symbols.end())
126123
{

src/goto-symex/symex_dereference_state.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void symex_dereference_statet::get_value_set(
109109
}
110110

111111
/// Just forwards a value-set query to `state.value_set`
112-
value_setst::valuest
112+
std::vector<exprt>
113113
symex_dereference_statet::get_value_set(const exprt &expr) const
114114
{
115115
return state.value_set.get_value_set(expr, ns);

src/goto-symex/symex_dereference_state.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ class symex_dereference_statet:
3434
goto_symext::statet &state;
3535
const namespacet &ns;
3636

37-
DEPRECATED(SINCE(2019, 05, 22, "use list returning version instead"))
37+
DEPRECATED(SINCE(2019, 05, 22, "use vector returning version instead"))
3838
void get_value_set(const exprt &expr, value_setst::valuest &value_set)
3939
const override;
4040

41-
value_setst::valuest get_value_set(const exprt &expr) const override;
41+
std::vector<exprt> get_value_set(const exprt &expr) const override;
4242

4343
const symbolt *get_or_create_failed_symbol(const exprt &expr) override;
4444
};

src/pointer-analysis/dereference_callback.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ class dereference_callbackt
2929
public:
3030
virtual ~dereference_callbackt() = default;
3131

32-
DEPRECATED(SINCE(2019, 05, 22, "use list returning version instead"))
32+
DEPRECATED(SINCE(2019, 05, 22, "use vector returning version instead"))
3333
virtual void
3434
get_value_set(const exprt &expr, value_setst::valuest &value_set) const = 0;
3535

36-
virtual value_setst::valuest get_value_set(const exprt &expr) const = 0;
36+
virtual std::vector<exprt> get_value_set(const exprt &expr) const = 0;
3737

3838
virtual const symbolt *get_or_create_failed_symbol(const exprt &expr) = 0;
3939
};

src/pointer-analysis/goto_program_dereference.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ void goto_program_dereferencet::get_value_set(
151151
/// expression \p expr.
152152
/// \param expr: an expression
153153
/// \return the value set
154-
std::list<exprt>
154+
std::vector<exprt>
155155
goto_program_dereferencet::get_value_set(const exprt &expr) const
156156
{
157157
return value_sets.get_values(current_function, current_target, expr);

src/pointer-analysis/goto_program_dereference.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ class goto_program_dereferencet:protected dereference_callbackt
6565

6666
const symbolt *get_or_create_failed_symbol(const exprt &expr) override;
6767

68-
DEPRECATED(SINCE(2019, 05, 22, "use list returning version instead"))
68+
DEPRECATED(SINCE(2019, 05, 22, "use vector returning version instead"))
6969
void
7070
get_value_set(const exprt &expr, value_setst::valuest &dest) const override;
7171

72-
std::list<exprt> get_value_set(const exprt &expr) const override;
72+
std::vector<exprt> get_value_set(const exprt &expr) const override;
7373

7474
void dereference_instruction(
7575
goto_programt::targett target,

src/pointer-analysis/value_set.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ void value_sett::get_value_set(
371371
#endif
372372
}
373373

374-
std::list<exprt>
374+
std::vector<exprt>
375375
value_sett::get_value_set(exprt expr, const namespacet &ns) const
376376
{
377377
const object_mapt object_map = get_value_set(std::move(expr), ns, false);

src/pointer-analysis/value_set.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ class value_sett
275275
/// \param expr: query expression
276276
/// \param ns: global namespace
277277
/// \return list of expressions that `expr` may point to
278-
std::list<exprt> get_value_set(exprt expr, const namespacet &ns) const;
278+
std::vector<exprt> get_value_set(exprt expr, const namespacet &ns) const;
279279

280280
/// Appears to be unimplemented.
281281
DEPRECATED(SINCE(2019, 05, 22, "Unimplemented"))

src/pointer-analysis/value_set_analysis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class value_set_analysis_templatet:
7676
}
7777

7878
// interface value_sets
79-
std::list<exprt>
79+
std::vector<exprt>
8080
get_values(const irep_idt &, locationt l, const exprt &expr) override
8181
{
8282
return (*this)[l].value_set.get_value_set(expr, baset::ns);

src/pointer-analysis/value_set_analysis_fi.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ bool value_set_analysis_fit::check_type(const typet &type)
196196
return false;
197197
}
198198

199-
std::list<exprt> value_set_analysis_fit::get_values(
199+
std::vector<exprt> value_set_analysis_fit::get_values(
200200
const irep_idt &function_id,
201201
flow_insensitive_analysis_baset::locationt l,
202202
const exprt &expr)

src/pointer-analysis/value_set_analysis_fi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class value_set_analysis_fit:
7474
state.value_set.get_value_set(expr, dest, ns);
7575
}
7676

77-
std::list<exprt> get_values(
77+
std::vector<exprt> get_values(
7878
const irep_idt &function_id,
7979
locationt l,
8080
const exprt &expr) override;

src/pointer-analysis/value_set_fi.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,14 @@ void value_set_fit::get_value_set(
298298
std::list<exprt> &value_set,
299299
const namespacet &ns) const
300300
{
301-
value_set = get_value_set(expr, ns);
301+
std::vector<exprt> result_as_vector = get_value_set(expr, ns);
302+
std::move(
303+
result_as_vector.begin(),
304+
result_as_vector.end(),
305+
std::back_inserter(value_set));
302306
}
303307

304-
std::list<exprt>
308+
std::vector<exprt>
305309
value_set_fit::get_value_set(const exprt &expr, const namespacet &ns) const
306310
{
307311
object_mapt object_map;
@@ -343,7 +347,7 @@ value_set_fit::get_value_set(const exprt &expr, const namespacet &ns) const
343347
flat_map.write()[it->first]=it->second;
344348
}
345349

346-
std::list<exprt> result;
350+
std::vector<exprt> result;
347351
forall_objects(fit, flat_map.read())
348352
result.push_back(to_expr(*fit));
349353

src/pointer-analysis/value_set_fi.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,14 @@ class value_set_fit
205205
typedef std::unordered_set<idt, string_hash> assign_recursion_sett;
206206
#endif
207207

208-
DEPRECATED(SINCE(2019, 05, 22, "Use the version returning object_mapt instead"))
208+
DEPRECATED(SINCE(2019, 05, 22, "Use the version returning vector instead"))
209209
void get_value_set(
210210
const exprt &expr,
211211
std::list<exprt> &dest,
212212
const namespacet &ns) const;
213213

214-
std::list<exprt> get_value_set(const exprt &expr, const namespacet &ns) const;
214+
std::vector<exprt>
215+
get_value_set(const exprt &expr, const namespacet &ns) const;
215216

216217
expr_sett &get(
217218
const idt &identifier,

src/pointer-analysis/value_sets.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ class value_setst
2828
typedef std::list<exprt> valuest;
2929

3030
// this is not const to allow a lazy evaluation
31-
DEPRECATED(SINCE(2019, 05, 22, "use list returning version instead"))
31+
DEPRECATED(SINCE(2019, 05, 22, "use vector returning version instead"))
3232
virtual void get_values(
3333
const irep_idt &function_id,
3434
goto_programt::const_targett l,
3535
const exprt &expr,
3636
valuest &dest) = 0;
3737

3838
// this is not const to allow a lazy evaluation
39-
virtual valuest get_values(
39+
virtual std::vector<exprt> get_values(
4040
const irep_idt &function_id,
4141
goto_programt::const_targett l,
4242
const exprt &expr) = 0;

0 commit comments

Comments
 (0)