@@ -1309,8 +1309,7 @@ bool simplify_exprt::simplify_if_preorder(if_exprt &expr)
1309
1309
return result;
1310
1310
}
1311
1311
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)
1314
1313
{
1315
1314
const exprt &cond = expr.cond ();
1316
1315
const exprt &truevalue = expr.true_case ();
@@ -1429,11 +1428,9 @@ bool simplify_exprt::get_values(
1429
1428
return true ;
1430
1429
}
1431
1430
1432
- bool simplify_exprt::simplify_lambda (exprt &)
1431
+ simplify_exprt::resultt<> simplify_exprt::simplify_lambda (const exprt &expr )
1433
1432
{
1434
- bool result=true ;
1435
-
1436
- return result;
1433
+ return unchanged (expr);
1437
1434
}
1438
1435
1439
1436
bool simplify_exprt::simplify_with (exprt &expr)
@@ -2423,30 +2420,24 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
2423
2420
return unchanged (expr);
2424
2421
}
2425
2422
2426
- bool simplify_exprt::simplify_complex (exprt &expr)
2423
+ simplify_exprt::resultt<> simplify_exprt::simplify_complex (const exprt &expr)
2427
2424
{
2428
2425
if (expr.id () == ID_complex_real)
2429
2426
{
2430
- complex_real_exprt &complex_real_expr = to_complex_real_expr (expr);
2427
+ auto &complex_real_expr = to_complex_real_expr (expr);
2431
2428
2432
2429
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 ();
2437
2431
}
2438
2432
else if (expr.id () == ID_complex_imag)
2439
2433
{
2440
- complex_imag_exprt &complex_imag_expr = to_complex_imag_expr (expr);
2434
+ auto &complex_imag_expr = to_complex_imag_expr (expr);
2441
2435
2442
2436
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 ();
2447
2438
}
2448
2439
2449
- return true ;
2440
+ return unchanged (expr) ;
2450
2441
}
2451
2442
2452
2443
bool simplify_exprt::simplify_node_preorder (exprt &expr)
@@ -2512,7 +2503,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
2512
2503
}
2513
2504
}
2514
2505
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
+ }
2516
2514
else if (expr.id ()==ID_with)
2517
2515
no_change = simplify_with (expr) && no_change;
2518
2516
else if (expr.id ()==ID_update)
@@ -2605,7 +2603,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
2605
2603
}
2606
2604
}
2607
2605
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
+ }
2609
2614
else if (expr.id ()==ID_bitand ||
2610
2615
expr.id ()==ID_bitor ||
2611
2616
expr.id ()==ID_bitxor)
@@ -2684,15 +2689,43 @@ bool simplify_exprt::simplify_node(exprt &expr)
2684
2689
}
2685
2690
}
2686
2691
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
+ }
2688
2700
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
+ }
2690
2709
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
+ }
2692
2718
else if (expr.id ()==ID_implies ||
2693
2719
expr.id ()==ID_or || expr.id ()==ID_xor ||
2694
2720
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
+ }
2696
2729
else if (expr.id ()==ID_dereference)
2697
2730
{
2698
2731
auto r = simplify_dereference (to_dereference_expr (expr));
@@ -2721,11 +2754,32 @@ bool simplify_exprt::simplify_node(exprt &expr)
2721
2754
}
2722
2755
}
2723
2756
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
+ }
2725
2765
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
+ }
2727
2774
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
+ }
2729
2783
else if (expr.id ()==ID_ieee_float_equal ||
2730
2784
expr.id ()==ID_ieee_float_notequal)
2731
2785
{
@@ -2737,7 +2791,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
2737
2791
}
2738
2792
}
2739
2793
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
+ }
2741
2802
else if (expr.id ()==ID_isinf)
2742
2803
{
2743
2804
auto r = simplify_isinf (to_unary_expr (expr));
@@ -2795,7 +2856,14 @@ bool simplify_exprt::simplify_node(exprt &expr)
2795
2856
}
2796
2857
}
2797
2858
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
+ }
2799
2867
2800
2868
#ifdef DEBUGX
2801
2869
if (
0 commit comments