Skip to content

Commit 19bbfc6

Browse files
author
Daniel Kroening
committed
simplifier: use new interface
This improves type safety.
1 parent a1f0dc7 commit 19bbfc6

File tree

4 files changed

+258
-205
lines changed

4 files changed

+258
-205
lines changed

src/util/simplify_expr.cpp

Lines changed: 97 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,8 +1309,7 @@ bool simplify_exprt::simplify_if_preorder(if_exprt &expr)
13091309
return result;
13101310
}
13111311

1312-
NODISCARD simplify_exprt::resultt<>
1313-
simplify_exprt::simplify_if(const if_exprt &expr)
1312+
simplify_exprt::resultt<> simplify_exprt::simplify_if(const if_exprt &expr)
13141313
{
13151314
const exprt &cond = expr.cond();
13161315
const exprt &truevalue = expr.true_case();
@@ -1429,11 +1428,9 @@ bool simplify_exprt::get_values(
14291428
return true;
14301429
}
14311430

1432-
bool simplify_exprt::simplify_lambda(exprt &)
1431+
simplify_exprt::resultt<> simplify_exprt::simplify_lambda(const exprt &expr)
14331432
{
1434-
bool result=true;
1435-
1436-
return result;
1433+
return unchanged(expr);
14371434
}
14381435

14391436
bool simplify_exprt::simplify_with(exprt &expr)
@@ -2423,30 +2420,24 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
24232420
return unchanged(expr);
24242421
}
24252422

2426-
bool simplify_exprt::simplify_complex(exprt &expr)
2423+
simplify_exprt::resultt<> simplify_exprt::simplify_complex(const exprt &expr)
24272424
{
24282425
if(expr.id() == ID_complex_real)
24292426
{
2430-
complex_real_exprt &complex_real_expr = to_complex_real_expr(expr);
2427+
auto &complex_real_expr = to_complex_real_expr(expr);
24312428

24322429
if(complex_real_expr.op().id() == ID_complex)
2433-
{
2434-
expr = to_complex_expr(complex_real_expr.op()).real();
2435-
return false;
2436-
}
2430+
return to_complex_expr(complex_real_expr.op()).real();
24372431
}
24382432
else if(expr.id() == ID_complex_imag)
24392433
{
2440-
complex_imag_exprt &complex_imag_expr = to_complex_imag_expr(expr);
2434+
auto &complex_imag_expr = to_complex_imag_expr(expr);
24412435

24422436
if(complex_imag_expr.op().id() == ID_complex)
2443-
{
2444-
expr = to_complex_expr(complex_imag_expr.op()).imag();
2445-
return false;
2446-
}
2437+
return to_complex_expr(complex_imag_expr.op()).imag();
24472438
}
24482439

2449-
return true;
2440+
return unchanged(expr);
24502441
}
24512442

