From c57bf0dda6dc3d5c4a655c70bfc390fd933e155d Mon Sep 17 00:00:00 2001 From: ilyalesokhin-starkware Date: Sun, 12 May 2024 13:53:10 +0300 Subject: [PATCH] Add number of add and mul gates to CircuitDescriptor. (#5546) --- .../cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs | 2 +- .../cairo-lang-sierra-to-casm/src/invocations/circuit.rs | 6 +++++- crates/cairo-lang-sierra-type-size/src/lib.rs | 4 ++-- tests/e2e_test_data/libfuncs/circuit | 8 +++++--- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs b/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs index 8a72402e4cd..432945195fc 100644 --- a/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs +++ b/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs @@ -475,7 +475,7 @@ pub fn core_libfunc_cost( vec![ConstCost::steps(7).into(), ConstCost::steps(8).into()] } Circuit(CircuitConcreteLibfunc::GetDescriptor(_)) => { - vec![ConstCost::steps(3).into()] + vec![ConstCost::steps(6).into()] } Circuit(CircuitConcreteLibfunc::InitCircuitData(_)) => vec![ConstCost::steps(0).into()], } diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/circuit.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/circuit.rs index ba1b71c3123..8484a4c63a6 100644 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/circuit.rs +++ b/crates/cairo-lang-sierra-to-casm/src/invocations/circuit.rs @@ -100,7 +100,7 @@ fn build_get_descriptor( circuit_ty: &ConcreteTypeId, builder: CompiledInvocationBuilder<'_>, ) -> Result { - let CircuitInfo { add_offsets, .. } = + let CircuitInfo { add_offsets, mul_offsets, .. } = builder.program_info.circuits_info.circuits.get(circuit_ty).unwrap(); let ctx = casm! { @@ -111,7 +111,9 @@ fn build_get_descriptor( // constant value (the `1` is to skip the `ret` instruction). // TODO(Gil): Support relocatable CellExpression and return an unstored "[ap - 1] + 1". [ap] = [ap - 1] + 1, ap++; + [ap] = (add_offsets.len()), ap++; [ap] = [ap - 1] + (add_offsets.len() * VALUE_SIZE), ap++; + [ap] = (mul_offsets.len()), ap++; }; let relocations = vec![ @@ -129,6 +131,8 @@ fn build_get_descriptor( relocations, [vec![ReferenceExpression { cells: vec![ + CellExpression::Deref(CellRef { register: Register::AP, offset: -4 }), + CellExpression::Deref(CellRef { register: Register::AP, offset: -3 }), CellExpression::Deref(CellRef { register: Register::AP, offset: -2 }), CellExpression::Deref(CellRef { register: Register::AP, offset: -1 }), ], diff --git a/crates/cairo-lang-sierra-type-size/src/lib.rs b/crates/cairo-lang-sierra-type-size/src/lib.rs index 2533dc979b7..a6bce80cf73 100644 --- a/crates/cairo-lang-sierra-type-size/src/lib.rs +++ b/crates/cairo-lang-sierra-type-size/src/lib.rs @@ -80,8 +80,8 @@ pub fn get_type_size_map( Some(size) } - CoreTypeConcrete::Circuit(CircuitTypeConcrete::CircuitInputAccumulator(_)) - | CoreTypeConcrete::Circuit(CircuitTypeConcrete::CircuitDescriptor(_)) => Some(2), + CoreTypeConcrete::Circuit(CircuitTypeConcrete::CircuitInputAccumulator(_)) => Some(2), + CoreTypeConcrete::Circuit(CircuitTypeConcrete::CircuitDescriptor(_)) => Some(4), CoreTypeConcrete::Circuit(CircuitTypeConcrete::CircuitData(_)) | CoreTypeConcrete::Circuit(CircuitTypeConcrete::CircuitOutput(_)) | CoreTypeConcrete::Circuit(CircuitTypeConcrete::AddMod(_)) diff --git a/tests/e2e_test_data/libfuncs/circuit b/tests/e2e_test_data/libfuncs/circuit index 4871954d07d..085ca1c01ea 100644 --- a/tests/e2e_test_data/libfuncs/circuit +++ b/tests/e2e_test_data/libfuncs/circuit @@ -139,9 +139,11 @@ fn foo() -> CircuitDescriptor { } //! > casm -call rel 7; -[ap + 0] = [ap + -1] + 6, ap++; +call rel 11; +[ap + 0] = [ap + -1] + 10, ap++; +[ap + 0] = 1, ap++; [ap + 0] = [ap + -1] + 4, ap++; +[ap + 0] = 2, ap++; ret; ret; dw 16; @@ -170,7 +172,7 @@ return([0]); // 1 test::foo@0() -> (CircuitDescriptor<(core::circuit::AddModGate::, core::circuit::CircuitInput::<1>>, core::circuit::CircuitInput::<2>)>); //! > function_costs -test::foo: OrderedHashMap({Const: 300}) +test::foo: OrderedHashMap({Const: 600}) //! > ==========================================================================