From be56eadb47c7c8afd9c131d883f06521035107c2 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 15 Jan 2026 16:14:42 -0700 Subject: [PATCH] SearchPred0 not thru timing checks Signed-off-by: James Cherry --- include/sta/Search.hh | 1 - include/sta/SearchPred.hh | 6 ++++-- search/Search.cc | 1 - search/SearchPred.cc | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/sta/Search.hh b/include/sta/Search.hh index 9889be75..09bc1687 100644 --- a/include/sta/Search.hh +++ b/include/sta/Search.hh @@ -673,7 +673,6 @@ protected: // Eval across latch D->Q edges. // SearchPred0 unless -// timing check edge // disabled loop // disabled converging clock edge (Xilinx) // clk source pin diff --git a/include/sta/SearchPred.hh b/include/sta/SearchPred.hh index c1e4c21a..314c3dca 100644 --- a/include/sta/SearchPred.hh +++ b/include/sta/SearchPred.hh @@ -34,10 +34,12 @@ namespace sta { // Class hierarchy: // SearchPred // SearchAdj (unless loop disabled, latch D->Q, timing check, dynamic loop) -// SearchPred0 (unless disabled or constant) -// EvalPred (unless timing check) +// SearchPred0 (unless timing check, disabled or constant) +// EvalPred (unless dynamic loop breaking) // SearchThru (unless latch D->Q) +// GenClkInsertionSearchPred // SearchPred1 (unless loop disabled) +// FanOutSrchPred // ClkTreeSearchPred (only wire or combinational) // Virtual base class for search predicates. diff --git a/search/Search.cc b/search/Search.cc index be52ad10..248477d4 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -96,7 +96,6 @@ EvalPred::searchThru(Edge *edge, return SearchPred0::searchThru(edge, mode) && (sta_->variables()->dynamicLoopBreaking() || !edge->isDisabledLoop()) - && !role->isTimingCheck() && (search_thru_latches_ || role->isLatchDtoQ() || sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open); diff --git a/search/SearchPred.cc b/search/SearchPred.cc index da7d5236..e2654efd 100644 --- a/search/SearchPred.cc +++ b/search/SearchPred.cc @@ -116,7 +116,8 @@ SearchPred0::searchThru(Edge *edge, const Variables *variables = sta_->variables(); const Sdc *sdc = mode->sdc(); const Sim *sim = mode->sim(); - return !(sdc->isDisabledConstraint(edge) + return !(role->isTimingCheck() + || sdc->isDisabledConstraint(edge) // Constants disable edge cond expression. || sim->isDisabledCond(edge) || sdc->isDisabledCondDefault(edge)