Skip to content

Commit b7273d7

Browse files
authored
feat(opt): Don't clone on array_len (#9440)
1 parent ea9c913 commit b7273d7

File tree

162 files changed

+329
-447
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

162 files changed

+329
-447
lines changed

compiler/noirc_frontend/src/ownership/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,20 @@ impl Context {
324324
for arg in &mut call.arguments {
325325
self.handle_expression(arg);
326326
}
327+
328+
// Hack to avoid clones when calling `array.len()`.
329+
// That function takes arrays by value but we know it never mutates them.
330+
if let Expression::Ident(ident) = call.func.as_ref() {
331+
if let Definition::Builtin(name) = &ident.definition {
332+
if name == "array_len" {
333+
if let Some(Expression::Clone(array)) = call.arguments.get_mut(0) {
334+
let array =
335+
std::mem::replace(array.as_mut(), Expression::Literal(Literal::Unit));
336+
call.arguments[0] = array;
337+
}
338+
}
339+
}
340+
}
327341
}
328342

329343
fn handle_let(&mut self, let_expr: &mut crate::monomorphization::ast::Let) {

tooling/nargo_cli/tests/snapshots/compile_success_empty/brillig_slice_input/execute__tests__force_brillig_false_inliner_0.snap

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_6/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_6/execute__tests__force_brillig_true_inliner_0.snap

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_6/execute__tests__force_brillig_true_inliner_9223372036854775807.snap

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_6_array/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_6_array/execute__tests__force_brillig_true_inliner_0.snap

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_6_array/execute__tests__force_brillig_true_inliner_9223372036854775807.snap

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_7/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/nargo_cli/tests/snapshots/execution_success/a_7/execute__tests__force_brillig_true_inliner_0.snap

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)