Skip to content

Commit 4aabf98

Browse files
authored
chore(brillig): No temp reg for size when generating heap vector (#11813)
1 parent 9a1fdc2 commit 4aabf98

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_memory.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,7 @@ impl<F: AcirField + DebugToString, Registers: RegisterAllocator> BrilligContext<
285285
) -> Allocated<HeapVector, Registers> {
286286
let heap_vector = self.allocate_heap_vector();
287287

288-
// Read the size using the dedicated helper function
289-
let size_variable = self.codegen_read_vector_size(vector);
290-
self.mov_instruction(heap_vector.size, size_variable.address);
288+
self.codegen_read_vector_size_into(vector, heap_vector.size);
291289

292290
// Get the pointer to the items using the dedicated helper function
293291
self.codegen_vector_items_pointer(vector, heap_vector.pointer);
@@ -334,19 +332,28 @@ impl<F: AcirField + DebugToString, Registers: RegisterAllocator> BrilligContext<
334332
self.codegen_read_rc(vector.pointer)
335333
}
336334

337-
/// Returns a variable holding the size of a given vector.
338-
pub(crate) fn codegen_read_vector_size(
335+
/// Reads the size of a given vector into `dest`.
336+
pub(crate) fn codegen_read_vector_size_into(
339337
&mut self,
340338
vector: BrilligVector,
341-
) -> Allocated<SingleAddrVariable, Registers> {
342-
let result = self.allocate_single_addr_usize();
339+
dest: MemoryAddress,
340+
) {
343341
self.codegen_usize_op(
344342
vector.pointer,
345-
result.address,
343+
dest,
346344
BrilligBinaryOp::Add,
347345
assert_usize(offsets::VECTOR_SIZE),
348346
);
349-
self.load_instruction(result.address, result.address);
347+
self.load_instruction(dest, dest);
348+
}
349+
350+
/// Returns a variable holding the size of a given vector.
351+
pub(crate) fn codegen_read_vector_size(
352+
&mut self,
353+
vector: BrilligVector,
354+
) -> Allocated<SingleAddrVariable, Registers> {
355+
let result = self.allocate_single_addr_usize();
356+
self.codegen_read_vector_size_into(vector, result.address);
350357
result
351358
}
352359

0 commit comments

Comments
 (0)