@@ -3347,18 +3347,18 @@ void dbBlock::destroyNetWires()
33473347 }
33483348}
33493349
3350- int dbBlock::globalConnect (bool force)
3350+ int dbBlock::globalConnect (bool force, bool verbose )
33513351{
33523352 dbSet<dbGlobalConnect> gcs = getGlobalConnects ();
33533353 const std::vector<dbGlobalConnect*> connects (gcs.begin (), gcs.end ());
33543354 _dbBlock* dbblock = (_dbBlock*) this ;
3355- return dbblock->globalConnect (connects, force);
3355+ return dbblock->globalConnect (connects, force, verbose );
33563356}
33573357
3358- int dbBlock::globalConnect (dbGlobalConnect* gc, bool force)
3358+ int dbBlock::globalConnect (dbGlobalConnect* gc, bool force, bool verbose )
33593359{
33603360 _dbBlock* dbblock = (_dbBlock*) this ;
3361- return dbblock->globalConnect ({gc}, force);
3361+ return dbblock->globalConnect ({gc}, force, verbose );
33623362}
33633363
33643364void dbBlock::clearGlobalConnect ()
@@ -3419,13 +3419,14 @@ int dbBlock::addGlobalConnect(dbRegion* region,
34193419 = odb::dbGlobalConnect::create (net, region, instPattern, pinPattern);
34203420
34213421 if (gc != nullptr && do_connect) {
3422- return globalConnect (gc, false );
3422+ return globalConnect (gc, false , false );
34233423 }
34243424 return 0 ;
34253425}
34263426
34273427int _dbBlock::globalConnect (const std::vector<dbGlobalConnect*>& connects,
3428- bool force)
3428+ bool force,
3429+ bool verbose)
34293430{
34303431 _dbBlock* dbblock = (_dbBlock*) this ;
34313432 utl::Logger* logger = dbblock->getImpl ()->getLogger ();
@@ -3440,6 +3441,7 @@ int _dbBlock::globalConnect(const std::vector<dbGlobalConnect*>& connects,
34403441 std::vector<_dbGlobalConnect*> region_rules;
34413442
34423443 std::set<dbITerm*> connected_iterms;
3444+ std::set<dbITerm*> skipped_iterms;
34433445 // only search for instances once
34443446 std::map<std::string, std::vector<dbInst*>> inst_map;
34453447 std::set<dbInst*> donottouchinsts;
@@ -3473,9 +3475,8 @@ int _dbBlock::globalConnect(const std::vector<dbGlobalConnect*>& connects,
34733475
34743476 inst_map[inst_pattern] = insts;
34753477
3476- _dbGlobalConnect* connect_rule = (_dbGlobalConnect*) connect;
34773478 for (dbInst* inst : remove_insts) {
3478- if (connect_rule ->needsModification (inst)) {
3479+ if (gc ->needsModification (inst)) {
34793480 donottouchinsts.insert (inst);
34803481 }
34813482 }
@@ -3492,14 +3493,25 @@ int _dbBlock::globalConnect(const std::vector<dbGlobalConnect*>& connects,
34923493 }
34933494
34943495 for (_dbGlobalConnect* connect : non_region_rules) {
3495- const auto connections
3496+ const auto & [ connections, skipped]
34963497 = connect->connect (inst_map[connect->inst_pattern_ ], force);
34973498 connected_iterms.insert (connections.begin (), connections.end ());
3499+ skipped_iterms.insert (skipped.begin (), skipped.end ());
34983500 }
34993501 for (_dbGlobalConnect* connect : region_rules) {
3500- const auto connections
3502+ const auto & [ connections, skipped]
35013503 = connect->connect (inst_map[connect->inst_pattern_ ], force);
35023504 connected_iterms.insert (connections.begin (), connections.end ());
3505+ skipped_iterms.insert (skipped.begin (), skipped.end ());
3506+ }
3507+
3508+ if (verbose) {
3509+ logger->info (utl::ODB,
3510+ 403 ,
3511+ " {} connections made, {} conflicts skipped{}" ,
3512+ connected_iterms.size (),
3513+ skipped_iterms.size (),
3514+ skipped_iterms.empty () ? " ." : " , use -force to connect." );
35033515 }
35043516
35053517 return connected_iterms.size ();
0 commit comments