From e9eed3842b9d41ca841f9d7b84702b3280525eac Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 18 Aug 2019 19:09:07 +0200 Subject: [PATCH] Fix for layout query performance improvement: needs to check for qualified cell name (with lib), not pure cellname --- src/db/db/dbLayoutQuery.cc | 12 +----------- src/db/unit_tests/dbLayoutQueryTests.cc | 6 +++++- .../streamers/oasis/unit_tests/dbOASISWriter.cc | 2 +- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/db/db/dbLayoutQuery.cc b/src/db/db/dbLayoutQuery.cc index dfbdf3866..ff76e8833 100644 --- a/src/db/db/dbLayoutQuery.cc +++ b/src/db/db/dbLayoutQuery.cc @@ -561,23 +561,13 @@ public: } - } else if (m_pattern.is_const ()) { - - objectives ().set_wants_all_cells (false); - - // include the cell with the name we look for into the objectives - std::pair cell_by_name = layout ()->cell_by_name (m_pattern.pattern ().c_str ()); - if (cell_by_name.first) { - objectives ().request_cell (cell_by_name.second); - } - } else { objectives ().set_wants_all_cells (false); // include all matching cells into the objectives for (db::Layout::const_iterator c = layout ()->begin (); c != layout ()->end(); ++c) { - if (m_pattern.match (layout ()->cell_name (c->cell_index()))) { + if (m_pattern.match (c->get_qualified_name ())) { objectives ().request_cell (c->cell_index ()); } } diff --git a/src/db/unit_tests/dbLayoutQueryTests.cc b/src/db/unit_tests/dbLayoutQueryTests.cc index 46fbf22bd..4349392de 100644 --- a/src/db/unit_tests/dbLayoutQueryTests.cc +++ b/src/db/unit_tests/dbLayoutQueryTests.cc @@ -1382,6 +1382,8 @@ TEST(62) for (std::vector::const_iterator p = pd.begin (); p != pd.end (); ++p) { if (p->get_name () == "text") { values.push_back (tl::Variant ("T1")); + } else if (p->get_name () == "layer") { + values.push_back (tl::Variant (db::LayerProperties (1, 0))); } else { values.push_back (p->get_default ()); } @@ -1393,6 +1395,8 @@ TEST(62) for (std::vector::const_iterator p = pd.begin (); p != pd.end (); ++p) { if (p->get_name () == "text") { values.push_back (tl::Variant ("T2")); + } else if (p->get_name () == "layer") { + values.push_back (tl::Variant (db::LayerProperties (2, 0))); } else { values.push_back (p->get_default ()); } @@ -1436,7 +1440,7 @@ TEST(62) db::LayoutQuery q ("instances of ...\"Basic.*\""); db::LayoutQueryIterator iq (q, &g); std::string s = q2s_expr (iq, "inst.cell.display_title"); - EXPECT_EQ (s, "Basic.TEXT('T2'),Basic.TEXT('T1'),Basic.TEXT('T1')"); + EXPECT_EQ (s, "Basic.TEXT(l=2/0,'T2'),Basic.TEXT(l=1/0,'T1'),Basic.TEXT(l=1/0,'T1')"); } { diff --git a/src/plugins/streamers/oasis/unit_tests/dbOASISWriter.cc b/src/plugins/streamers/oasis/unit_tests/dbOASISWriter.cc index 13aef7df0..c682bd61a 100644 --- a/src/plugins/streamers/oasis/unit_tests/dbOASISWriter.cc +++ b/src/plugins/streamers/oasis/unit_tests/dbOASISWriter.cc @@ -1769,7 +1769,7 @@ TEST(119_WithAndWithoutContext) const db::Cell &text_cell = gg.cell (tc.second); EXPECT_EQ (text_cell.is_proxy (), true); - EXPECT_EQ (text_cell.get_display_name (), "Basic.TEXT('KLAYOUT RULES')"); + EXPECT_EQ (text_cell.get_display_name (), "Basic.TEXT(l=1/0,'KLAYOUT RULES')"); CHECKPOINT (); db::compare_layouts (_this, gg, tl::testsrc () + "/testdata/oasis/dbOASISWriter119_au.gds", db::NoNormalization);