diff --git a/liberty/InternalPower.cc b/liberty/InternalPower.cc index f490c32a..02f2d711 100644 --- a/liberty/InternalPower.cc +++ b/liberty/InternalPower.cc @@ -36,11 +36,11 @@ InternalPowerAttrs::~InternalPowerAttrs() void InternalPowerAttrs::deleteContents() { - for (auto tr_index : RiseFall::rangeIndex()) { - InternalPowerModel *model = models_[tr_index]; - if (model) - delete model; - } + InternalPowerModel *rise_model = models_[RiseFall::riseIndex()]; + InternalPowerModel *fall_model = models_[RiseFall::fallIndex()]; + delete rise_model; + if (fall_model != rise_model) + delete fall_model; if (when_) when_->deleteSubexprs(); stringDelete(related_pg_pin_); diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 1b1f0fda..59841716 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -4543,8 +4543,10 @@ LibertyReader::endPower(LibertyGroup *) { if (table_) { TableModel *table_model = new TableModel(table_, scale_factor_type_, rf_); - internal_power_->setModel(RiseFall::rise(), new InternalPowerModel(table_model)); - internal_power_->setModel(RiseFall::fall(), new InternalPowerModel(table_model)); + // Share the model for rise/fall. + InternalPowerModel *power_model = new InternalPowerModel(table_model); + internal_power_->setModel(RiseFall::rise(), power_model); + internal_power_->setModel(RiseFall::fall(), power_model); } endTableModel(); }