diff --git a/compiler/noirc_evaluator/src/ssa/ir/dfg/simplify.rs b/compiler/noirc_evaluator/src/ssa/ir/dfg/simplify.rs index b56698dcc6d..921152c8bb0 100644 --- a/compiler/noirc_evaluator/src/ssa/ir/dfg/simplify.rs +++ b/compiler/noirc_evaluator/src/ssa/ir/dfg/simplify.rs @@ -229,7 +229,6 @@ pub(crate) fn simplify( if let Instruction::IfElse { then_condition: inner_then_condition, then_value: inner_then_value, - else_condition: inner_else_condition, .. } = dfg[*instruction] { @@ -237,7 +236,7 @@ pub(crate) fn simplify( let instruction = Instruction::IfElse { then_condition, then_value: inner_then_value, - else_condition: inner_else_condition, + else_condition, else_value, }; return SimplifiedToInstruction(instruction); @@ -250,7 +249,6 @@ pub(crate) fn simplify( if let Value::Instruction { instruction, .. } = &dfg[else_value] { if let Instruction::IfElse { then_condition: inner_then_condition, - else_condition: inner_else_condition, else_value: inner_else_value, .. } = dfg[*instruction] @@ -259,7 +257,7 @@ pub(crate) fn simplify( let instruction = Instruction::IfElse { then_condition, then_value, - else_condition: inner_else_condition, + else_condition, else_value: inner_else_value, }; return SimplifiedToInstruction(instruction); diff --git a/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs b/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs index da4f5a0014a..727252e449a 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs @@ -1522,4 +1522,73 @@ mod test { } "); } + + #[test] + fn do_not_replace_else_condition_with_nested_if_same_then_cond() { + // When inserting an `IfElse` instruction we will attempt to simplify when the then condition + // of the inner if-else matches the parent's if-else then condition. + // e.g. such as the following pseudocode: + // ``` + // if cond { + // if cond { ... } else { ... } + // } else { + // ... + // } + // ``` + // In the SSA below we can see how the jmpif condition in b0 matches the jmpif condition in b1. + let src = " + acir(inline) pure fn main f0 { + b0(v0: u1, v1: [[u1; 2]; 3]): + v4 = not v0 + jmpif v0 then: b1, else: b2 + b1(): + v7 = not v0 + jmpif v0 then: b3, else: b4 + b2(): + v6 = array_get v1, index u32 0 -> [u1; 2] + jmp b5(v6) + b3(): + v9 = array_get v1, index u32 0 -> [u1; 2] + jmp b6(v9) + b4(): + v8 = array_get v1, index u32 0 -> [u1; 2] + jmp b6(v8) + b5(v2: [u1; 2]): + return v2 + b6(v3: [u1; 2]): + jmp b5(v3) + } + "; + + let ssa = Ssa::from_str(src).unwrap(); + let ssa = ssa.flatten_cfg(); + + // You will notice in the expected SSA that there is no nested if statement. This is because the + // final instruction `v12 = if v0 then v5 else (if v6) v10` used to have `v9` as its then block value. + // As they share the same then condition we can simplify the then value in the outer if-else statement to the inner if-else + // statement's then value. This is why the then value is `v5` in both if-else instructions below. + // We want to make sure that the else condition in the final instruction `v12 = if v0 then v5 else (if v6) v10` + // remains v6 and is not altered when performing this optimization. + assert_ssa_snapshot!(ssa, @r" + acir(inline) pure fn main f0 { + b0(v0: u1, v1: [[u1; 2]; 3]): + v2 = not v0 + enable_side_effects v0 + v3 = not v0 + enable_side_effects v0 + v5 = array_get v1, index u32 0 -> [u1; 2] + v6 = not v0 + v7 = unchecked_mul v0, v6 + enable_side_effects v7 + v8 = array_get v1, index u32 0 -> [u1; 2] + enable_side_effects v0 + v9 = if v0 then v5 else (if v7) v8 + enable_side_effects v6 + v10 = array_get v1, index u32 0 -> [u1; 2] + enable_side_effects u1 1 + v12 = if v0 then v5 else (if v6) v10 + return v12 + } + "); + } } diff --git a/test_programs/execution_success/nested_if_then_block_same_cond/Nargo.toml b/test_programs/execution_success/nested_if_then_block_same_cond/Nargo.toml new file mode 100644 index 00000000000..3053b05a042 --- /dev/null +++ b/test_programs/execution_success/nested_if_then_block_same_cond/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "nested_if_then_block_same_cond" +type = "bin" +authors = [""] + +[dependencies] \ No newline at end of file diff --git a/test_programs/execution_success/nested_if_then_block_same_cond/Prover.toml b/test_programs/execution_success/nested_if_then_block_same_cond/Prover.toml new file mode 100644 index 00000000000..2252155bbac --- /dev/null +++ b/test_programs/execution_success/nested_if_then_block_same_cond/Prover.toml @@ -0,0 +1,4 @@ +a = 0 +b = [[1, 0], [1, 0], [1, 1]] + +return = [1, 0] \ No newline at end of file diff --git a/test_programs/execution_success/nested_if_then_block_same_cond/src/main.nr b/test_programs/execution_success/nested_if_then_block_same_cond/src/main.nr new file mode 100644 index 00000000000..2e034d2efd6 --- /dev/null +++ b/test_programs/execution_success/nested_if_then_block_same_cond/src/main.nr @@ -0,0 +1,12 @@ +// Regression taken from issue #7961 (https://github.com/noir-lang/noir/issues/7961) +fn main(a: bool, b: [[bool; 2]; 3]) -> pub [bool; 2] { + if (!!a) { + if (!!a) { + b[0] + } else { + b[0] + } + } else { + b[0] + } +} diff --git a/test_programs/execution_success/nested_if_then_block_same_cond/stdout.txt b/test_programs/execution_success/nested_if_then_block_same_cond/stdout.txt new file mode 100644 index 00000000000..9d6b1827fc1 --- /dev/null +++ b/test_programs/execution_success/nested_if_then_block_same_cond/stdout.txt @@ -0,0 +1 @@ +[nested_if_then_block_same_cond] Circuit output: Vec([Field(1), Field(0)]) \ No newline at end of file diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap new file mode 100644 index 00000000000..d8c5772cf2c --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -0,0 +1,52 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [ + { + "name": "a", + "type": { + "kind": "boolean" + }, + "visibility": "private" + }, + { + "name": "b", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + } + }, + "visibility": "private" + } + ], + "return_type": { + "abi_type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + }, + "visibility": "public" + }, + "error_types": {} + }, + "bytecode": "H4sIAAAAAAAA/7WSYQrDIAyFq66ru01itMZ/u8pk9v5HWEsjyOa/2Qch+omRJ09Np+xeD1mrvYz0um+Z6jDdYabDbh02d9i9eb9KS39KJ1i9L9EVJHyBS5kD+JBXRsbA4e2YqLDnmHKKkNBTwS0k2uCUambBf8Jl3Cy40rMe6NkO9FyzcWhp/NdsGTmfJRvf/3PcsdOvPiwHCgvgAgAA", + "debug_symbols": "XYxLCoAwDAXvkrUn8Coi0k9aAqEpsRWk9O5+cCFdzhveNPBoa9woBdlhXhqwOFNI0k2tT2CVmCluw3wYJWMZPww1uZ8tZ8bhn1Uc+qr4lF7X134B", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_0.snap new file mode 100644 index 00000000000..d8c5772cf2c --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_0.snap @@ -0,0 +1,52 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [ + { + "name": "a", + "type": { + "kind": "boolean" + }, + "visibility": "private" + }, + { + "name": "b", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + } + }, + "visibility": "private" + } + ], + "return_type": { + "abi_type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + }, + "visibility": "public" + }, + "error_types": {} + }, + "bytecode": "H4sIAAAAAAAA/7WSYQrDIAyFq66ru01itMZ/u8pk9v5HWEsjyOa/2Qch+omRJ09Np+xeD1mrvYz0um+Z6jDdYabDbh02d9i9eb9KS39KJ1i9L9EVJHyBS5kD+JBXRsbA4e2YqLDnmHKKkNBTwS0k2uCUambBf8Jl3Cy40rMe6NkO9FyzcWhp/NdsGTmfJRvf/3PcsdOvPiwHCgvgAgAA", + "debug_symbols": "XYxLCoAwDAXvkrUn8Coi0k9aAqEpsRWk9O5+cCFdzhveNPBoa9woBdlhXhqwOFNI0k2tT2CVmCluw3wYJWMZPww1uZ8tZ8bhn1Uc+qr4lF7X134B", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_9223372036854775807.snap new file mode 100644 index 00000000000..d8c5772cf2c --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -0,0 +1,52 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [ + { + "name": "a", + "type": { + "kind": "boolean" + }, + "visibility": "private" + }, + { + "name": "b", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + } + }, + "visibility": "private" + } + ], + "return_type": { + "abi_type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + }, + "visibility": "public" + }, + "error_types": {} + }, + "bytecode": "H4sIAAAAAAAA/7WSYQrDIAyFq66ru01itMZ/u8pk9v5HWEsjyOa/2Qch+omRJ09Np+xeD1mrvYz0um+Z6jDdYabDbh02d9i9eb9KS39KJ1i9L9EVJHyBS5kD+JBXRsbA4e2YqLDnmHKKkNBTwS0k2uCUambBf8Jl3Cy40rMe6NkO9FyzcWhp/NdsGTmfJRvf/3PcsdOvPiwHCgvgAgAA", + "debug_symbols": "XYxLCoAwDAXvkrUn8Coi0k9aAqEpsRWk9O5+cCFdzhveNPBoa9woBdlhXhqwOFNI0k2tT2CVmCluw3wYJWMZPww1uZ8tZ8bhn1Uc+qr4lF7X134B", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap new file mode 100644 index 00000000000..356c1cf2f75 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -0,0 +1,68 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [ + { + "name": "a", + "type": { + "kind": "boolean" + }, + "visibility": "private" + }, + { + "name": "b", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + } + }, + "visibility": "private" + } + ], + "return_type": { + "abi_type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + }, + "visibility": "public" + }, + "error_types": { + "12049594436772143978": { + "error_kind": "string", + "string": "array ref-count underflow detected" + }, + "17843811134343075018": { + "error_kind": "string", + "string": "Stack too deep" + } + } + }, + "bytecode": "H4sIAAAAAAAA/+1ZzY7aMBCeBAcIu2hR+yIhCQ1HDt3fy0q9tT0FED301EPVSyvl0Yu1nvB5kqiVyGiVFZaQnczn+R/HNgG9tOnxF7ixcX1IzcaYjeuT89qyR16J1W2srG/Qo75aOoYD0HE0AB3NAHSMBqDjmPqtcdaR16cJvaxf9QMJkE02G0zrLFwgWhmAAyrXxwIfOJ6bnhwUC7l98l8n+T4mv/WsfxYDTwX+BfM3OvwTzpmPlc+fhNyRwMk5iLkFzG0H5g4wdx2Ye8Dcd2AeAPPQgXkEzGMH5gkwTwIzd+PgBKlt5/ho1Mcxf1fK8c/m5Mcc7WbZkY7sPBDyMB5IY/kzUq21ZSDksT7SP6Hwz0RHn4T5T5X4s71xi72YzxNh75WOPinn4gz0kbl4rSM7+99cZPkzoatWLl5TMzboH47TnDHVSZ9Y0EzVtINpEdA4vjbvnsE+pKE+uD5wri6omSust3LdpMp1s7zUTd0udQO0gddNrlw36aVu6napG6Bp1w3HWe7RWeYXGH8V8sMW+RgzuRfU2JsezwFb5XNA2hZPGWtT+bKRhvE04M9n4R+lc9JW+RyevqfuHOJ8mFRUt5HwJ/qIfTZFvKDFQDOVL2fmng3IQV6sRyTwn93zjevHMIfnL1rkj4V8T++Wd+gjyWvU8o7x9n7qkxtfuZ/NoV88h1RroF4D8Z6s7fvE8m+ouR7x3Ij8teI72FiK+bjeR8JWpXu3+uzHtpgOW1m3kJq+5zHay+++ud7G74/gJ795XWvqgpr+ZZy8t0Cc9fFPN37LPv7h+tf2sbwfwzm2hnlfYCqfvnHvkzNasT5djPMaGpF/X0NCfiTwv90z7q24P+ePkENRLg9ZeShX5X6f78p3gr9tIfipb/llka13ab4rtquszD78U/5fzDlg8xEdAAA=", + "debug_symbols": "ldRRC4MgEAfw73LPPuhlK/sqYwwrG4JYWA1G9N2nsbFYvdyL+Bd/KBx3C7Smnh9367t+hOq6gOsbPdnex7SsDOpgnbOP+/4YeFoUbvfHQfsUx0mHCSpRXhgY38ad4tF31hmocr7eGKiMLCRZFGcC86/Ay0GUZKGoQnBOJ4JOkE4yOpF0cl4V5F+C8kBKOlFkIjidCDpBOsnoRNLIGtNTB6trZz7d3s2+2TX/9BrM3xwYQt+Ydg4mTYTfMEi/LRQr1VaHGIRQTKDc/pUi5jEW8c347hs=", + "file_map": { + "50": { + "source": "// Regression taken from issue #7961 (https://github.com/noir-lang/noir/issues/7961)\nfn main(a: bool, b: [[bool; 2]; 3]) -> pub [bool; 2] {\n if (!!a) {\n if (!!a) {\n b[0]\n } else {\n b[0]\n }\n } else {\n b[0]\n }\n}\n", + "path": "" + } + }, + "names": [ + "main" + ], + "brillig_names": [ + "main" + ] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_0.snap new file mode 100644 index 00000000000..356c1cf2f75 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_0.snap @@ -0,0 +1,68 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [ + { + "name": "a", + "type": { + "kind": "boolean" + }, + "visibility": "private" + }, + { + "name": "b", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + } + }, + "visibility": "private" + } + ], + "return_type": { + "abi_type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + }, + "visibility": "public" + }, + "error_types": { + "12049594436772143978": { + "error_kind": "string", + "string": "array ref-count underflow detected" + }, + "17843811134343075018": { + "error_kind": "string", + "string": "Stack too deep" + } + } + }, + "bytecode": "H4sIAAAAAAAA/+1ZzY7aMBCeBAcIu2hR+yIhCQ1HDt3fy0q9tT0FED301EPVSyvl0Yu1nvB5kqiVyGiVFZaQnczn+R/HNgG9tOnxF7ixcX1IzcaYjeuT89qyR16J1W2srG/Qo75aOoYD0HE0AB3NAHSMBqDjmPqtcdaR16cJvaxf9QMJkE02G0zrLFwgWhmAAyrXxwIfOJ6bnhwUC7l98l8n+T4mv/WsfxYDTwX+BfM3OvwTzpmPlc+fhNyRwMk5iLkFzG0H5g4wdx2Ye8Dcd2AeAPPQgXkEzGMH5gkwTwIzd+PgBKlt5/ho1Mcxf1fK8c/m5Mcc7WbZkY7sPBDyMB5IY/kzUq21ZSDksT7SP6Hwz0RHn4T5T5X4s71xi72YzxNh75WOPinn4gz0kbl4rSM7+99cZPkzoatWLl5TMzboH47TnDHVSZ9Y0EzVtINpEdA4vjbvnsE+pKE+uD5wri6omSust3LdpMp1s7zUTd0udQO0gddNrlw36aVu6napG6Bp1w3HWe7RWeYXGH8V8sMW+RgzuRfU2JsezwFb5XNA2hZPGWtT+bKRhvE04M9n4R+lc9JW+RyevqfuHOJ8mFRUt5HwJ/qIfTZFvKDFQDOVL2fmng3IQV6sRyTwn93zjevHMIfnL1rkj4V8T++Wd+gjyWvU8o7x9n7qkxtfuZ/NoV88h1RroF4D8Z6s7fvE8m+ouR7x3Ij8teI72FiK+bjeR8JWpXu3+uzHtpgOW1m3kJq+5zHay+++ud7G74/gJ795XWvqgpr+ZZy8t0Cc9fFPN37LPv7h+tf2sbwfwzm2hnlfYCqfvnHvkzNasT5djPMaGpF/X0NCfiTwv90z7q24P+ePkENRLg9ZeShX5X6f78p3gr9tIfipb/llka13ab4rtquszD78U/5fzDlg8xEdAAA=", + "debug_symbols": "ldRRC4MgEAfw73LPPuhlK/sqYwwrG4JYWA1G9N2nsbFYvdyL+Bd/KBx3C7Smnh9367t+hOq6gOsbPdnex7SsDOpgnbOP+/4YeFoUbvfHQfsUx0mHCSpRXhgY38ad4tF31hmocr7eGKiMLCRZFGcC86/Ay0GUZKGoQnBOJ4JOkE4yOpF0cl4V5F+C8kBKOlFkIjidCDpBOsnoRNLIGtNTB6trZz7d3s2+2TX/9BrM3xwYQt+Ydg4mTYTfMEi/LRQr1VaHGIRQTKDc/pUi5jEW8c347hs=", + "file_map": { + "50": { + "source": "// Regression taken from issue #7961 (https://github.com/noir-lang/noir/issues/7961)\nfn main(a: bool, b: [[bool; 2]; 3]) -> pub [bool; 2] {\n if (!!a) {\n if (!!a) {\n b[0]\n } else {\n b[0]\n }\n } else {\n b[0]\n }\n}\n", + "path": "" + } + }, + "names": [ + "main" + ], + "brillig_names": [ + "main" + ] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_9223372036854775807.snap new file mode 100644 index 00000000000..356c1cf2f75 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_if_then_block_same_cond/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -0,0 +1,68 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [ + { + "name": "a", + "type": { + "kind": "boolean" + }, + "visibility": "private" + }, + { + "name": "b", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + } + }, + "visibility": "private" + } + ], + "return_type": { + "abi_type": { + "kind": "array", + "length": 2, + "type": { + "kind": "boolean" + } + }, + "visibility": "public" + }, + "error_types": { + "12049594436772143978": { + "error_kind": "string", + "string": "array ref-count underflow detected" + }, + "17843811134343075018": { + "error_kind": "string", + "string": "Stack too deep" + } + } + }, + "bytecode": "H4sIAAAAAAAA/+1ZzY7aMBCeBAcIu2hR+yIhCQ1HDt3fy0q9tT0FED301EPVSyvl0Yu1nvB5kqiVyGiVFZaQnczn+R/HNgG9tOnxF7ixcX1IzcaYjeuT89qyR16J1W2srG/Qo75aOoYD0HE0AB3NAHSMBqDjmPqtcdaR16cJvaxf9QMJkE02G0zrLFwgWhmAAyrXxwIfOJ6bnhwUC7l98l8n+T4mv/WsfxYDTwX+BfM3OvwTzpmPlc+fhNyRwMk5iLkFzG0H5g4wdx2Ye8Dcd2AeAPPQgXkEzGMH5gkwTwIzd+PgBKlt5/ho1Mcxf1fK8c/m5Mcc7WbZkY7sPBDyMB5IY/kzUq21ZSDksT7SP6Hwz0RHn4T5T5X4s71xi72YzxNh75WOPinn4gz0kbl4rSM7+99cZPkzoatWLl5TMzboH47TnDHVSZ9Y0EzVtINpEdA4vjbvnsE+pKE+uD5wri6omSust3LdpMp1s7zUTd0udQO0gddNrlw36aVu6napG6Bp1w3HWe7RWeYXGH8V8sMW+RgzuRfU2JsezwFb5XNA2hZPGWtT+bKRhvE04M9n4R+lc9JW+RyevqfuHOJ8mFRUt5HwJ/qIfTZFvKDFQDOVL2fmng3IQV6sRyTwn93zjevHMIfnL1rkj4V8T++Wd+gjyWvU8o7x9n7qkxtfuZ/NoV88h1RroF4D8Z6s7fvE8m+ouR7x3Ij8teI72FiK+bjeR8JWpXu3+uzHtpgOW1m3kJq+5zHay+++ud7G74/gJ795XWvqgpr+ZZy8t0Cc9fFPN37LPv7h+tf2sbwfwzm2hnlfYCqfvnHvkzNasT5djPMaGpF/X0NCfiTwv90z7q24P+ePkENRLg9ZeShX5X6f78p3gr9tIfipb/llka13ab4rtquszD78U/5fzDlg8xEdAAA=", + "debug_symbols": "ldRRC4MgEAfw73LPPuhlK/sqYwwrG4JYWA1G9N2nsbFYvdyL+Bd/KBx3C7Smnh9367t+hOq6gOsbPdnex7SsDOpgnbOP+/4YeFoUbvfHQfsUx0mHCSpRXhgY38ad4tF31hmocr7eGKiMLCRZFGcC86/Ay0GUZKGoQnBOJ4JOkE4yOpF0cl4V5F+C8kBKOlFkIjidCDpBOsnoRNLIGtNTB6trZz7d3s2+2TX/9BrM3xwYQt+Ydg4mTYTfMEi/LRQr1VaHGIRQTKDc/pUi5jEW8c347hs=", + "file_map": { + "50": { + "source": "// Regression taken from issue #7961 (https://github.com/noir-lang/noir/issues/7961)\nfn main(a: bool, b: [[bool; 2]; 3]) -> pub [bool; 2] {\n if (!!a) {\n if (!!a) {\n b[0]\n } else {\n b[0]\n }\n } else {\n b[0]\n }\n}\n", + "path": "" + } + }, + "names": [ + "main" + ], + "brillig_names": [ + "main" + ] +}