force reduction of UintEq members
This commit is contained in:
parent
3ec38415af
commit
ee97e41334
3 changed files with 25 additions and 0 deletions
|
@ -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;
|
||||
|
|
4
zokrates_core_test/tests/tests/uint/eq.json
Normal file
4
zokrates_core_test/tests/tests/uint/eq.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"entry_point": "./tests/tests/uint/eq.zok",
|
||||
"tests": []
|
||||
}
|
3
zokrates_core_test/tests/tests/uint/eq.zok
Normal file
3
zokrates_core_test/tests/tests/uint/eq.zok
Normal 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
|
Loading…
Reference in a new issue