From 4037a90d4b813a00728740fa2e8e0eaefb7b1c6c Mon Sep 17 00:00:00 2001
From: bhalimi <benjamin.halimi@cea.fr>
Date: Wed, 2 Apr 2025 12:48:11 +0000
Subject: [PATCH] fix appendRoundClip() (associateInput/associateOutput)

---
 src/operator/PTQMetaOps.cpp | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/operator/PTQMetaOps.cpp b/src/operator/PTQMetaOps.cpp
index 8febfd5..9a41715 100644
--- a/src/operator/PTQMetaOps.cpp
+++ b/src/operator/PTQMetaOps.cpp
@@ -119,7 +119,7 @@ void appendRoundClip(std::shared_ptr<Node> metaOpNode, double clipMin, double cl
     auto newMulNode = Mul(); 
     auto roundNode = Round();
     auto clipNode = Clip(""); //, clipMin, clipMax);
-    auto newCoeffNode = mulNode->getParent(1)->clone(); // UUU Producer(coeffTensor);
+    auto newCoeffNode = mulNode->getParent(1)->clone(); // XXX Producer(coeffTensor);
 
     // create the new micrograph
 
@@ -130,9 +130,12 @@ void appendRoundClip(std::shared_ptr<Node> metaOpNode, double clipMin, double cl
     // manually connect the IOs !!!
 
     auto newMulOp = std::static_pointer_cast<OperatorTensor> (newMulNode->getOperator()); 
-    newMulOp->setInput(0, mulOp->getInput(0));   // MANDATORY (because we need an input tensor)
+    newMulOp->associateInput(0, mulOp->getInput(0)); // MANDATORY (because we need an input tensor)
     auto clipOp = std::static_pointer_cast<Clip_Op> (clipNode->getOperator()); 
-    clipOp->setOutput(0, mulOp->getOutput(0)); // MANDATORY ? YES !!!  
+    clipOp->associateOutput(0, mulOp->getOutput(0)); //  MANDATORY ? YES !!! 
+
+    // Log::notice( " old mul ref count : {}", mulOp->getOutput(0)->getImpl().use_count());
+    // Log::notice( " new mul ref count : {}", newMulOp->getOutput(0)->getImpl().use_count());
 
     // Connect the clip min and max tensors
 
@@ -145,16 +148,15 @@ void appendRoundClip(std::shared_ptr<Node> metaOpNode, double clipMin, double cl
     newMicroGraph->add(minNode);
     newMicroGraph->add(maxNode);
 
-    // set backend
+    // set the backend/datatype
 
     newMicroGraph->setBackend(backend);
     newMicroGraph->setDataType(dataType);
-
+    
     // reset the scheduling
 
     SequentialScheduler scheduler(newMicroGraph);
     scheduler.resetScheduling();
-    //scheduler.generateScheduling();
 
     // set the micrograph
 
-- 
GitLab