From 102cbb8c0ad9344631343f4d736410eb1d92859e Mon Sep 17 00:00:00 2001 From: Stan Lee Date: Mon, 20 Apr 2026 15:07:09 -0700 Subject: [PATCH 1/5] splitcells reg split fix --- passes/cmds/splitcells.cc | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/passes/cmds/splitcells.cc b/passes/cmds/splitcells.cc index ce6997727..18c033e4c 100644 --- a/passes/cmds/splitcells.cc +++ b/passes/cmds/splitcells.cc @@ -202,22 +202,19 @@ struct SplitcellsWorker Wire *w = raw_q[slice_lsb].wire; std::string wire_name = w->name.str(); - // Extract bit offset from the wire (ex: 0) - int bit_offset = user_index(slice_lsb); - // Concatenate wire index (ex: \Memory[0] -> [0]) to the bit offset (ex: [0][bit]) size_t bracket_pos = wire_name.find('['); if (bracket_pos != std::string::npos) { wire_indices = wire_name.substr(bracket_pos) + stringf( - "%c%d%c", format[0], bit_offset, format[1]); + "%c%d%c", format[0], slice_lsb, format[1]); } else { // no brackets, so no concatenation wire_indices = stringf( - "%c%d%c", format[0], bit_offset, format[1]); + "%c%d%c", format[0], slice_lsb, format[1]); } } else { // Fallback wire_indices = stringf( - "%c%d%c", format[0], name_lsb, format[1]); + "%c%d%c", format[0], slice_lsb, format[1]); } // Construct uniquified name by concatenating the base name with the wire indices slice_name = module->uniquify(base_name + wire_indices); From 1646f7712a73257982b329d36362e0a63c49db4e Mon Sep 17 00:00:00 2001 From: Stan Lee Date: Mon, 20 Apr 2026 15:12:56 -0700 Subject: [PATCH 2/5] bugfix --- passes/cmds/splitcells.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/passes/cmds/splitcells.cc b/passes/cmds/splitcells.cc index 18c033e4c..2fbe870fd 100644 --- a/passes/cmds/splitcells.cc +++ b/passes/cmds/splitcells.cc @@ -187,6 +187,7 @@ struct SplitcellsWorker std::string base_name = cell->name.str(); IdString slice_name; + if (blast) { // Strip existing brackets from cell name size_t bracket_pos = base_name.find('['); @@ -202,12 +203,15 @@ struct SplitcellsWorker Wire *w = raw_q[slice_lsb].wire; std::string wire_name = w->name.str(); + // Extract bit offset from the wire (ex: 0) + int bit_offset = user_index(slice_lsb); + // Concatenate wire index (ex: \Memory[0] -> [0]) to the bit offset (ex: [0][bit]) size_t bracket_pos = wire_name.find('['); if (bracket_pos != std::string::npos) { wire_indices = wire_name.substr(bracket_pos) + stringf( - "%c%d%c", format[0], slice_lsb, format[1]); - } else { // no brackets, so no concatenation + "%c%d%c", format[0], bit_offset, format[1]); + } else { // no brackets, so no concatenation using wire, use slice_lsb instead wire_indices = stringf( "%c%d%c", format[0], slice_lsb, format[1]); } From 553ea0a17306073958cc95bb9a1c9aeb1351f5b0 Mon Sep 17 00:00:00 2001 From: Stan Lee Date: Mon, 20 Apr 2026 16:11:28 -0700 Subject: [PATCH 3/5] edit --- passes/cmds/splitcells.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/passes/cmds/splitcells.cc b/passes/cmds/splitcells.cc index 2fbe870fd..520dc85dc 100644 --- a/passes/cmds/splitcells.cc +++ b/passes/cmds/splitcells.cc @@ -218,7 +218,7 @@ struct SplitcellsWorker } else { // Fallback wire_indices = stringf( - "%c%d%c", format[0], slice_lsb, format[1]); + "%c%d%c", format[0], name_lsb, format[1]); } // Construct uniquified name by concatenating the base name with the wire indices slice_name = module->uniquify(base_name + wire_indices); From 5f538db621bb5f7a732a556e64286b8f89053723 Mon Sep 17 00:00:00 2001 From: Stan Lee Date: Mon, 20 Apr 2026 17:17:37 -0700 Subject: [PATCH 4/5] fix --- passes/cmds/splitcells.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/passes/cmds/splitcells.cc b/passes/cmds/splitcells.cc index 520dc85dc..e0b9654ba 100644 --- a/passes/cmds/splitcells.cc +++ b/passes/cmds/splitcells.cc @@ -211,9 +211,9 @@ struct SplitcellsWorker if (bracket_pos != std::string::npos) { wire_indices = wire_name.substr(bracket_pos) + stringf( "%c%d%c", format[0], bit_offset, format[1]); - } else { // no brackets, so no concatenation using wire, use slice_lsb instead + } else { // no brackets, so no concatenation using wire, use slice_lsb + name_lsb offset instead wire_indices = stringf( - "%c%d%c", format[0], slice_lsb, format[1]); + "%c%d%c", format[0], slice_lsb + name_lsb, format[1]); } } else { // Fallback From 90c2bbe1d46f0794497749557b49587564beb05f Mon Sep 17 00:00:00 2001 From: Stan Lee Date: Mon, 20 Apr 2026 17:26:30 -0700 Subject: [PATCH 5/5] factor offset --- passes/cmds/splitcells.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/passes/cmds/splitcells.cc b/passes/cmds/splitcells.cc index e0b9654ba..15279e6dd 100644 --- a/passes/cmds/splitcells.cc +++ b/passes/cmds/splitcells.cc @@ -177,6 +177,7 @@ struct SplitcellsWorker slices.push_back(GetSize(outsig)); log_debug("Splitting %s cell %s/%s into %d slices:\n", log_id(cell->type), log_id(module), log_id(cell), GetSize(slices)-1); + int wire_offset = user_index(0); for (int i = 1; i < GetSize(slices); i++) { int slice_msb = slices[i]-1; @@ -184,10 +185,8 @@ struct SplitcellsWorker int name_lsb = user_index(slice_lsb); int name_msb = user_index(slice_msb); if (name_lsb > name_msb) std::swap(name_lsb, name_msb); - std::string base_name = cell->name.str(); IdString slice_name; - if (blast) { // Strip existing brackets from cell name size_t bracket_pos = base_name.find('['); @@ -213,7 +212,7 @@ struct SplitcellsWorker "%c%d%c", format[0], bit_offset, format[1]); } else { // no brackets, so no concatenation using wire, use slice_lsb + name_lsb offset instead wire_indices = stringf( - "%c%d%c", format[0], slice_lsb + name_lsb, format[1]); + "%c%d%c", format[0], slice_lsb + wire_offset, format[1]); } } else { // Fallback