24522443
bool simplify_exprt::simplify_node_preorder(exprt &expr)
@@ -2512,7 +2503,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
25122503
}
25132504
}
25142505
else if(expr.id()==ID_lambda)
2515-
no_change = simplify_lambda(expr) && no_change;
2506+
{
2507+
auto r = simplify_lambda(expr);
2508+
if(r.has_changed())
2509+
{
2510+
no_change = false;
2511+
expr = r.expr;
2512+
}
2513+
}
25162514
else if(expr.id()==ID_with)
25172515
no_change = simplify_with(expr) && no_change;
25182516
else if(expr.id()==ID_update)
@@ -2605,7 +2603,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
26052603
}
26062604
}
26072605
else if(expr.id()==ID_bitnot)
2608-
no_change = simplify_bitnot(expr) && no_change;
2606+
{
2607+
auto r = simplify_bitnot(expr);
2608+
if(r.has_changed())
2609+
{
2610+
no_change = false;
2611+
expr = r.expr;
2612+
}
2613+
}
26092614
else if(expr.id()==ID_bitand ||
26102615
expr.id()==ID_bitor ||
26112616
expr.id()==ID_bitxor)
@@ -2684,15 +2689,43 @@ bool simplify_exprt::simplify_node(exprt &expr)
26842689
}
26852690
}
26862691
else if(expr.id()==ID_unary_minus)
2687-
no_change = simplify_unary_minus(expr) && no_change;
2692+
{
2693+
auto r = simplify_unary_minus(expr);
2694+
if(r.has_changed())
2695+
{
2696+
no_change = false;
2697+
expr = r.expr;
2698+
}
2699+
}
26882700
else if(expr.id()==ID_unary_plus)
2689-
no_change = simplify_unary_plus(expr) && no_change;
2701+
{
2702+
auto r = simplify_unary_plus(expr);
2703+
if(r.has_changed())
2704+
{
2705+
no_change = false;
2706+
expr = r.expr;
2707+
}
2708+
}
26902709
else if(expr.id()==ID_not)
2691-
no_change = simplify_not(expr) && no_change;
2710+
{
2711+
auto r = simplify_not(expr);
2712+
if(r.has_changed())
2713+
{
2714+
no_change = false;
2715+
expr = r.expr;
2716+
}
2717+
}
26922718
else if(expr.id()==ID_implies ||
26932719
expr.id()==ID_or || expr.id()==ID_xor ||
26942720
expr.id()==ID_and)
2695-
no_change = simplify_boolean(expr) && no_change;
2721+
{
2722+
auto r = simplify_boolean(expr);
2723+
if(r.has_changed())
2724+
{
2725+
no_change = false;
2726+
expr = r.expr;
2727+
}
2728+
}
26962729
else if(expr.id()==ID_dereference)
26972730
{
26982731
auto r = simplify_dereference(to_dereference_expr(expr));
@@ -2721,11 +2754,32 @@ bool simplify_exprt::simplify_node(exprt &expr)
27212754
}
27222755
}
27232756
else if(expr.id()==ID_extractbit)
2724-
no_change = simplify_extractbit(expr) && no_change;
2757+
{
2758+
auto r = simplify_extractbit(expr);
2759+
if(r.has_changed())
2760+
{
2761+
no_change = false;
2762+
expr = r.expr;
2763+
}
2764+
}
27252765
else if(expr.id()==ID_concatenation)
2726-
no_change = simplify_concatenation(expr) && no_change;
2766+
{
2767+
auto r = simplify_concatenation(expr);
2768+
if(r.has_changed())
2769+
{
2770+
no_change = false;
2771+
expr = r.expr;
2772+
}
2773+
}
27272774
else if(expr.id()==ID_extractbits)
2728-
no_change = simplify_extractbits(to_extractbits_expr(expr)) && no_change;
2775+
{
2776+
auto r = simplify_extractbits(to_extractbits_expr(expr));
2777+
if(r.has_changed())
2778+
{
2779+
no_change = false;
2780+
expr = r.expr;
2781+
}
2782+
}
27292783
else if(expr.id()==ID_ieee_float_equal ||
27302784
expr.id()==ID_ieee_float_notequal)
27312785
{
@@ -2737,7 +2791,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
27372791
}
27382792
}
27392793
else if(expr.id() == ID_bswap)
2740-
no_change = simplify_bswap(to_bswap_expr(expr)) && no_change;
2794+
{
2795+
auto r = simplify_bswap(to_bswap_expr(expr));
2796+
if(r.has_changed())
2797+
{
2798+
no_change = false;
2799+
expr = r.expr;
2800+
}
2801+
}
27412802
else if(expr.id()==ID_isinf)
27422803
{
27432804
auto r = simplify_isinf(to_unary_expr(expr));
@@ -2795,7 +2856,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
27952856
}
27962857
}
27972858
else if(expr.id() == ID_complex_real || expr.id() == ID_complex_imag)
2798-
no_change = simplify_complex(expr) && no_change;
2859+
{
2860+
auto r = simplify_complex(expr);
2861+
if(r.has_changed())
2862+
{
2863+
no_change = false;
2864+
expr = r.expr;
2865+
}
2866+
}
27992867

28002868
#ifdef DEBUGX
28012869
if(

0 commit comments

Comments
 (0)