diff --git a/passes/cmds/splitcells.cc b/passes/cmds/splitcells.cc index 15279e6dd..833672b39 100644 --- a/passes/cmds/splitcells.cc +++ b/passes/cmds/splitcells.cc @@ -188,8 +188,8 @@ 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('['); + // Strip existing '[' or '.' from cell name + size_t bracket_pos = base_name.find_first_of('[.'); if (bracket_pos != std::string::npos) { base_name = base_name.substr(0, bracket_pos); } @@ -205,12 +205,12 @@ struct SplitcellsWorker // 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('['); + // Concatenate struct attribute or wire index (ex: \Memory[0] -> [0]) to the bit offset + size_t bracket_pos = wire_name.find_first_of('[.'); 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 + name_lsb offset instead + } else { // no '[' or '.', so no concatenation using wire, use slice_lsb + name_lsb offset instead wire_indices = stringf( "%c%d%c", format[0], slice_lsb + wire_offset, format[1]); } diff --git a/passes/silimate/reg_rename.cc b/passes/silimate/reg_rename.cc index bc254e266..73f94c6df 100644 --- a/passes/silimate/reg_rename.cc +++ b/passes/silimate/reg_rename.cc @@ -108,16 +108,10 @@ struct RegRenameInstance { size_t last_open = cellName.rfind('['); size_t last_close = cellName.rfind(']'); if (last_open != std::string::npos && last_close != std::string::npos && last_close > last_open) { - - // Check that bracket content is just a single bit index - std::string inner = cellName.substr(last_open + 1, last_close - last_open - 1); - if (!inner.empty() && inner.find_first_not_of("0123456789") == std::string::npos) { - wireName = cellName.substr(0, last_open); - bitIndex = std::stoi(inner); - } else { - wireName = cellName; - bitIndex = 0; - } + // Check that bracket content is just a single bit index + std::string inner = cellName.substr(last_open + 1, last_close - last_open - 1); + wireName = cellName.substr(0, last_open); + bitIndex = std::stoi(inner); } else { wireName = cellName; bitIndex = 0; @@ -312,13 +306,9 @@ struct RegRenamePass : public Pass { if (!signal_name.empty() && signal_name.back() == ']') { size_t open = signal_name.rfind('['); if (open != std::string::npos) { - std::string inner = signal_name.substr(open + 1, - signal_name.size() - open - 2); - // Check for alphabetical characters since they can be contained in brackets in a wire name. - if (!inner.empty() && inner.find_first_not_of("0123456789:") == std::string::npos) { - signal_bits = signal_name.substr(open); - signal_name.erase(open); - } + std::string inner = signal_name.substr(open + 1, signal_name.size() - open - 2); + signal_bits = signal_name.substr(open); + signal_name.erase(open); } }