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

only reduce to bits if it's needed

This commit is contained in:
schaeff 2020-11-24 16:44:18 +00:00
parent 6dab8a4bc6
commit de3e09c62e

View file

@ -1603,29 +1603,33 @@ impl<'ast, T: Field> Flattener<'ast, T> {
let res = match should_reduce {
true => {
let bits = self.get_bits(
res.clone(),
actual_bitwidth,
target_bitwidth,
statements_flattened,
);
if actual_bitwidth != target_bitwidth.to_usize() {
let bits = self.get_bits(
res.clone(),
actual_bitwidth,
target_bitwidth,
statements_flattened,
);
let field = bits.iter().enumerate().fold(
FlatExpression::Number(T::from(0)),
|acc, (index, bit)| {
FlatExpression::Add(
box acc,
box FlatExpression::Mult(
box FlatExpression::Number(
T::from(2).pow(target_bitwidth.to_usize() - index - 1),
let field = bits.iter().enumerate().fold(
FlatExpression::Number(T::from(0)),
|acc, (index, bit)| {
FlatExpression::Add(
box acc,
box FlatExpression::Mult(
box FlatExpression::Number(
T::from(2).pow(target_bitwidth.to_usize() - index - 1),
),
box bit.clone().into(),
),
box bit.clone().into(),
),
)
},
);
)
},
);
FlatUExpression::with_bits(bits).field(field)
FlatUExpression::with_bits(bits).field(field)
} else {
res
}
}
false => res,
};