liberty memory management

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2026-02-04 18:33:32 -07:00
parent 33e480a6c1
commit 7cb71fe766
4 changed files with 23 additions and 102 deletions

View File

@ -56,25 +56,3 @@ LeakagePower::~LeakagePower()
}
} // namespace
>>>>>>>
namespace sta {
LeakagePower::LeakagePower(LibertyCell *cell,
LibertyPort *related_pg_port,
FuncExpr *when,
float power) :
cell_(cell),
related_pg_port_(related_pg_port),
when_(when),
power_(power)
{
}
LeakagePower::~LeakagePower()
{
if (when_)
when_->deleteSubexprs();
}
} // namespace

View File

@ -2233,23 +2233,12 @@ void
LibertyReader::makeLeakagePowers()
{
for (LeakagePowerGroup *power_group : leakage_powers_) {
<<<<<<<
=======
LibertyPort *related_pg_pin =
cell_->findLibertyPort(power_group->relatedPgPin().c_str());
cell_->makeLeakagePower(related_pg_pin, power_group->when(), power_group->power());
delete power_group;
}
leakage_powers_.clear();
>>>>>>>
LibertyPort *related_pg_pin =
cell_->findLibertyPort(power_group->relatedPgPin().c_str());
LeakagePower *leakage = new LeakagePower(cell_, related_pg_pin, power_group->when(),
power_group->power());
cell_->addLeakagePower(leakage);
delete power_group;
}
leakage_powers_.clear();
}
// Record a reference to a function that will be parsed at the end of
@ -6092,8 +6081,6 @@ LeakagePowerGroup::LeakagePowerGroup(int line) :
void
LeakagePowerGroup::setRelatedPgPin(std::string pin_name)
<<<<<<<
=======
{
related_pg_pin_ = std::move(pin_name);
}
@ -6104,23 +6091,6 @@ LeakagePowerGroup::setWhen(FuncExpr *when)
when_ = when;
}
void
LeakagePowerGroup::setPower(float power)
>>>>>>>
{
<<<<<<<
related_pg_pin_ = std::move(pin_name);
=======
power_ = power;
>>>>>>>
}
void
LeakagePowerGroup::setWhen(FuncExpr *when)
{
when_ = when;
}
void
LeakagePowerGroup::setPower(float power)
{

View File

@ -912,23 +912,6 @@ class LeakagePowerGroup
{
public:
LeakagePowerGroup(int line);
<<<<<<<
=======
const std::string &relatedPgPin() const { return related_pg_pin_; }
void setRelatedPgPin(std::string pin_name);
FuncExpr *when() const { return when_; }
void setWhen(FuncExpr *when);
float power() const { return power_; }
void setPower(float power);
protected:
std::string related_pg_pin_;
FuncExpr *when_;
float power_;
int line_;
};
>>>>>>>
const std::string &relatedPgPin() const { return related_pg_pin_; }
void setRelatedPgPin(std::string pin_name);
FuncExpr *when() const { return when_; }

View File

@ -1493,45 +1493,35 @@ Power::findLeakagePower(const Instance *inst,
float uncond_leakage = 0.0;
bool found_uncond = false;
float cond_duty_sum = 0.0;
<<<<<<<
for (LeakagePower *leak : *scene_cell->leakagePowers()) {
LibertyPort *pg_port = leak->relatedPgPort();
for (const LeakagePower &leak : scene_cell->leakagePowers()) {
LibertyPort *pg_port = leak.relatedPgPort();
if (pg_port == nullptr
|| pg_port->pwrGndType() == PwrGndType::primary_power) {
FuncExpr *when = leak->when();
=======
for (const LeakagePower &leak : scene_cell->leakagePowers()) {
FuncExpr *when = leak.when();
>>>>>>>
if (when) {
PwrActivity cond_activity = evalActivity(when, inst);
float cond_duty = cond_activity.duty();
FuncExpr *when = leak.when();
if (when) {
PwrActivity cond_activity = evalActivity(when, inst);
float cond_duty = cond_activity.duty();
debugPrint(debug_, "power", 2, "leakage %s %s %s %.3e * %.2f",
cell->name(),
leak->relatedPgPort()->name(),
when->to_string().c_str(),
leak.power(),
cond_duty);
cond_leakage += leak.power() * cond_duty;
if (leak.power() > 0.0)
cond_duty_sum += cond_duty;
found_cond = true;
}
else {
cell->name(),
leak.relatedPgPort()->name(),
when->to_string().c_str(),
leak.power(),
cond_duty);
cond_leakage += leak.power() * cond_duty;
if (leak.power() > 0.0)
cond_duty_sum += cond_duty;
found_cond = true;
}
else {
debugPrint(debug_, "power", 2, "leakage %s %s -- %.3e",
cell->name(),
<<<<<<<
leak->relatedPgPort()->name(),
leak->power());
uncond_leakage += leak->power();
=======
leak.power());
uncond_leakage += leak.power();
>>>>>>>
found_uncond = true;
cell->name(),
leak.relatedPgPort()->name(),
leak.power());
uncond_leakage += leak.power();
found_uncond = true;
}
}
}
}
float leakage = 0.0;
float cell_leakage;
bool cell_leakage_exists;