From b056b0b6ec77593672cdf6b53d1dba620058bbf7 Mon Sep 17 00:00:00 2001 From: Tom French Date: Fri, 24 Jan 2025 21:14:56 +0000 Subject: [PATCH 1/3] feat: simplify subtraction from self to return zero --- compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs b/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs index df1e8f537da..1f42eb57611 100644 --- a/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs +++ b/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs @@ -152,6 +152,11 @@ impl Binary { } } BinaryOp::Sub { .. } => { + if dfg.resolve(self.lhs) == dfg.resolve(self.rhs) { + let zero = dfg.make_constant(FieldElement::zero(), lhs_type); + return SimplifyResult::SimplifiedTo(zero); + } + if rhs_is_zero { return SimplifyResult::SimplifiedTo(self.lhs); } From 9c6c358bb23fcf8ff1b9f8e36ce5176a1e28612d Mon Sep 17 00:00:00 2001 From: jfecher Date: Thu, 30 Jan 2025 09:32:04 -0600 Subject: [PATCH 2/3] Update compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs --- compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs b/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs index 03901d1cc3a..cbd1fce406f 100644 --- a/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs +++ b/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs @@ -155,7 +155,7 @@ impl Binary { } } BinaryOp::Sub { .. } => { - if dfg.resolve(self.lhs) == dfg.resolve(self.rhs) { + if lhs == rhs { let zero = dfg.make_constant(FieldElement::zero(), lhs_type); return SimplifyResult::SimplifiedTo(zero); } From 4bb34365866fc8a2897ad4ca3ac5f43031b355ae Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Thu, 30 Jan 2025 15:50:17 +0000 Subject: [PATCH 3/3] . --- test_programs/noir_test_success/regression_4080/src/main.nr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_programs/noir_test_success/regression_4080/src/main.nr b/test_programs/noir_test_success/regression_4080/src/main.nr index 781d3e33ea3..01f358625be 100644 --- a/test_programs/noir_test_success/regression_4080/src/main.nr +++ b/test_programs/noir_test_success/regression_4080/src/main.nr @@ -3,6 +3,6 @@ #[test(should_fail_with = "attempt to add with overflow")] fn main() { - let var1: u8 = ((255 + 1) ^ (255 + 1)) - ((255 + 1) - (255 + 1)); - assert_eq(var1, 0); + let var1: u8 = ((255 + 1) ^ (255 + 1) ^ (255 + 1)); + assert_eq(var1 as Field, 256); }