mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-17 16:11:26 -05:00
fix(optimizer): compiler output forwarding
In the optimizer, nodes without consumers are identified as outputs. Since we can now return multiple values, this is inherently buggy, since a value can then be both returned, and consumed to create another input. This commit fixes this by allowing the compiler to tag nodes as being outputs.
This commit is contained in:
committed by
Alexandre Péré
parent
166a3217ad
commit
a02bf3bae9
@@ -976,6 +976,7 @@ struct OperationDag final : public ::rust::Opaque {
|
||||
::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept;
|
||||
::concrete_optimizer::dag::DagSolution optimize(::concrete_optimizer::Options options) const noexcept;
|
||||
::rust::String dump() const noexcept;
|
||||
void tag_operator_as_output(::concrete_optimizer::dag::OperatorIndex op) noexcept;
|
||||
::concrete_optimizer::dag::CircuitSolution optimize_multi(::concrete_optimizer::Options options) const noexcept;
|
||||
~OperationDag() = delete;
|
||||
|
||||
@@ -1312,6 +1313,8 @@ extern "C" {
|
||||
} // namespace weights
|
||||
|
||||
extern "C" {
|
||||
void concrete_optimizer$cxxbridge1$OperationDag$tag_operator_as_output(::concrete_optimizer::OperationDag &self, ::concrete_optimizer::dag::OperatorIndex op) noexcept;
|
||||
|
||||
void concrete_optimizer$cxxbridge1$OperationDag$optimize_multi(::concrete_optimizer::OperationDag const &self, ::concrete_optimizer::Options options, ::concrete_optimizer::dag::CircuitSolution *return$) noexcept;
|
||||
|
||||
::std::uint64_t concrete_optimizer$cxxbridge1$NO_KEY_ID() noexcept;
|
||||
@@ -1419,6 +1422,10 @@ namespace weights {
|
||||
}
|
||||
} // namespace weights
|
||||
|
||||
void OperationDag::tag_operator_as_output(::concrete_optimizer::dag::OperatorIndex op) noexcept {
|
||||
concrete_optimizer$cxxbridge1$OperationDag$tag_operator_as_output(*this, op);
|
||||
}
|
||||
|
||||
::concrete_optimizer::dag::CircuitSolution OperationDag::optimize_multi(::concrete_optimizer::Options options) const noexcept {
|
||||
::rust::MaybeUninit<::concrete_optimizer::dag::CircuitSolution> return$;
|
||||
concrete_optimizer$cxxbridge1$OperationDag$optimize_multi(*this, options, &return$.value);
|
||||
|
||||
@@ -957,6 +957,7 @@ struct OperationDag final : public ::rust::Opaque {
|
||||
::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept;
|
||||
::concrete_optimizer::dag::DagSolution optimize(::concrete_optimizer::Options options) const noexcept;
|
||||
::rust::String dump() const noexcept;
|
||||
void tag_operator_as_output(::concrete_optimizer::dag::OperatorIndex op) noexcept;
|
||||
::concrete_optimizer::dag::CircuitSolution optimize_multi(::concrete_optimizer::Options options) const noexcept;
|
||||
~OperationDag() = delete;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user