Skip to content

Commit 5792ff1

Browse files
Martin Brainmartin
authored andcommitted
Simplify arguments to function calls.
1 parent b88e678 commit 5792ff1

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

src/goto-analyzer/static_simplifier.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,11 @@ void static_simplifiert<analyzerT>::simplify_program()
120120
unsigned assumes;
121121
unsigned gotos;
122122
unsigned assigns;
123+
unsigned function_calls;
123124
};
124125

125-
counters simplified = {0,0,0,0};
126-
counters unmodified = {0,0,0,0};
126+
counters simplified = {0,0,0,0,0};
127+
counters unmodified = {0,0,0,0,0};
127128

128129
Forall_goto_functions(f_it, goto_functions)
129130
{
@@ -163,6 +164,30 @@ void static_simplifiert<analyzerT>::simplify_program()
163164
assign.rhs() = simplified_rhs;
164165
i_it->code = assign;
165166
}
167+
else if (i_it->is_function_call())
168+
{
169+
unsigned result = 0;
170+
code_function_callt fcall(to_code_function_call(i_it->code));
171+
172+
exprt new_function = domain[i_it].domain_simplify(fcall.function(), ns);
173+
result |= (new_function == fcall.function()) ? 0 : 1;
174+
fcall.function() = new_function;
175+
176+
exprt::operandst &args = fcall.arguments();
177+
178+
for(exprt::operandst::iterator o_it = args.begin();
179+
o_it != args.end(); ++o_it)
180+
{
181+
exprt new_arg = domain[i_it].domain_simplify(*o_it, ns);
182+
result |= (new_arg == *o_it) ? 0 : 1;
183+
*o_it = new_arg;
184+
}
185+
186+
i_it->code = fcall;
187+
188+
simplified.function_calls += result;
189+
unmodified.function_calls += (1 - result);
190+
}
166191
}
167192
}
168193

@@ -175,12 +200,14 @@ void static_simplifiert<analyzerT>::simplify_program()
175200
<< ", assume: " << simplified.assumes
176201
<< ", goto: " << simplified.gotos
177202
<< ", assigns: " << simplified.assigns
203+
<< ", function calls: " << simplified.function_calls
178204
<< "\n"
179205
<< "UNMODIFIED: "
180206
<< " assert: " << unmodified.asserts
181207
<< ", assume: " << unmodified.assumes
182208
<< ", goto: " << unmodified.gotos
183209
<< ", assigns: " << unmodified.assigns
210+
<< ", function calls: " << unmodified.function_calls
184211
<< eom;
185212

186213
return;

0 commit comments

Comments
 (0)