mirror of https://github.com/YosysHQ/yosys.git
Merge branch 'rtlil_remove2_speedup' of https://github.com/kc8apf/yosys
This commit is contained in:
commit
aed8fb353c
|
@ -2688,31 +2688,43 @@ void RTLIL::SigSpec::remove2(const pool<RTLIL::SigBit> &pattern, RTLIL::SigSpec
|
||||||
other->unpack();
|
other->unpack();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<RTLIL::SigBit> new_bits, new_other_bits;
|
for (int i = GetSize(bits_) - 1; i >= 0; i--) {
|
||||||
|
if (bits_[i].wire != NULL && pattern.count(bits_[i])) {
|
||||||
new_bits.resize(GetSize(bits_));
|
bits_.erase(bits_.begin() + i);
|
||||||
if (other != NULL)
|
width_--;
|
||||||
new_other_bits.resize(GetSize(bits_));
|
if (other != NULL) {
|
||||||
|
other->bits_.erase(other->bits_.begin() + i);
|
||||||
int k = 0;
|
other->width_--;
|
||||||
for (int i = 0; i < GetSize(bits_); i++) {
|
}
|
||||||
if (bits_[i].wire != NULL && pattern.count(bits_[i]))
|
}
|
||||||
continue;
|
|
||||||
if (other != NULL)
|
|
||||||
new_other_bits[k] = other->bits_[i];
|
|
||||||
new_bits[k++] = bits_[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
new_bits.resize(k);
|
check();
|
||||||
if (other != NULL)
|
}
|
||||||
new_other_bits.resize(k);
|
|
||||||
|
|
||||||
bits_.swap(new_bits);
|
void RTLIL::SigSpec::remove2(const std::set<RTLIL::SigBit> &pattern, RTLIL::SigSpec *other)
|
||||||
width_ = GetSize(bits_);
|
{
|
||||||
|
if (other)
|
||||||
|
cover("kernel.rtlil.sigspec.remove_other");
|
||||||
|
else
|
||||||
|
cover("kernel.rtlil.sigspec.remove");
|
||||||
|
|
||||||
|
unpack();
|
||||||
|
|
||||||
if (other != NULL) {
|
if (other != NULL) {
|
||||||
other->bits_.swap(new_other_bits);
|
log_assert(width_ == other->width_);
|
||||||
other->width_ = GetSize(other->bits_);
|
other->unpack();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = GetSize(bits_) - 1; i >= 0; i--) {
|
||||||
|
if (bits_[i].wire != NULL && pattern.count(bits_[i])) {
|
||||||
|
bits_.erase(bits_.begin() + i);
|
||||||
|
width_--;
|
||||||
|
if (other != NULL) {
|
||||||
|
other->bits_.erase(other->bits_.begin() + i);
|
||||||
|
other->width_--;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check();
|
check();
|
||||||
|
|
|
@ -192,12 +192,12 @@ namespace RTLIL
|
||||||
return std::string(global_id_storage_.at(index_));
|
return std::string(global_id_storage_.at(index_));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator<(IdString rhs) const {
|
bool operator<(const IdString &rhs) const {
|
||||||
return index_ < rhs.index_;
|
return index_ < rhs.index_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(IdString rhs) const { return index_ == rhs.index_; }
|
bool operator==(const IdString &rhs) const { return index_ == rhs.index_; }
|
||||||
bool operator!=(IdString rhs) const { return index_ != rhs.index_; }
|
bool operator!=(const IdString &rhs) const { return index_ != rhs.index_; }
|
||||||
|
|
||||||
// The methods below are just convenience functions for better compatibility with std::string.
|
// The methods below are just convenience functions for better compatibility with std::string.
|
||||||
|
|
||||||
|
@ -670,6 +670,8 @@ public:
|
||||||
void remove(const pool<RTLIL::SigBit> &pattern, RTLIL::SigSpec *other) const;
|
void remove(const pool<RTLIL::SigBit> &pattern, RTLIL::SigSpec *other) const;
|
||||||
void remove2(const pool<RTLIL::SigBit> &pattern, RTLIL::SigSpec *other);
|
void remove2(const pool<RTLIL::SigBit> &pattern, RTLIL::SigSpec *other);
|
||||||
|
|
||||||
|
void remove2(const std::set<RTLIL::SigBit> &pattern, RTLIL::SigSpec *other);
|
||||||
|
|
||||||
void remove(int offset, int length = 1);
|
void remove(int offset, int length = 1);
|
||||||
void remove_const();
|
void remove_const();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue