From 3001473ae5280469ad3e4a057d7a43f5482c1f36 Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Wed, 21 May 2025 16:09:39 +1200 Subject: [PATCH 1/3] functional.cc: Maintain port ordering Based on #4753. --- kernel/functional.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/functional.cc b/kernel/functional.cc index adf7bfb0c..178995de8 100644 --- a/kernel/functional.cc +++ b/kernel/functional.cc @@ -518,10 +518,12 @@ public: if (cell->type.in(ID($assert), ID($assume), ID($live), ID($fair), ID($cover), ID($check))) queue.emplace_back(cell); } - for (auto wire : module->wires()) { - if (wire->port_input) + for (auto port : module->ports) { + auto *wire = module->wire(port); + if (wire && wire->port_input) { factory.add_input(wire->name, ID($input), Sort(wire->width)); - if (wire->port_output) { + } + if (wire && wire->port_output) { auto &output = factory.add_output(wire->name, ID($output), Sort(wire->width)); output.set_value(enqueue(DriveChunk(DriveChunkWire(wire, 0, wire->width)))); } From 847558547b04c309a6ebe350d2ae2bd4f01da60a Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Wed, 21 May 2025 16:21:27 +1200 Subject: [PATCH 2/3] functional.cc: Reverse port iteration --- kernel/functional.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/functional.cc b/kernel/functional.cc index 178995de8..4983703e3 100644 --- a/kernel/functional.cc +++ b/kernel/functional.cc @@ -518,8 +518,8 @@ public: if (cell->type.in(ID($assert), ID($assume), ID($live), ID($fair), ID($cover), ID($check))) queue.emplace_back(cell); } - for (auto port : module->ports) { - auto *wire = module->wire(port); + for (auto riter = module->ports.rbegin(); riter != module->ports.rend(); ++riter) { + auto *wire = module->wire(*riter); if (wire && wire->port_input) { factory.add_input(wire->name, ID($input), Sort(wire->width)); } From 6e3922e1c76a8ea2c689daab4d04198af92a387f Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Sat, 31 May 2025 09:57:43 +1200 Subject: [PATCH 3/3] functional.cc: Explicit unsorted-pool-as-LIFO --- kernel/functional.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/functional.cc b/kernel/functional.cc index 4983703e3..211527926 100644 --- a/kernel/functional.cc +++ b/kernel/functional.cc @@ -518,6 +518,7 @@ public: if (cell->type.in(ID($assert), ID($assume), ID($live), ID($fair), ID($cover), ID($check))) queue.emplace_back(cell); } + // we are relying here on unsorted pools iterating last-in-first-out for (auto riter = module->ports.rbegin(); riter != module->ports.rend(); ++riter) { auto *wire = module->wire(*riter); if (wire && wire->port_input) {