From 2c1410a670694750c2476e1ab85286ad1b72c287 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Thu, 11 Apr 2024 17:36:29 +0000 Subject: [PATCH 1/3] fix: avoid huge unrolling in hash_args --- noir-projects/aztec-nr/aztec/src/hash.nr | 29 +++++++++++++----------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/hash.nr b/noir-projects/aztec-nr/aztec/src/hash.nr index d2c065c9da60..e82d049d7080 100644 --- a/noir-projects/aztec-nr/aztec/src/hash.nr +++ b/noir-projects/aztec-nr/aztec/src/hash.nr @@ -89,21 +89,24 @@ pub fn hash_args(args: [Field]) -> Field { if args.len() == 0 { 0 } else { + assert(args.len() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH); let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT]; - for i in 0..ARGS_HASH_CHUNK_COUNT { - let mut chunk_hash = 0; - let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH; - if start_chunk_index < args.len() { - let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH]; - for j in 0..ARGS_HASH_CHUNK_LENGTH { - let item_index = i * ARGS_HASH_CHUNK_LENGTH + j; - if item_index < args.len() { - chunk_args[j] = args[item_index]; - } - } - chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS); + let mut current_chunk = [0; ARGS_HASH_CHUNK_LENGTH]; + + let mut current_chunk_index = 0; + let mut index_inside_current_chunk = 0; + for i in 0..args.len() { + current_chunk[index_inside_current_chunk] = args[i]; + index_inside_current_chunk+=1; + if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH { + chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk, GENERATOR_INDEX__FUNCTION_ARGS); + current_chunk = [0; ARGS_HASH_CHUNK_LENGTH]; + current_chunk_index+=1; + index_inside_current_chunk = 0; } - chunks_hashes[i] = chunk_hash; + } + if index_inside_current_chunk > 0 { + chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk, GENERATOR_INDEX__FUNCTION_ARGS); } pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS) } From 2a328b41ce1f5a0e72f39a4ed8f7768999a8d8ae Mon Sep 17 00:00:00 2001 From: Alvaro Rodriguez Date: Fri, 12 Apr 2024 00:04:42 +0200 Subject: [PATCH 2/3] fix: unrolling bug --- .../compiler/noirc_evaluator/src/ssa/opt/unrolling.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/unrolling.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/unrolling.rs index c6bf7923fa8a..6cf155f85ab2 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/unrolling.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/unrolling.rs @@ -151,7 +151,10 @@ impl Loops { if next_loop.blocks.iter().any(|block| self.modified_blocks.contains(block)) { let mut new_context = find_all_loops(function); new_context.failed_to_unroll = self.failed_to_unroll; - return new_context.unroll_each_loop(function); + return unroll_errors + .into_iter() + .chain(new_context.unroll_each_loop(function)) + .collect(); } // Don't try to unroll the loop again if it is known to fail From b66c139996bb44894781acc0e003f26d94e60318 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Fri, 12 Apr 2024 00:42:43 +0200 Subject: [PATCH 3/3] refactor: rename --- noir-projects/aztec-nr/aztec/src/hash.nr | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/hash.nr b/noir-projects/aztec-nr/aztec/src/hash.nr index e82d049d7080..f6980f78c2cb 100644 --- a/noir-projects/aztec-nr/aztec/src/hash.nr +++ b/noir-projects/aztec-nr/aztec/src/hash.nr @@ -91,22 +91,22 @@ pub fn hash_args(args: [Field]) -> Field { } else { assert(args.len() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH); let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT]; - let mut current_chunk = [0; ARGS_HASH_CHUNK_LENGTH]; + let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH]; let mut current_chunk_index = 0; let mut index_inside_current_chunk = 0; for i in 0..args.len() { - current_chunk[index_inside_current_chunk] = args[i]; + current_chunk_values[index_inside_current_chunk] = args[i]; index_inside_current_chunk+=1; if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH { - chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk, GENERATOR_INDEX__FUNCTION_ARGS); - current_chunk = [0; ARGS_HASH_CHUNK_LENGTH]; + chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS); + current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH]; current_chunk_index+=1; index_inside_current_chunk = 0; } } if index_inside_current_chunk > 0 { - chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk, GENERATOR_INDEX__FUNCTION_ARGS); + chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS); } pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS) }