@@ -195,8 +195,7 @@ bool UnbufferMove::doMove(const Path* drvr_path,
195195 1 ,
196196 " ACCEPT unbuffer {}" ,
197197 network_->pathName (drvr));
198- removeBuffer (drvr);
199- return true ;
198+ return removeBuffer (drvr);
200199 }
201200 debugPrint (logger_,
202201 RSZ,
@@ -213,8 +212,7 @@ bool UnbufferMove::removeBufferIfPossible(Instance* buffer,
213212 bool honorDontTouchFixed)
214213{
215214 if (canRemoveBuffer (buffer, honorDontTouchFixed)) {
216- removeBuffer (buffer);
217- return true ;
215+ return removeBuffer (buffer);
218216 }
219217 return false ;
220218}
@@ -327,7 +325,7 @@ bool UnbufferMove::canRemoveBuffer(Instance* buffer, bool honorDontTouchFixed)
327325 return false ;
328326}
329327
330- void UnbufferMove::removeBuffer (Instance* buffer)
328+ bool UnbufferMove::removeBuffer (Instance* buffer)
331329{
332330 LibertyCell* lib_cell = network_->libertyCell (buffer);
333331 debugPrint (logger_,
@@ -338,18 +336,12 @@ void UnbufferMove::removeBuffer(Instance* buffer)
338336 network_->pathName (buffer),
339337 lib_cell->name ());
340338
341- addMove (buffer);
342-
343339 LibertyPort *in_port, *out_port;
344340 lib_cell->bufferPorts (in_port, out_port);
345341
346342 Pin* in_pin = db_network_->findPin (buffer, in_port);
347343 Pin* out_pin = db_network_->findPin (buffer, out_port);
348344
349- // Hierarchical net handling
350- odb::dbModNet* op_modnet = db_network_->hierNet (out_pin);
351- odb::dbModNet* ip_modnet = db_network_->hierNet (in_pin);
352-
353345 odb::dbNet* in_db_net = db_network_->flatNet (in_pin);
354346 odb::dbNet* out_db_net = db_network_->flatNet (out_pin);
355347
@@ -360,14 +352,16 @@ void UnbufferMove::removeBuffer(Instance* buffer)
360352 168 ,
361353 " The input pin of buffer '{}' is undriven. Do not remove the buffer." ,
362354 network_->pathName (buffer));
363- return ;
355+ return false ;
364356 }
365357
358+ addMove (buffer);
359+
366360 // Remove the unused buffer
367361 if (out_db_net == nullptr ) {
368362 dbInst* dbinst_buffer = db_network_->staToDb (buffer);
369363 dbInst::destroy (dbinst_buffer);
370- return ;
364+ return true ;
371365 }
372366
373367 // in_net and out_net are flat nets.
@@ -377,6 +371,8 @@ void UnbufferMove::removeBuffer(Instance* buffer)
377371 // Decide survivor net when two nets are merged
378372 Net* survivor = in_net; // buffer input net is the default survivor
379373 Net* removed = out_net;
374+ odb::dbModNet* op_modnet = db_network_->hierNet (out_pin);
375+ odb::dbModNet* ip_modnet = db_network_->hierNet (in_pin);
380376 odb::dbModNet* survivor_modnet = ip_modnet;
381377 odb::dbModNet* removed_modnet = op_modnet;
382378 bool in_net_has_port = db_network_->hasPort (in_net);
@@ -455,6 +451,8 @@ void UnbufferMove::removeBuffer(Instance* buffer)
455451 if (survivor_modnet != nullptr && new_modnet_name) {
456452 survivor_modnet->rename (new_modnet_name->c_str ());
457453 }
454+
455+ return true ;
458456}
459457
460458} // namespace rsz
0 commit comments