diff --git a/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_globals.rs b/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_globals.rs index d4995a896c2..7825466a937 100644 --- a/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_globals.rs +++ b/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_globals.rs @@ -186,6 +186,13 @@ impl BrilligGlobals { &self, brillig_function_id: FunctionId, ) -> Option<(&SsaToBrilligGlobals, &HoistedConstantsToBrilligGlobals)> { + // Check whether the user has declared any globals. + // If not we want to override the fetching of globals which relies on having performed + // entry point specialization. We skip entry point specialization if there are no globals. + if self.used_globals.values().all(|globals| globals.is_empty()) { + return None; + } + // Check whether `brillig_function_id` is itself an entry point. // If so, return the global allocations directly. let entry_point_globals = self.get_entry_point_globals(&brillig_function_id); diff --git a/compiler/noirc_evaluator/src/ssa/opt/brillig_entry_points.rs b/compiler/noirc_evaluator/src/ssa/opt/brillig_entry_points.rs index 2fe33eef46a..5e24484850f 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/brillig_entry_points.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/brillig_entry_points.rs @@ -80,6 +80,15 @@ impl Ssa { return self; } + // Check whether any globals have been declared. If not, we do not need to run this pass. + if !self + .functions + .values() + .any(|function| function.dfg.globals.values_iter().next().is_some()) + { + return self; + } + let brillig_entry_points = get_brillig_entry_points(&self.functions, self.main_id); let functions_to_clone_map = build_functions_to_clone(&brillig_entry_points); diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 0fa2b63b45d..735ebf17adb 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -33,8 +33,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1WwU7DMAxN2QYMNCRAiAMXTpyTJmlTkNAEA3Hnjpau7Xf002mFrXqmZZPWCiRmKbLTOPazncQNxBcF1RgxOYD5bTXGZI0TfpsDl7uR6tGWDFpwDgY8ILa0jIzJ4zBXWnkZJqmz0tg0csop62wWOq1zZ1ycpEksE2V0rgqb6LyoaeWDDUnviiUHPgV+QNZHPcY6ZX77tO+kiact8fWIX0/B5pD5abtUPdmXR2DnpWzs81gE4ajH99TrM5DpOUOd42qciUY+B3kG/JXYwv1D5rY6G9HAuVWXojufeC6fy2F8o/3FMPbDU6ijFet1w/gmRH5uqe2E6V8DP6zGFcizlvwFRE93+KaNh55FjmNMbG2DFfVvgNfxP4CMZ2nCMMxhLnejCHNxKL4Trh0x3yhzGrE5xV3H9Ejscj3uk/YW6n+beizKdX3EQOvBdYRo6oH6dwT7f68H7aNd9UCfvH4Bk3k9uD6961RfEewpw9f2FtK73BYH7qnfHHzXxuW6nTl8lztQ7JofvVHZxMbrQ/1PmP49zE8IfuTjHXAWsVeF9oW3PsvMyl8w+4LlqW//oXNREqbVH1W2KjKjN/nvszcsgNfn5AnkTb1h2eF76N7wBnz/Fv2N3vBOsO97Q7P2W73hg2Dftjcsf4hjyDfPWB+vfKxUYlRulN305n0CvYanDAURAAA=", - "debug_symbols": "ldbZaoQwFAbgd8m1F9kXX6WUwSUzBETFpVDEd28y1E7Hhg7/ncfw5RgTTs5GWl+vt0vor8NMyreNdENTLWHoY7QRdn81j1WfonmppoWUTLOC+L6NT0bsBbmGzpNS0f29IPwVcE8gBvUUui7cLk956T25zU3GJf+ejEt7zi6ywv0IZ85CwkLBQsPCZIV9iD8rt7BwqBAUFgwWHBYCFtk9F+w4pILps1Cw0LAwsMjuuaAPcT5XwqFCUlgwWHBYCFhIWKj/z1VGaFgYWFhUaIFWUW3ReqUdKgyFBYMFXEsMXEuMhIWChYYFfH8Y+P4wDq1XlsKCwYLDAq4lFq4lVsFCw8LAAr4/LHx/OIrWK8dgwWEhMLHH6KOaQlV3PvWnaXDtm6NdjeHyOR4jR0M7TkPj23XyqbX91dWmP6JEoWz8EJYWq1yhWcwR83wB", + "bytecode": "H4sIAAAAAAAA/+VWzU7DMAxO2R8FDQkQ4sCFE+ekSdoUJDS0wXukf8/RR6cVtuqZVpvUlguWIjuN+/mznTQNxI8EzVgwO4D5czOWZI0LPtuBluNETYglgx6esxEPCJaWsTFlEpVKKy+jNHNWGpvFTjllnS0ip3XpjEvSLE1kqowuVWVTXVat5D44UfShXD5Ah6AvyPpiwlxDFndKfCdNEvbkNyF/HQLmnPXpO1QT4csN4HzWHT7PRRCNfvyddn0LNt1n6HPZjBvR2bdgb0F/ESx8f87aNnsjnrm26l4M1xP35b6eJzbiH+bBj66hj1Yc9w3zWxF739PbFfN/BL1uxgPY2576BcRPD8SmFw/di5zHkmCdwxX9n0C3+b+BjXtpxTjsYC7HSYy1WIvfgmsbFhttLgs2p7z7zib14zHp3ULjn9OPQ33sjxxoP7iPEF0/0P+FcP/v/aD36FA/MCbvX8Bs3g/uT8869VeE+zvj1/ctpGe5Lw98p/3m4HdtWR/j7OC5HCGJ6370FnWXG+8Pjb9i/q8wvyL8US9H8KwSryrtK299UZjc3zF8weo0dfzIuTiNsuaPqsirwui/jm+sT3KfKJUaVRplT8X/BnasrkORDAAA", + "debug_symbols": "ldTdboQgEAXgd+HaCwFB8FWaZuMPuyEhaFCbNMZ3L2xqt2tJN+fOkXyMZiZnI4Pp1tvF+us4k+ZtI27s28WOPlYbofdX89T6VM1LGxbSUEkLYvwQn2q+F+RqnSGNKPf3grBXQD+BWHTBOmdvl6e+5b25yl3GKvZ9GavUuTvPCv0jdH0WFSwELCQs6qxQD/HnzxUsNCp4CQsKCwYLDovszDk9lpRTeRYCFhIWNSyyM+flQ5z3imtUVCUsKCwYLDgsKliI//cqIyQsalgoTOyx+miDbTtnUrKmw9X3R9DGcvmcjpMjiqcw9mZYg0mh/CuP0y4IXggVP4SmMQtdSBp7xD5f", "file_map": { "50": { "source": "// Tests a very simple program.\n//\n// The feature being tested is brillig recursion\nfn main(x: u32) {\n // Safety: testing context\n unsafe {\n assert(fibonacci(x) == 55);\n }\n}\n\nunconstrained fn fibonacci(x: u32) -> u32 {\n if x <= 1 {\n x\n } else {\n fibonacci(x - 1) + fibonacci(x - 2)\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_0.snap index 0fa2b63b45d..735ebf17adb 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_0.snap @@ -33,8 +33,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1WwU7DMAxN2QYMNCRAiAMXTpyTJmlTkNAEA3Hnjpau7Xf002mFrXqmZZPWCiRmKbLTOPazncQNxBcF1RgxOYD5bTXGZI0TfpsDl7uR6tGWDFpwDgY8ILa0jIzJ4zBXWnkZJqmz0tg0csop62wWOq1zZ1ycpEksE2V0rgqb6LyoaeWDDUnviiUHPgV+QNZHPcY6ZX77tO+kiact8fWIX0/B5pD5abtUPdmXR2DnpWzs81gE4ajH99TrM5DpOUOd42qciUY+B3kG/JXYwv1D5rY6G9HAuVWXojufeC6fy2F8o/3FMPbDU6ijFet1w/gmRH5uqe2E6V8DP6zGFcizlvwFRE93+KaNh55FjmNMbG2DFfVvgNfxP4CMZ2nCMMxhLnejCHNxKL4Trh0x3yhzGrE5xV3H9Ejscj3uk/YW6n+beizKdX3EQOvBdYRo6oH6dwT7f68H7aNd9UCfvH4Bk3k9uD6961RfEewpw9f2FtK73BYH7qnfHHzXxuW6nTl8lztQ7JofvVHZxMbrQ/1PmP49zE8IfuTjHXAWsVeF9oW3PsvMyl8w+4LlqW//oXNREqbVH1W2KjKjN/nvszcsgNfn5AnkTb1h2eF76N7wBnz/Fv2N3vBOsO97Q7P2W73hg2Dftjcsf4hjyDfPWB+vfKxUYlRulN305n0CvYanDAURAAA=", - "debug_symbols": "ldbZaoQwFAbgd8m1F9kXX6WUwSUzBETFpVDEd28y1E7Hhg7/ncfw5RgTTs5GWl+vt0vor8NMyreNdENTLWHoY7QRdn81j1WfonmppoWUTLOC+L6NT0bsBbmGzpNS0f29IPwVcE8gBvUUui7cLk956T25zU3GJf+ejEt7zi6ywv0IZ85CwkLBQsPCZIV9iD8rt7BwqBAUFgwWHBYCFtk9F+w4pILps1Cw0LAwsMjuuaAPcT5XwqFCUlgwWHBYCFhIWKj/z1VGaFgYWFhUaIFWUW3ReqUdKgyFBYMFXEsMXEuMhIWChYYFfH8Y+P4wDq1XlsKCwYLDAq4lFq4lVsFCw8LAAr4/LHx/OIrWK8dgwWEhMLHH6KOaQlV3PvWnaXDtm6NdjeHyOR4jR0M7TkPj23XyqbX91dWmP6JEoWz8EJYWq1yhWcwR83wB", + "bytecode": "H4sIAAAAAAAA/+VWzU7DMAxO2R8FDQkQ4sCFE+ekSdoUJDS0wXukf8/RR6cVtuqZVpvUlguWIjuN+/mznTQNxI8EzVgwO4D5czOWZI0LPtuBluNETYglgx6esxEPCJaWsTFlEpVKKy+jNHNWGpvFTjllnS0ip3XpjEvSLE1kqowuVWVTXVat5D44UfShXD5Ah6AvyPpiwlxDFndKfCdNEvbkNyF/HQLmnPXpO1QT4csN4HzWHT7PRRCNfvyddn0LNt1n6HPZjBvR2bdgb0F/ESx8f87aNnsjnrm26l4M1xP35b6eJzbiH+bBj66hj1Yc9w3zWxF739PbFfN/BL1uxgPY2576BcRPD8SmFw/di5zHkmCdwxX9n0C3+b+BjXtpxTjsYC7HSYy1WIvfgmsbFhttLgs2p7z7zib14zHp3ULjn9OPQ33sjxxoP7iPEF0/0P+FcP/v/aD36FA/MCbvX8Bs3g/uT8869VeE+zvj1/ctpGe5Lw98p/3m4HdtWR/j7OC5HCGJ6370FnWXG+8Pjb9i/q8wvyL8US9H8KwSryrtK299UZjc3zF8weo0dfzIuTiNsuaPqsirwui/jm+sT3KfKJUaVRplT8X/BnasrkORDAAA", + "debug_symbols": "ldTdboQgEAXgd+HaCwFB8FWaZuMPuyEhaFCbNMZ3L2xqt2tJN+fOkXyMZiZnI4Pp1tvF+us4k+ZtI27s28WOPlYbofdX89T6VM1LGxbSUEkLYvwQn2q+F+RqnSGNKPf3grBXQD+BWHTBOmdvl6e+5b25yl3GKvZ9GavUuTvPCv0jdH0WFSwELCQs6qxQD/HnzxUsNCp4CQsKCwYLDovszDk9lpRTeRYCFhIWNSyyM+flQ5z3imtUVCUsKCwYLDgsKliI//cqIyQsalgoTOyx+miDbTtnUrKmw9X3R9DGcvmcjpMjiqcw9mZYg0mh/CuP0y4IXggVP4SmMQtdSBp7xD5f", "file_map": { "50": { "source": "// Tests a very simple program.\n//\n// The feature being tested is brillig recursion\nfn main(x: u32) {\n // Safety: testing context\n unsafe {\n assert(fibonacci(x) == 55);\n }\n}\n\nunconstrained fn fibonacci(x: u32) -> u32 {\n if x <= 1 {\n x\n } else {\n fibonacci(x - 1) + fibonacci(x - 2)\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 0fa2b63b45d..735ebf17adb 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_recursion/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -33,8 +33,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1WwU7DMAxN2QYMNCRAiAMXTpyTJmlTkNAEA3Hnjpau7Xf002mFrXqmZZPWCiRmKbLTOPazncQNxBcF1RgxOYD5bTXGZI0TfpsDl7uR6tGWDFpwDgY8ILa0jIzJ4zBXWnkZJqmz0tg0csop62wWOq1zZ1ycpEksE2V0rgqb6LyoaeWDDUnviiUHPgV+QNZHPcY6ZX77tO+kiact8fWIX0/B5pD5abtUPdmXR2DnpWzs81gE4ajH99TrM5DpOUOd42qciUY+B3kG/JXYwv1D5rY6G9HAuVWXojufeC6fy2F8o/3FMPbDU6ijFet1w/gmRH5uqe2E6V8DP6zGFcizlvwFRE93+KaNh55FjmNMbG2DFfVvgNfxP4CMZ2nCMMxhLnejCHNxKL4Trh0x3yhzGrE5xV3H9Ejscj3uk/YW6n+beizKdX3EQOvBdYRo6oH6dwT7f68H7aNd9UCfvH4Bk3k9uD6961RfEewpw9f2FtK73BYH7qnfHHzXxuW6nTl8lztQ7JofvVHZxMbrQ/1PmP49zE8IfuTjHXAWsVeF9oW3PsvMyl8w+4LlqW//oXNREqbVH1W2KjKjN/nvszcsgNfn5AnkTb1h2eF76N7wBnz/Fv2N3vBOsO97Q7P2W73hg2Dftjcsf4hjyDfPWB+vfKxUYlRulN305n0CvYanDAURAAA=", - "debug_symbols": "ldbZaoQwFAbgd8m1F9kXX6WUwSUzBETFpVDEd28y1E7Hhg7/ncfw5RgTTs5GWl+vt0vor8NMyreNdENTLWHoY7QRdn81j1WfonmppoWUTLOC+L6NT0bsBbmGzpNS0f29IPwVcE8gBvUUui7cLk956T25zU3GJf+ejEt7zi6ywv0IZ85CwkLBQsPCZIV9iD8rt7BwqBAUFgwWHBYCFtk9F+w4pILps1Cw0LAwsMjuuaAPcT5XwqFCUlgwWHBYCFhIWKj/z1VGaFgYWFhUaIFWUW3ReqUdKgyFBYMFXEsMXEuMhIWChYYFfH8Y+P4wDq1XlsKCwYLDAq4lFq4lVsFCw8LAAr4/LHx/OIrWK8dgwWEhMLHH6KOaQlV3PvWnaXDtm6NdjeHyOR4jR0M7TkPj23XyqbX91dWmP6JEoWz8EJYWq1yhWcwR83wB", + "bytecode": "H4sIAAAAAAAA/+VWzU7DMAxO2R8FDQkQ4sCFE+ekSdoUJDS0wXukf8/RR6cVtuqZVpvUlguWIjuN+/mznTQNxI8EzVgwO4D5czOWZI0LPtuBluNETYglgx6esxEPCJaWsTFlEpVKKy+jNHNWGpvFTjllnS0ip3XpjEvSLE1kqowuVWVTXVat5D44UfShXD5Ah6AvyPpiwlxDFndKfCdNEvbkNyF/HQLmnPXpO1QT4csN4HzWHT7PRRCNfvyddn0LNt1n6HPZjBvR2bdgb0F/ESx8f87aNnsjnrm26l4M1xP35b6eJzbiH+bBj66hj1Yc9w3zWxF739PbFfN/BL1uxgPY2576BcRPD8SmFw/di5zHkmCdwxX9n0C3+b+BjXtpxTjsYC7HSYy1WIvfgmsbFhttLgs2p7z7zib14zHp3ULjn9OPQ33sjxxoP7iPEF0/0P+FcP/v/aD36FA/MCbvX8Bs3g/uT8869VeE+zvj1/ctpGe5Lw98p/3m4HdtWR/j7OC5HCGJ6370FnWXG+8Pjb9i/q8wvyL8US9H8KwSryrtK299UZjc3zF8weo0dfzIuTiNsuaPqsirwui/jm+sT3KfKJUaVRplT8X/BnasrkORDAAA", + "debug_symbols": "ldTdboQgEAXgd+HaCwFB8FWaZuMPuyEhaFCbNMZ3L2xqt2tJN+fOkXyMZiZnI4Pp1tvF+us4k+ZtI27s28WOPlYbofdX89T6VM1LGxbSUEkLYvwQn2q+F+RqnSGNKPf3grBXQD+BWHTBOmdvl6e+5b25yl3GKvZ9GavUuTvPCv0jdH0WFSwELCQs6qxQD/HnzxUsNCp4CQsKCwYLDovszDk9lpRTeRYCFhIWNSyyM+flQ5z3imtUVCUsKCwYLDgsKliI//cqIyQsalgoTOyx+miDbTtnUrKmw9X3R9DGcvmcjpMjiqcw9mZYg0mh/CuP0y4IXggVP4SmMQtdSBp7xD5f", "file_map": { "50": { "source": "// Tests a very simple program.\n//\n// The feature being tested is brillig recursion\nfn main(x: u32) {\n // Safety: testing context\n unsafe {\n assert(fibonacci(x) == 55);\n }\n}\n\nunconstrained fn fibonacci(x: u32) -> u32 {\n if x <= 1 {\n x\n } else {\n fibonacci(x - 1) + fibonacci(x - 2)\n }\n}\n",