diff --git a/search/CheckCapacitanceLimits.cc b/search/CheckCapacitanceLimits.cc index 80b75aa1..fffda964 100644 --- a/search/CheckCapacitanceLimits.cc +++ b/search/CheckCapacitanceLimits.cc @@ -263,7 +263,7 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(const Corner *corner, { init(min_max); const Network *network = sta_->network(); - Pin *min_slack_pin = 0; + Pin *min_slack_pin = nullptr; float min_slack = MinMax::min()->initValue(); LeafInstanceIterator *inst_iter = network->leafInstanceIterator(); while (inst_iter->hasNext()) { @@ -294,7 +294,8 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(Instance *inst, float capacitance, limit, slack; checkCapacitance(pin, corner, min_max, corner1, rf, capacitance, limit, slack); if (rf - && (min_slack_pin == 0 + && !fuzzyInf(slack) + && (min_slack_pin == nullptr || slack < min_slack)) { min_slack_pin = pin; min_slack = slack; diff --git a/search/CheckFanoutLimits.cc b/search/CheckFanoutLimits.cc index dcc9cb05..00550cd9 100644 --- a/search/CheckFanoutLimits.cc +++ b/search/CheckFanoutLimits.cc @@ -100,10 +100,9 @@ CheckFanoutLimits::checkFanout(const Pin *pin, float limit1; bool limit1_exists; findLimit(pin, min_max, limit1, limit1_exists); - if (limit1_exists) { + if (limit1_exists) checkFanout(pin, min_max, limit1, fanout, slack, limit); - } } void @@ -133,6 +132,7 @@ CheckFanoutLimits::findLimit(const Pin *pin, if (port) { port->fanoutLimit(min_max, limit, exists); if (!exists + && min_max == MinMax::max() && port->direction()->isAnyOutput()) port->libertyLibrary()->defaultMaxFanout(limit, exists); } @@ -220,7 +220,7 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(const MinMax *min_max) { init(min_max); const Network *network = sta_->network(); - Pin *min_slack_pin = 0; + Pin *min_slack_pin = nullptr; float min_slack = MinMax::min()->initValue(); LeafInstanceIterator *inst_iter = network->leafInstanceIterator(); while (inst_iter->hasNext()) { @@ -230,7 +230,7 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(const MinMax *min_max) delete inst_iter; // Check top level ports. pinMinFanoutLimitSlack(network->topInstance(), min_max, - min_slack_pin, min_slack); + min_slack_pin, min_slack); return min_slack_pin; } @@ -245,13 +245,16 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(Instance *inst, InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - float fanout; - float limit, slack; - checkFanout(pin, min_max, fanout, limit, slack); - if (min_slack_pin == 0 - || slack < min_slack) { - min_slack_pin = pin; - min_slack = slack; + if (network->direction(pin)->isAnyOutput()) { + float fanout; + float limit, slack; + checkFanout(pin, min_max, fanout, limit, slack); + if (!fuzzyInf(slack) + && (min_slack_pin == nullptr + || slack < min_slack)) { + min_slack_pin = pin; + min_slack = slack; + } } } delete pin_iter; diff --git a/search/CheckSlewLimits.cc b/search/CheckSlewLimits.cc index 2aa2253f..0e505158 100644 --- a/search/CheckSlewLimits.cc +++ b/search/CheckSlewLimits.cc @@ -346,7 +346,7 @@ CheckSlewLimits::pinMinSlewLimitSlack(const Corner *corner, { init(min_max); const Network *network = sta_->network(); - Pin *min_slack_pin = 0; + Pin *min_slack_pin = nullptr; float min_slack = MinMax::min()->initValue(); LeafInstanceIterator *inst_iter = network->leafInstanceIterator(); while (inst_iter->hasNext()) { @@ -378,7 +378,7 @@ CheckSlewLimits::pinMinSlewLimitSlack(Instance *inst, float limit, slack; checkSlews(pin, corner, min_max, corner1, rf, slew, limit, slack); if (rf - && (min_slack_pin == 0 + && (min_slack_pin == nullptr || slack < min_slack)) { min_slack_pin = pin; min_slack = slack; diff --git a/tcl/Sta.tcl b/tcl/Sta.tcl index d42ee63d..6a9264cd 100644 --- a/tcl/Sta.tcl +++ b/tcl/Sta.tcl @@ -389,10 +389,6 @@ proc_redirect report_check_types { set min_pulse_width 1 set min_period 1 set max_skew 1 - set max_fanout 0 - set min_fanout 0 - set max_capacitance 0 - set min_capacitance 0 } else { parse_key_args "report_check_types" args keys {} \ flags {-max_delay -min_delay -recovery -removal \