1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

force reduction of UintEq members

This commit is contained in:
schaeff 2020-07-06 22:49:57 +02:00
parent 3ec38415af
commit ee97e41334
3 changed files with 25 additions and 0 deletions

View file

@ -53,6 +53,24 @@ fn force_no_reduce<'ast, T: Field>(e: UExpression<'ast, T>) -> UExpression<'ast,
}
impl<'ast, T: Field> Folder<'ast, T> for UintOptimizer<'ast, T> {
fn fold_boolean_expression(
&mut self,
e: BooleanExpression<'ast, T>,
) -> BooleanExpression<'ast, T> {
match e {
BooleanExpression::UintEq(box left, box right) => {
let left = self.fold_uint_expression(left);
let right = self.fold_uint_expression(right);
let left = force_reduce(left);
let right = force_reduce(right);
BooleanExpression::UintEq(box left, box right)
}
e => fold_boolean_expression(self, e),
}
}
fn fold_uint_expression(&mut self, e: UExpression<'ast, T>) -> UExpression<'ast, T> {
if e.metadata.is_some() {
return e;

View file

@ -0,0 +1,4 @@
{
"entry_point": "./tests/tests/uint/eq.zok",
"tests": []
}

View file

@ -0,0 +1,3 @@
def main(private u32 a, u32 b) -> (field):
field result = if a * a == b then 1 else 0 fi
return result