4040#include " sta/TimingArc.hh"
4141#include " sta/Units.hh"
4242#include " utl/Logger.h"
43+ #include " utl/timer.h"
4344
4445namespace rsz {
4546
@@ -64,16 +65,6 @@ using BnetSeq = BufferedNetSeq;
6465using BnetPtr = BufferedNetPtr;
6566using BnetMetrics = BufferedNet::Metrics;
6667
67- // from Rebuffer.cc
68- void characterizeChoiceTree (dbNetwork* nwk,
69- int level,
70- const BufferedNetPtr& choice,
71- int & buffer_count,
72- int & load_count,
73- int & wire_count,
74- int & junction_count,
75- std::set<odb::dbModule*>& load_modules);
76-
7768// Template magic to make it easier to write algorithms descending
7869// over the buffer tree in the form of lambdas; it allows recursive
7970// lambda calling and it keeps track of the level number which is important
@@ -662,6 +653,7 @@ BnetPtr Rebuffer::bufferForTiming(const BnetPtr& tree,
662653 return opts1;
663654 }
664655
656+ utl::DebugScopedTimer timer (long_wire_stepping_runtime_);
665657 int round = 0 ;
666658 while (location != node->location ()) {
667659 debugPrint (logger_,
@@ -1771,79 +1763,6 @@ std::vector<Instance*> Rebuffer::collectImportedTreeBufferInstances(
17711763 return insts;
17721764}
17731765
1774- void characterizeChoiceTree (dbNetwork* nwk,
1775- int level,
1776- const BufferedNetPtr& choice,
1777- int & buffer_count,
1778- int & load_count,
1779- int & wire_count,
1780- int & junction_count,
1781- std::set<odb::dbModule*>& load_modules)
1782- {
1783- switch (choice->type ()) {
1784- case BufferedNetType::buffer: {
1785- buffer_count++;
1786- characterizeChoiceTree (nwk,
1787- level + 1 ,
1788- choice->ref (),
1789- buffer_count,
1790- load_count,
1791- wire_count,
1792- junction_count,
1793- load_modules);
1794- break ;
1795- }
1796- case BufferedNetType::wire: {
1797- wire_count++;
1798- characterizeChoiceTree (nwk,
1799- level + 1 ,
1800- choice->ref (),
1801- buffer_count,
1802- load_count,
1803- wire_count,
1804- junction_count,
1805- load_modules);
1806- break ;
1807- }
1808- case BufferedNetType::junction: {
1809- junction_count++;
1810- characterizeChoiceTree (nwk,
1811- level + 1 ,
1812- choice->ref (),
1813- buffer_count,
1814- load_count,
1815- wire_count,
1816- junction_count,
1817- load_modules);
1818- characterizeChoiceTree (nwk,
1819- level + 1 ,
1820- choice->ref2 (),
1821- buffer_count,
1822- load_count,
1823- wire_count,
1824- junction_count,
1825- load_modules);
1826- break ;
1827- }
1828- case BufferedNetType::load: {
1829- const Pin* load_pin = choice->loadPin ();
1830- odb::dbITerm* load_iterm = nullptr ;
1831- odb::dbBTerm* load_bterm = nullptr ;
1832- odb::dbModITerm* load_moditerm = nullptr ;
1833-
1834- nwk->staToDb (load_pin, load_iterm, load_bterm, load_moditerm);
1835- if (load_iterm) {
1836- dbInst* load_inst = load_iterm->getInst ();
1837- if (load_inst) {
1838- load_modules.insert (load_inst->getModule ());
1839- }
1840- }
1841- load_count++;
1842- break ;
1843- }
1844- }
1845- }
1846-
18471766// Martin (2024-04-18): This is copied over from original RepairSetup
18481767// buffering mostly unchanged and is ripe for clean-up/rewrite later.
18491768int Rebuffer::exportBufferTree (const BufferedNetPtr& choice,
@@ -2060,33 +1979,6 @@ int Rebuffer::fanout(Vertex* vertex) const
20601979 return fanout;
20611980}
20621981
2063- class ScopedTimer
2064- {
2065- public:
2066- using Clock = std::chrono::steady_clock;
2067-
2068- ScopedTimer (Logger* logger, double & accumulator)
2069- : logger_(logger), accumulator_(accumulator)
2070- {
2071- if (logger_->debugCheck (RSZ, " rebuffer" , 1 )) {
2072- start_ = Clock::now ();
2073- }
2074- }
2075-
2076- ~ScopedTimer ()
2077- {
2078- if (logger_->debugCheck (RSZ, " rebuffer" , 1 )) {
2079- accumulator_
2080- += std::chrono::duration<double >{Clock::now () - start_}.count ();
2081- }
2082- }
2083-
2084- private:
2085- Logger* logger_;
2086- double & accumulator_;
2087- std::chrono::time_point<Clock> start_;
2088- };
2089-
20901982void Rebuffer::setPin (Pin* drvr_pin)
20911983{
20921984 // set rebuffering globals
@@ -2118,6 +2010,7 @@ void Rebuffer::setPin(Pin* drvr_pin)
21182010void Rebuffer::fullyRebuffer (Pin* user_pin)
21192011{
21202012 double sta_runtime = 0 , bft_runtime = 0 , ra_runtime = 0 ;
2013+ long_wire_stepping_runtime_ = 0 ;
21212014
21222015 init ();
21232016 resizer_->ensureLevelDrvrVertices ();
@@ -2193,7 +2086,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
21932086 Vertex* drvr = graph_->pinDrvrVertex (drvr_pin);
21942087
21952088 {
2196- ScopedTimer timer (logger_, sta_runtime);
2089+ utl::DebugScopedTimer timer (sta_runtime);
21972090 search_->findRequireds (drvr->level ());
21982091 }
21992092
@@ -2241,7 +2134,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
22412134 BnetPtr timing_tree = unbuffered_tree;
22422135
22432136 {
2244- ScopedTimer timer (logger_, bft_runtime);
2137+ utl::DebugScopedTimer timer (bft_runtime);
22452138 for (int i = 0 ; i < 3 ; i++) {
22462139 timing_tree = bufferForTiming (timing_tree);
22472140 if (!timing_tree) {
@@ -2308,7 +2201,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
23082201
23092202 BnetPtr area_opt_tree = timing_tree;
23102203 {
2311- ScopedTimer timer (logger_, ra_runtime);
2204+ utl::DebugScopedTimer timer (ra_runtime);
23122205 for (int i = 0 ; i < 5 && area_opt_tree; i++) {
23132206 area_opt_tree
23142207 = recoverArea (area_opt_tree, target_slack, ((float ) (1 + i)) / 5 );
@@ -2398,7 +2291,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
23982291 estimate_parasitics_->updateParasitics ();
23992292
24002293 {
2401- ScopedTimer timer (logger_, sta_runtime);
2294+ utl::DebugScopedTimer timer (sta_runtime);
24022295 sta_->findDelays (max_level);
24032296 search_->findArrivals (max_level);
24042297 }
@@ -2416,6 +2309,12 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
24162309 debugPrint (logger_, RSZ, " rebuffer" , 1 , " STA {:.2f}" , sta_runtime);
24172310 debugPrint (
24182311 logger_, RSZ, " rebuffer" , 1 , " Buffer for timing {:.2f}" , bft_runtime);
2312+ debugPrint (logger_,
2313+ RSZ,
2314+ " rebuffer" ,
2315+ 1 ,
2316+ " of which long wire stepping {:.2f}" ,
2317+ long_wire_stepping_runtime_);
24192318 debugPrint (logger_, RSZ, " rebuffer" , 1 , " Recover area {:.2f}" , ra_runtime);
24202319}
24212320
0 commit comments