File tree Expand file tree Collapse file tree 3 files changed +37
-0
lines changed Expand file tree Collapse file tree 3 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -2509,6 +2509,8 @@ bool simplify_exprt::simplify_node(exprt &expr)
2509
2509
result=simplify_bitwise (expr) && result;
2510
2510
else if (expr.id ()==ID_ashr || expr.id ()==ID_lshr || expr.id ()==ID_shl)
2511
2511
result=simplify_shifts (expr) && result;
2512
+ else if (expr.id ()==ID_power)
2513
+ result=simplify_power (expr) && result;
2512
2514
else if (expr.id ()==ID_plus)
2513
2515
result=simplify_plus (expr) && result;
2514
2516
else if (expr.id ()==ID_minus)
Original file line number Diff line number Diff line change @@ -71,6 +71,7 @@ class simplify_exprt
71
71
bool simplify_floatbv_op (exprt &expr);
72
72
bool simplify_floatbv_typecast (exprt &expr);
73
73
bool simplify_shifts (exprt &expr);
74
+ bool simplify_power (exprt &expr);
74
75
bool simplify_bitwise (exprt &expr);
75
76
bool simplify_if_preorder (if_exprt &expr);
76
77
bool simplify_if (if_exprt &expr);
Original file line number Diff line number Diff line change @@ -1016,6 +1016,40 @@ bool simplify_exprt::simplify_shifts(exprt &expr)
1016
1016
1017
1017
/* ******************************************************************\
1018
1018
1019
+ Function: simplify_exprt::simplify_power
1020
+
1021
+ Inputs:
1022
+
1023
+ Outputs:
1024
+
1025
+ Purpose:
1026
+
1027
+ \*******************************************************************/
1028
+
1029
+ bool simplify_exprt::simplify_power (exprt &expr)
1030
+ {
1031
+ if (!is_number (expr.type ()))
1032
+ return true ;
1033
+
1034
+ if (expr.operands ().size ()!=2 )
1035
+ return true ;
1036
+
1037
+ mp_integer base, exponent;
1038
+
1039
+ if (to_integer (expr.op0 (), base))
1040
+ return true ;
1041
+
1042
+ if (to_integer (expr.op1 (), exponent))
1043
+ return true ;
1044
+
1045
+ mp_integer result=power (base, exponent);
1046
+
1047
+ expr=from_integer (result, expr.type ());
1048
+ return false ;
1049
+ }
1050
+
1051
+ /* ******************************************************************\
1052
+
1019
1053
Function: simplify_exprt::simplify_extractbits
1020
1054
1021
1055
Inputs:
You can’t perform that action at this time.
0 commit comments