From 60fadc2771fc0cee5c7a58fc3f644a5c74dbf5cf Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 23 Apr 2025 16:54:23 -0700 Subject: [PATCH] path enum diversion slack limit Signed-off-by: James Cherry --- search/PathEnum.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/search/PathEnum.cc b/search/PathEnum.cc index 3b52c191..0bf86c5a 100644 --- a/search/PathEnum.cc +++ b/search/PathEnum.cc @@ -354,7 +354,12 @@ PathEnumFaninVisitor::visitFromToPath(const Pin *, makeDivertedPathEnd(from_path, edge, arc, div_end, after_div_copy); if (div_end) { // Only enumerate paths with greater slack. - if (div_end->slack(this) >= (path_end_slack_ * (1.0-.001))) { + // fuzz for difference in updatePathHeadDelays and accumulated arrivals. + float fuzz = .001; + float slack_limit = path_end_slack_ > 0 + ? path_end_slack_ * (1.0 - fuzz) + : path_end_slack_ * (1.0 + fuzz); + if (delayGreaterEqual(div_end->slack(this), slack_limit, this)) { reportDiversion(edge, arc, from_path); path_enum_->makeDiversion(div_end, after_div_copy); visited_fanins_.emplace(from_vertex, arc);