From a3cfe38b0b8409ddd3f525fc39ec73888ef45ed5 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 4 May 2020 18:19:29 -0700 Subject: [PATCH] internal power nan when related_pg_pin missing --- search/Power.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/search/Power.cc b/search/Power.cc index 9812a4de..a728af0e 100644 --- a/search/Power.cc +++ b/search/Power.cc @@ -662,6 +662,7 @@ Power::findExprOutPort(FuncExpr *expr) case FuncExpr::op_zero: return nullptr; } + return nullptr; } // Eval activity of differenc(expr) wrt cofactor port. @@ -705,7 +706,8 @@ Power::findOutputInternalPower(const Pin *to_pin, for (InternalPower *pwr : *cell->internalPowers(to_port)) { float duty = findInputDuty(to_pin, inst, func, pwr); const char *related_pg_pin = pwr->relatedPgPin(); - pg_duty_sum[related_pg_pin] += duty; + if (related_pg_pin) + pg_duty_sum[related_pg_pin] += duty; } float internal = 0.0; @@ -734,7 +736,10 @@ Power::findOutputInternalPower(const Pin *to_pin, } if (tr_count) energy /= tr_count; // average non-inf energies - float weight = duty / pg_duty_sum[related_pg_pin]; + auto duty_sum = pg_duty_sum.find(related_pg_pin); + float weight = duty_sum == pg_duty_sum.end() + ? duty + : duty / duty_sum->second; float port_internal = weight * energy * to_activity.activity(); debugPrint9(debug_, "power", 2, "%3s -> %-3s %6s %.2f %.2f %.2f %9.2e %9.2e %s\n", from_port->name(),