@@ -2,8 +2,8 @@ use crate::{
22 Counter , F ,
33 ir:: HighLevelOperation ,
44 lang:: {
5- AssignmentTarget , AssumeBoolean , Condition , ConstExpression , ConstMallocLabel , ConstantValue , Context ,
6- Expression , Function , Line , Program , Scope , SimpleExpr , Var ,
5+ AssignmentTarget , Condition , ConstExpression , ConstMallocLabel , Context , Expression , Function , Line , MathExpr ,
6+ Program , Scope , SimpleExpr , Var ,
77 } ,
88 parser:: ConstArrayValue ,
99} ;
@@ -529,7 +529,7 @@ fn check_boolean_scoping(boolean: &BooleanExpr<Expression>, ctx: &Context) {
529529
530530fn check_condition_scoping ( condition : & Condition , ctx : & Context ) {
531531 match condition {
532- Condition :: Expression ( expr, _ ) => {
532+ Condition :: AssumeBoolean ( expr) => {
533533 check_expr_scoping ( expr, ctx) ;
534534 }
535535 Condition :: Comparison ( boolean) => {
@@ -723,11 +723,10 @@ fn simplify_lines(
723723 if let ( SimpleExpr :: Constant ( left_cst) , SimpleExpr :: Constant ( right_cst) ) =
724724 ( & left, & right)
725725 {
726- let result = ConstExpression :: Binary {
727- left : Box :: new ( left_cst. clone ( ) ) ,
728- operation : * operation,
729- right : Box :: new ( right_cst. clone ( ) ) ,
730- }
726+ let result = ConstExpression :: MathExpr (
727+ MathExpr :: Binary ( * operation) ,
728+ vec ! [ left_cst. clone( ) , right_cst. clone( ) ] ,
729+ )
731730 . try_naive_simplification ( ) ;
732731 res. push ( SimpleLine :: equality ( var. clone ( ) , SimpleExpr :: Constant ( result) ) ) ;
733732 } else {
@@ -855,28 +854,8 @@ fn simplify_lines(
855854 } ) ;
856855 ( diff_var. into ( ) , then_branch, else_branch)
857856 }
858- Condition :: Expression ( condition, assume_boolean ) => {
857+ Condition :: AssumeBoolean ( condition) => {
859858 let condition_simplified = simplify_expr ( ctx, state, const_malloc, condition, & mut res) ;
860-
861- match assume_boolean {
862- AssumeBoolean :: AssumeBoolean => { }
863- AssumeBoolean :: DoNotAssumeBoolean => {
864- // Check condition_simplified is boolean
865- let one_minus_condition_var = state. counters . aux_var ( ) ;
866- res. push ( SimpleLine :: Assignment {
867- var : one_minus_condition_var. clone ( ) . into ( ) ,
868- operation : HighLevelOperation :: Sub ,
869- arg0 : SimpleExpr :: Constant ( ConstExpression :: Value ( ConstantValue :: Scalar ( 1 ) ) ) ,
870- arg1 : condition_simplified. clone ( ) ,
871- } ) ;
872- res. push ( SimpleLine :: AssertZero {
873- operation : HighLevelOperation :: Mul ,
874- arg0 : condition_simplified. clone ( ) ,
875- arg1 : one_minus_condition_var. into ( ) ,
876- } ) ;
877- }
878- }
879-
880859 ( condition_simplified, then_branch, else_branch)
881860 }
882861 } ;
@@ -1194,11 +1173,10 @@ fn simplify_expr(
11941173 let right_var = simplify_expr ( ctx, state, const_malloc, right, lines) ;
11951174
11961175 if let ( SimpleExpr :: Constant ( left_cst) , SimpleExpr :: Constant ( right_cst) ) = ( & left_var, & right_var) {
1197- return SimpleExpr :: Constant ( ConstExpression :: Binary {
1198- left : Box :: new ( left_cst. clone ( ) ) ,
1199- operation : * operation,
1200- right : Box :: new ( right_cst. clone ( ) ) ,
1201- } ) ;
1176+ return SimpleExpr :: Constant ( ConstExpression :: MathExpr (
1177+ MathExpr :: Binary ( * operation) ,
1178+ vec ! [ left_cst. clone( ) , right_cst. clone( ) ] ,
1179+ ) ) ;
12021180 }
12031181
12041182 let aux_var = state. counters . aux_var ( ) ;
@@ -1275,7 +1253,7 @@ pub fn find_variable_usage(
12751253 on_new_expr ( & comp. left , internal_vars, external_vars) ;
12761254 on_new_expr ( & comp. right , internal_vars, external_vars) ;
12771255 }
1278- Condition :: Expression ( expr, _assume_boolean ) => {
1256+ Condition :: AssumeBoolean ( expr) => {
12791257 on_new_expr ( expr, internal_vars, external_vars) ;
12801258 }
12811259 } ;
@@ -1444,7 +1422,7 @@ fn inline_lines(
14441422
14451423 let inline_condition = |condition : & mut Condition | match condition {
14461424 Condition :: Comparison ( comparison) => inline_comparison ( comparison) ,
1447- Condition :: Expression ( expr, _assume_boolean ) => inline_expr ( expr, args, inlining_count) ,
1425+ Condition :: AssumeBoolean ( expr) => inline_expr ( expr, args, inlining_count) ,
14481426 } ;
14491427
14501428 let inline_internal_var = |var : & mut Var | {
@@ -1883,7 +1861,7 @@ fn replace_vars_for_unroll(
18831861 internal_vars,
18841862 ) ;
18851863 }
1886- Condition :: Expression ( expr, _assume_bool ) => {
1864+ Condition :: AssumeBoolean ( expr) => {
18871865 replace_vars_for_unroll_in_expr ( expr, iterator, unroll_index, iterator_value, internal_vars) ;
18881866 }
18891867 }
@@ -2142,9 +2120,9 @@ fn extract_inlined_calls_from_condition(
21422120 inlined_var_counter : & mut Counter ,
21432121) -> ( Condition , Vec < Line > ) {
21442122 match condition {
2145- Condition :: Expression ( expr, assume_boolean ) => {
2123+ Condition :: AssumeBoolean ( expr) => {
21462124 let ( expr, expr_lines) = extract_inlined_calls_from_expr ( expr, inlined_functions, inlined_var_counter) ;
2147- ( Condition :: Expression ( expr, * assume_boolean ) , expr_lines)
2125+ ( Condition :: AssumeBoolean ( expr) , expr_lines)
21482126 }
21492127 Condition :: Comparison ( boolean) => {
21502128 let ( boolean, boolean_lines) =
@@ -2719,7 +2697,7 @@ fn replace_vars_by_const_in_lines(lines: &mut [Line], map: &BTreeMap<Var, F>) {
27192697 replace_vars_by_const_in_expr ( & mut cond. left , map) ;
27202698 replace_vars_by_const_in_expr ( & mut cond. right , map) ;
27212699 }
2722- Condition :: Expression ( expr, _assume_boolean ) => {
2700+ Condition :: AssumeBoolean ( expr) => {
27232701 replace_vars_by_const_in_expr ( expr, map) ;
27242702 }
27252703 }
0 commit comments