-
Notifications
You must be signed in to change notification settings - Fork 602
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rsz: Buffering and sizing improvements #6564
base: master
Are you sure you want to change the base?
rsz: Buffering and sizing improvements #6564
Conversation
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Dashboard link for when this PR is combined with appropriate flow script changes: https://dashboard.precisioninno.com/compare?sourceAType=Commit&sourceBType=Commit&sourceBName=3ac73fd1cbba34b80953390fc9412c84c3921133&sourceBID=16&sourceAName=c6905f5d5dab4c61d923ba4f164eb2335359cba9&sourceAID=5004 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
} | ||
size_cin /= nports; | ||
if (size_cin > cin) | ||
cin = size_cin; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: statement should be inside braces [google-readability-braces-around-statements]
cin = size_cin; | |
if (size_cin > cin) { | |
cin = size_cin; | |
} |
src/rsz/src/Resizer.cc
Outdated
float delay_penalty = max_drive_resist * extra_input_cap; | ||
|
||
float wlimit = maxLoad(network_->cell(worse)), | ||
blimit = maxLoad(network_->cell(better)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: Value stored to 'blimit' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
blimit = maxLoad(network_->cell(better));
^
Additional context
src/rsz/src/Resizer.cc:539: Value stored to 'blimit' during its initialization is never read
blimit = maxLoad(network_->cell(better));
^
src/rsz/src/Resizer.cc
Outdated
float delay_penalty = max_drive_resist * extra_input_cap; | ||
|
||
float wlimit = maxLoad(network_->cell(worse)), | ||
blimit = maxLoad(network_->cell(better)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: unused variable 'blimit' [clang-diagnostic-unused-variable]
blimit = maxLoad(network_->cell(better));
^
src/rsz/src/Resizer.cc
Outdated
// TODO: factor out | ||
for (TimingArcSet* arc_set : worse->timingArcSets()) { | ||
TimingRole* role = arc_set->role(); | ||
if (role->combinational() && arc_set->from() == win |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: static member accessed through instance [readability-static-accessed-through-instance]
if (role->combinational() && arc_set->from() == win | |
if (sta::TimingRole::combinational() && arc_set->from() == win |
src/rsz/src/Resizer.cc
Outdated
|
||
for (TimingArcSet* arc_set : better->timingArcSets()) { | ||
TimingRole* role = arc_set->role(); | ||
if (role->combinational() && arc_set->from() == bin |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: static member accessed through instance [readability-static-accessed-through-instance]
if (role->combinational() && arc_set->from() == bin | |
if (sta::TimingRole::combinational() && arc_set->from() == bin |
src/rsz/src/Resizer.cc
Outdated
LibertyCellSeq sizes_by_inp_cap; | ||
sizes_by_inp_cap = buffer_cells_; | ||
sort(sizes_by_inp_cap, | ||
[this](const LibertyCell* buffer1, const LibertyCell* buffer2) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: lambda capture 'this' is not used [clang-diagnostic-unused-lambda-capture]
[this](const LibertyCell* buffer1, const LibertyCell* buffer2) { | |
[](const LibertyCell* buffer1, const LibertyCell* buffer2) { |
while (port_iter.hasNext()) { | ||
const LibertyPort* port = port_iter.next(); | ||
if (port->direction() == sta::PortDirection::input()) { | ||
cin += port->capacitance(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
cin += port->capacitance();
^
Additional context
src/rsz/src/Resizer.cc:1483: Assuming 'inst' is non-null
LibertyCell* cell = inst ? network_->libertyCell(inst) : nullptr;
^
src/rsz/src/Resizer.cc:1483: '?' condition is true
LibertyCell* cell = inst ? network_->libertyCell(inst) : nullptr;
^
src/rsz/src/Resizer.cc:1484: Assuming the condition is true
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: Left side of '&&' is true
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: 'inst' is non-null
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: Left side of '&&' is true
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: Left side of '&&' is true
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: Assuming 'cell' is non-null
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: Left side of '&&' is true
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1484: Taking true branch
if (!network_->isTopLevelPort(drvr_pin) && inst && !dontTouch(inst) && cell
^
src/rsz/src/Resizer.cc:1486: 'cin' declared without an initial value
float cin, load_cap;
^
src/rsz/src/Resizer.cc:1491: Assuming the condition is true
if (load_cap > 0.0 && getCin(cell, cin)) {
^
src/rsz/src/Resizer.cc:1491: Left side of '&&' is true
if (load_cap > 0.0 && getCin(cell, cin)) {
^
src/rsz/src/Resizer.cc:1491: Passing value via 2nd parameter 'cin'
if (load_cap > 0.0 && getCin(cell, cin)) {
^
src/rsz/src/Resizer.cc:1491: Calling 'Resizer::getCin'
if (load_cap > 0.0 && getCin(cell, cin)) {
^
src/rsz/src/Resizer.cc:1465: Loop condition is true. Entering loop body
while (port_iter.hasNext()) {
^
src/rsz/src/Resizer.cc:1467: Assuming the condition is true
if (port->direction() == sta::PortDirection::input()) {
^
src/rsz/src/Resizer.cc:1467: Taking true branch
if (port->direction() == sta::PortDirection::input()) {
^
src/rsz/src/Resizer.cc:1468: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage
cin += port->capacitance();
^
src/rsz/src/Resizer.cc
Outdated
// Includes net parasitic capacitance. | ||
load_cap = graph_delay_calc_->loadCap(drvr_pin, tgt_slew_dcalc_ap_); | ||
if (load_cap > 0.0 && getCin(cell, cin)) { | ||
bool is_buf_inv = cell->isBuffer() || cell->isInverter(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: Value stored to 'is_buf_inv' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
bool is_buf_inv = cell->isBuffer() || cell->isInverter();
^
Additional context
src/rsz/src/Resizer.cc:1492: Value stored to 'is_buf_inv' during its initialization is never read
bool is_buf_inv = cell->isBuffer() || cell->isInverter();
^
src/rsz/src/Resizer.cc
Outdated
// Includes net parasitic capacitance. | ||
load_cap = graph_delay_calc_->loadCap(drvr_pin, tgt_slew_dcalc_ap_); | ||
if (load_cap > 0.0 && getCin(cell, cin)) { | ||
bool is_buf_inv = cell->isBuffer() || cell->isInverter(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: unused variable 'is_buf_inv' [clang-diagnostic-unused-variable]
bool is_buf_inv = cell->isBuffer() || cell->isInverter();
^
Differences found at line 95. | ||
- i1-179 BUF_X16 + PLACED ( 0 3580000 ) N ; | ||
- i1-179 BUF_X8 + PLACED ( 0 3580000 ) N ; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There should be no diffs in the ok file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, missed that, will fix here and in other places if there are any
src/rsz/src/Resizer.cc
Outdated
#if 0 | ||
if (/* blimit exists */ blimit > 0 && wlimit > blimit) { | ||
return false; | ||
} | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rm unused code
needs attention |
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
Signed-off-by: Martin Povišer <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Signed-off-by: Martin Povišer <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Signed-off-by: Martin Povišer <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Overall timing QoR looks quite good. Average setup TNS improved by 9.4% and setup TNS by 6.5%. I looked at 5 worst degradations. The QoR degradation starts at GR or DR. Details are below. |
Please resolve the merge conflicts so we can get this in. |
This PR combines a number of related resizer changes impacting QoR:
repair_design -buffer_gain
)It supersedes #6332