From b8ec570ddb7f4f67f1ac8fecb71cbe04594791fb Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Mon, 2 Dec 2024 11:38:32 -0300 Subject: [PATCH] Add test that shows issue with hoisting sub --- .../src/ssa/opt/constant_folding.rs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/compiler/noirc_evaluator/src/ssa/opt/constant_folding.rs b/compiler/noirc_evaluator/src/ssa/opt/constant_folding.rs index 41c84c935b1..92d499bb356 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/constant_folding.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/constant_folding.rs @@ -1457,6 +1457,32 @@ mod test { assert_normalized_ssa_equals(ssa, src); } + #[test] + fn does_not_hoist_sub_to_common_ancestor() { + let src = " + brillig(inline) fn main f0 { + b0(v0: u32): + v2 = eq v0, u32 0 + jmpif v2 then: b1, else: b2 + b1(): + v3 = sub v0, u32 1 + jmp b5() + b2(): + jmpif v0 then: b3, else: b4 + b3(): + v4 = sub v0, u32 1 // We can't hoist this because v0 is zero here and it will lead to an underflow + jmp b5() + b4(): + jmp b5() + b5(): + return + } + "; + let ssa = Ssa::from_str(src).unwrap(); + let mut ssa = ssa.fold_constants_using_constraints(); + assert_normalized_ssa_equals(ssa, src); + } + #[test] fn deduplicates_side_effecting_intrinsics() { let src = "