Improved sig.remove2() performance

This commit is contained in:
Clifford Wolf 2014-08-17 02:16:56 +02:00
parent d491fd8c19
commit f3326a6421
1 changed files with 11 additions and 2 deletions

View File

@ -2182,14 +2182,23 @@ void RTLIL::SigSpec::remove2(const std::set<RTLIL::SigBit> &pattern, RTLIL::SigS
std::vector<RTLIL::SigBit> new_bits, new_other_bits;
new_bits.resize(SIZE(bits_));
if (other != NULL)
new_other_bits.resize(SIZE(bits_));
int k = 0;
for (int i = 0; i < SIZE(bits_); i++) {
if (bits_[i].wire != NULL && pattern.count(bits_[i]))
continue;
if (other != NULL)
new_other_bits.push_back(other->bits_[i]);
new_bits.push_back(bits_[i]);
new_other_bits[k] = other->bits_[i];
new_bits[k++] = bits_[i];
}
new_bits.resize(k);
if (other != NULL)
new_other_bits.resize(k);
bits_.swap(new_bits);
width_ = SIZE(bits_);