1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00

force reduce x_to_bits embed arguments

This commit is contained in:
dark64 2021-08-20 13:43:34 +02:00
parent f7f6a8421a
commit db9abf4519
4 changed files with 44 additions and 21 deletions

View file

@ -1089,7 +1089,10 @@ impl<'ast, T: Field> Flattener<'ast, T> {
bitwidth: UBitwidth,
) -> Vec<FlatUExpression<T>> {
let expression = UExpression::try_from(expression).unwrap();
let from = expression.metadata.as_ref().unwrap().bitwidth();
let metadata = expression.metadata.as_ref().unwrap();
assert!(!metadata.should_reduce.is_unknown());
let from = metadata.bitwidth();
let p = self.flatten_uint_expression(statements_flattened, expression);
self.get_bits(&p, from as usize, bitwidth, statements_flattened)
.into_iter()

View file

@ -492,24 +492,44 @@ impl<'ast, T: Field> Folder<'ast, T> for UintOptimizer<'ast, T> {
_ => {}
};
vec![ZirStatement::MultipleDefinition(
lhs,
ZirExpressionList::EmbedCall(
embed,
generics,
arguments
.into_iter()
.map(|e| match e {
ZirExpression::Uint(e) => {
let e = self.fold_uint_expression(e);
let e = force_no_reduce(e);
ZirExpression::Uint(e)
}
e => self.fold_expression(e),
})
.collect(),
),
)]
match embed {
FlatEmbed::U8ToBits
| FlatEmbed::U16ToBits
| FlatEmbed::U32ToBits
| FlatEmbed::U64ToBits => {
vec![ZirStatement::MultipleDefinition(
lhs,
ZirExpressionList::EmbedCall(
embed,
generics,
arguments
.into_iter()
.map(|e| match e {
ZirExpression::Uint(e) => {
let e = self.fold_uint_expression(e);
let e = force_reduce(e);
ZirExpression::Uint(e)
}
e => self.fold_expression(e),
})
.collect(),
),
)]
}
_ => {
vec![ZirStatement::MultipleDefinition(
lhs,
ZirExpressionList::EmbedCall(
embed,
generics,
arguments
.into_iter()
.map(|e| self.fold_expression(e))
.collect(),
),
)]
}
}
}
ZirStatement::Assertion(BooleanExpression::UintEq(box left, box right)) => {
let left = self.fold_uint_expression(left);

View file

@ -1,4 +1,4 @@
// Generic walk through a typed AST. Not mutating in place
// Generic walk through ZIR. Not mutating in place
use crate::zir::types::UBitwidth;
use crate::zir::*;

View file

@ -1,4 +1,4 @@
// Generic walk through a typed AST. Not mutating in place
// Generic walk through ZIR. Not mutating in place
use crate::zir::types::UBitwidth;
use crate::zir::*;