Skip to content

sync - #2

Open
nanocoh wants to merge 2832 commits into
keplertech:masterfrom
The-OpenROAD-Project:master
Open

sync#2
nanocoh wants to merge 2832 commits into
keplertech:masterfrom
The-OpenROAD-Project:master

Conversation

@nanocoh

@nanocoh nanocoh commented May 23, 2026

Copy link
Copy Markdown

Summary

[Describe your changes here]

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring
  • Documentation update

Impact

[How does this change the tool's behavior?]

Verification

  • I have verified that the local build succeeds (./etc/Build.sh).
  • I have run the relevant tests and they pass.
  • My code follows the repository's formatting guidelines.
  • I have included tests to prevent regressions.
  • I have signed my commits (DCO).

Related Issues

[Link issues here]

tmarhguy and others added 25 commits August 9, 2026 14:06
Allow trailing whitespace after the terminating semicolon in LEF58_MINWIDTH
rules so properties like "MINWIDTH 1.0 WRONGDIRECTION ; " parse cleanly.

Add C++ and Tcl regression tests with a multiline LEF58_MINWIDTH property
matching production tech LEF formatting.

Fixes #4252

Signed-off-by: Tyrone Marhguy <tyronemarhguy@gmail.com>
Signed-off-by: Tyrone Marhguy <tyronemarhguy@gmail.com>
Simplify trailing-whitespace handling per review feedback on #11107.

Signed-off-by: Tyrone Marhguy <tyronemarhguy@gmail.com>
Fix integer truncation bug in RepairDesign::repairNetWire
web: fix bbox and add debugPrints
Register the tests from regression_tests_large.tcl (macro01-03,
medium01-06, large01-02) as Bazel regression_test targets tagged
'manual' so they are excluded from the default 'bazel test //...'
wildcard. Add a :large_tests test_suite to run them explicitly and
update their stale golden .ok files to match current GPL log output.

Run with: bazel test //src/gpl/test:large_tests

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Extend the :test_resources exclude list to cover ALL_TESTS + LARGE_TESTS
(not just TESTS) so editing a large or passfail test's .tcl/.py no longer
invalidates the shared filegroup and re-runs every standard test.

.ok golden files are intentionally left in test_resources: they reach
each test only through this filegroup (the regression_test macro sets no
per-test golden_file), so excluding them would break log diffing.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…-large-tests

gpl: add separate Bazel targets for long-running regression tests
This code clearly articulates the intent that fixPointers *must* be run.
If an exception is thrown or we add some early exit on futile runs
(discovered in futility policy experiments), we're not suckerpunched
by unfixed pointers.

To prevent this, we inject a std::shared_ptr RAII guard (scope_exit
at home) scoped around findResizeSlacks to guarantee nbc_->fixPointers()
executes unconditionally upon exiting the scope.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Remove NewToolDocExample.md: it contradicted ReadmeFormat.md and
produced READMEs the man page parser rejects. Its only reference was
the conf.py entry excluding it from the build.

Fix 14 broken relative links. est pointed at rsz sources, ifp at a
misspelled InitFloorPlan.i, grt at a URL with no scheme. The empty
[source file]() targets in ReadmeFormat.md propagated into every tool
README that copied the template.

Keep the main/docs exclude in conf.py: docs/main symlinks to the repo
root, so dropping it makes Sphinx discover every page twice.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
Address review feedback from Matt to use boost scoped_exit
instead of std::shared_ptr.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Added boost.scope_exit bazel dependency.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
…in-height

odb/tap: cut row segments in narrow regions
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
FastRouteCore::getCongestionNets iterated over every overflow position
and for each position, checked intersection with every net in the design.
This created an O(P * N) bottleneck that caused the router to hang for
hours on congested designs where P and N are both large.

Replace the pointer-chasing intersection checks with a boolean grid map.
First, project all overflow positions onto 2D boolean arrays. Then,
iterate over the nets once to check if any segments overlap with a
congested grid cell. This reduces the complexity to O(P + N),
eliminating the bottleneck.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Bring secure-replace-bracket up to the current private master before public synchronization. Preserve the namespace-collision fixes while incorporating upstream changes through a non-rewriting merge.

Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Build the router state synthetically through the public API (addNet,
addTreeEdge, updateEdge2DAnd3DUsage) on a 10x10 grid and pin the
behavior of getCongestionNets: nets crossing overflowed gcells are
selected, horizontal overflow only matches horizontal segments (and
vice versa), clock nets are excluded, the search radius expands only
until new nets are found, capped at 4, and nets already in the set do
not stop the expansion.

The same suite passes against the previous O(positions * nets)
implementation, certifying the boolean-grid rewrite is behavior
preserving without needing the large proprietary design that exposed
the bottleneck.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
findNetsNearPosition lost its last caller when getCongestionNets
switched to the boolean grid lookup. Also return early when there are
no overflow positions (the net scan would otherwise walk every route
against empty grids five times) and const-qualify locals.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
arthurjolo and others added 30 commits August 18, 2026 20:03
Signed-off-by: arthurjolo <arthurjl@precisioninno.com>
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
…ate/OpenROAD into grt_cugr_jumper_insertion

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>

# Conflicts:
#	src/grt/test/repair_antennas2_cugr.guideok
#	src/grt/test/repair_antennas4_cugr.guideok
…heck

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
web: add rudy heatmap view as save_image -web display option
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: arthurjolo <arthurjl@precisioninno.com>
Signed-off-by: Minju Kim <mkim@precisioninno.com>
…_sta_update_0814

Update sta ptr to 08/14
//docs:man_pages produced no man3 pages at all. md_roff_compat.py read
../src/<module>/messages.txt from the source tree, but those files are
generated: CMake writes them in-tree while bazel writes them under
bazel-out, and the unsandboxed action sees only declared inputs. Every
message page was skipped with "doesn't exist. Continuing". cat3 and html3
now hold 3408 pages each, up from 0.

md_roff_compat.py takes the layout root from MESSAGES_ROOT_DIR, defaulting
to the repository root so the CMake paths are unchanged, and man_pages.bzl
points it at the bin dir, whose layout already matches.

Two inputs had nowhere to come from: the ORD messages, which live in src/
itself and had no bazel target, and //src/gui:messages_txt, which existed
but was not visible to //docs.

The generated messages.txt were incomplete as well. The messages_txt glob
was not recursive and omitted .cxx and .i, so modules keeping logger calls
below src/ lost them: 311 in drt, 90 in grt, 74 in dpl, 21 in rsz, 18 in
utl, 15 in gui. The default glob now recurses over the extension set
find_messages.py scans, and sub-packages hand their sources over through a
shared message_srcs macro, new for dft's seven and replacing three
divergent hand-written extension lists in odb and syn.

cut and tst join the documented modules. cut's messages() call was the only
one in a src/<module>/src/CMakeLists.txt without OUTPUT_DIR .., so CMake
wrote src/cut/src/messages.txt where every other module writes
src/<module>/messages.txt; tst had no messages() call. Neither exposes Tcl
commands, so both are excluded from man2. tst's one logger call named
utl::RSZ 0, which is not a resizer message, and is now utl::TST 1.

//:dup_id_test passed unconditionally. It ran find_messages.py -d src from
its runfiles directory, which holds only the script, so it walked a
nonexistent path, found zero messages and exited 0; an injected duplicate
left it green. It now resolves the workspace through its MODULE.bazel
runfiles symlink, the handle the lint tests already use. That single walk
also covers cross-module collisions, which the per-module genrules cannot
see: each module's messages.txt is individually duplicate-free when the two
sites sit in different modules.

The lint and format tests shared the resulting caching hole. They scan the
git worktree rather than declared inputs, so nothing invalidates a cached
result and all five reported "(cached) PASSED" after a source edit. Tagging
them external forces a re-run.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…3-messages

docs: generate man3 pages in the bazel man page build
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
rcx: fix bench_wires segfault on duplicate pattern names
Causes excessive QoR loss.

This reverts commit 8328314, reversing
changes made to c536d9d.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
rcx: create struct for the unit scale factors to avoid duplicated code on 3D pass
Revert "Merge pull request #11066 from oharboe/rsz-futility-limit"
…ve-cg-ndr

CTS: improve NDR for clock nets
…jumper_insertion

grt/cugr: enable jumper insertion on repair_antennas
This adds a 64KB buffer size to boost::iostreams::gzip_compressor
and boost::iostreams::gzip_decompressor in OutStreamHandler and
InStreamHandler to improve write_db / read_db performance when
using gzip.

Signed-off-by: Debayan Bandyopadhyay <dbandyopadhyay@google.com>
Following review feedback, changed kGzipBufferSize to std::streamsize
and moved it inside the anonymous namespace to avoid polluting the utl
namespace and prevent narrowing conversions.

Signed-off-by: Debayan Bandyopadhyay <dbandyopadhyay@google.com>
…o_max_cap_crash

Cts: fix crash when library has no max_capacitance for clock buffers
docs(cts): fix -sink_clustering_size/-max_diameter auto-selection description (#10602)
…evel

utl: Use 64KB buffer for gzip compression and decompression
…_actions/actions/setup-java-5.7.0

build(deps): bump actions/setup-java from 5.5.0 to 5.7.0
Signed-off-by: Debayan Bandyopadhyay <dbandyopadhyay@google.com>
…compression-level

Revert "utl: Use 64KB buffer for gzip compression and decompression"
…ncurrent-io-e5

gpl: concurrent IO pin + cell placement in global placement
The test reports whether each report writer created its output file, and
asserts write_pg_spice creates nothing before a solution exists. Since
make_result_file only builds a path, output from an earlier run in the
same results/ was still present, so the pre-analysis check read 1 and the
test failed on every run after the first.

Delete the three output files up front so the checks start from a known
absent state. Bazel gives each run a fresh TEST_TMPDIR, so this only
affected repeated local ctest runs.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…eport-writers-test-idempotency

psm: clear stale outputs in report_writers_require_solution test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.