Skip to content

Commit 1d13bfa

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 e5c0957 commit 1d13bfa

15 files changed

+28
-29
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
@@ -105,7 +105,7 @@ void symex_dereference_statet::get_value_set(
105105
}
106106

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

src/goto-symex/symex_dereference_state.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class symex_dereference_statet:
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class dereference_callbackt
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
@@ -370,7 +370,7 @@ void value_sett::get_value_set(
370370
#endif
371371
}
372372

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

src/pointer-analysis/value_set.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,8 @@ class value_sett
276276
/// \param expr: query expression
277277
/// \param ns: global namespace
278278
/// \return list of expressions that `expr` may point to
279-
std::list<exprt> get_value_set(exprt expr, const namespacet &ns) const;
279+
std::vector<exprt>
280+
get_value_set(exprt expr, const namespacet &ns) const;
280281

281282
/// Appears to be unimplemented.
282283
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
@@ -297,10 +297,14 @@ void value_set_fit::get_value_set(
297297
std::list<exprt> &value_set,
298298
const namespacet &ns) const
299299
{
300-
value_set = get_value_set(expr, ns);
300+
std::vector<exprt> result_as_vector = get_value_set(expr, ns);
301+
std::move(
302+
result_as_vector.begin(),
303+
result_as_vector.end(),
304+
std::back_inserter(value_set));
301305
}
302306

303-
std::list<exprt>
307+
std::vector<exprt>
304308
value_set_fit::get_value_set(const exprt &expr, const namespacet &ns) const
305309
{
306310
object_mapt object_map;
@@ -342,7 +346,7 @@ value_set_fit::get_value_set(const exprt &expr, const namespacet &ns) const
342346
flat_map.write()[it->first]=it->second;
343347
}
344348

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

src/pointer-analysis/value_set_fi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,13 @@ 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> get_value_set(const exprt &expr, const namespacet &ns) const;
215215

216216
expr_sett &get(
217217
const idt &identifier,

src/pointer-analysis/value_sets.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class value_setst
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)