From be82087bdf2e74ab05cd36f5ece6578ac3c3b48a Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 12 Apr 2024 20:21:28 -0700 Subject: [PATCH] write_timing_model ignore set_clock_latency -source Signed-off-by: James Cherry --- include/sta/Sdc.hh | 2 ++ sdc/Sdc.cc | 75 ++++++++++++--------------------------- search/MakeTimingModel.cc | 2 ++ 3 files changed, 27 insertions(+), 52 deletions(-) diff --git a/include/sta/Sdc.hh b/include/sta/Sdc.hh index a8cb921e..5f59ebd7 100644 --- a/include/sta/Sdc.hh +++ b/include/sta/Sdc.hh @@ -445,6 +445,8 @@ public: float delay); void removeClockInsertion(const Clock *clk, const Pin *pin); + static void moveClockInsertions(Sdc *from, + Sdc *to); bool hasClockInsertion(const Pin *pin) const; float clockInsertion(const Clock *clk, const RiseFall *rf, diff --git a/sdc/Sdc.cc b/sdc/Sdc.cc index aa728ac5..2ceb4425 100644 --- a/sdc/Sdc.cc +++ b/sdc/Sdc.cc @@ -668,17 +668,9 @@ Sdc::moveDeratingFactors(Sdc *from, from->derating_factors_ = nullptr; } - to->net_derating_factors_.deleteContents(); - to->net_derating_factors_ = from->net_derating_factors_; - from->net_derating_factors_.clear(); - - to->inst_derating_factors_.deleteContents(); - to->inst_derating_factors_ = from->inst_derating_factors_; - from->inst_derating_factors_.clear(); - - to->cell_derating_factors_.deleteContents(); - to->cell_derating_factors_ = from->cell_derating_factors_; - from->cell_derating_factors_.clear(); + to->net_derating_factors_ = std::move(from->net_derating_factors_); + to->inst_derating_factors_ = std::move(from->inst_derating_factors_); + to->cell_derating_factors_ = std::move(from->cell_derating_factors_); } void @@ -1740,6 +1732,13 @@ Sdc::removeClockInsertion(const Clock *clk, deleteClockInsertion(insertion); } +void +Sdc::moveClockInsertions(Sdc *from, + Sdc *to) +{ + to->clk_insertions_ = std::move(from->clk_insertions_); +} + void Sdc::deleteClockInsertion(ClockInsertion *insertion) { @@ -2746,46 +2745,18 @@ void Sdc::movePortDelays(Sdc *from, Sdc *to) { - to->input_delays_.deleteContents(); - to->input_delays_ = from->input_delays_; - from->input_delays_.clear(); - - to->input_delay_pin_map_.deleteContents(); - to->input_delay_pin_map_ = from->input_delay_pin_map_; - from->input_delay_pin_map_.clear(); - - to->input_delay_ref_pin_map_.deleteContents(); - to->input_delay_ref_pin_map_ = from->input_delay_ref_pin_map_; - from->input_delay_ref_pin_map_.clear(); - - to->input_delay_leaf_pin_map_.deleteContents(); - to->input_delay_leaf_pin_map_ = from->input_delay_leaf_pin_map_; - from->input_delay_leaf_pin_map_.clear(); - - to->input_delay_internal_pin_map_.deleteContents(); - to->input_delay_internal_pin_map_ = from->input_delay_internal_pin_map_; - from->input_delay_internal_pin_map_.clear(); - + to->input_delays_ = std::move(from->input_delays_); + to->input_delay_pin_map_ = std::move(from->input_delay_pin_map_); + to->input_delay_ref_pin_map_ = std::move(from->input_delay_ref_pin_map_); + to->input_delay_leaf_pin_map_ = std::move(from->input_delay_leaf_pin_map_); + to->input_delay_internal_pin_map_ = std::move(from->input_delay_internal_pin_map_); to->input_delay_index_ = from->input_delay_index_; from->input_delay_index_ = 0; - //////////////// - - to->output_delays_.deleteContents(); - to->output_delays_ = from->output_delays_; - from->output_delays_.clear(); - - to->output_delay_pin_map_.deleteContents(); - to->output_delay_pin_map_ = from->output_delay_pin_map_; - from->output_delay_pin_map_.clear(); - - to->output_delay_ref_pin_map_.deleteContents(); - to->output_delay_ref_pin_map_ = from->output_delay_ref_pin_map_; - from->output_delay_ref_pin_map_.clear(); - - to->output_delay_leaf_pin_map_.deleteContents(); - to->output_delay_leaf_pin_map_ = from->output_delay_leaf_pin_map_; - from->output_delay_leaf_pin_map_.clear(); + to->output_delays_ = std::move(from->output_delays_); + to->output_delay_pin_map_ = std::move(from->output_delay_pin_map_); + to->output_delay_ref_pin_map_ = std::move(from->output_delay_ref_pin_map_); + to->output_delay_leaf_pin_map_ = std::move(from->output_delay_leaf_pin_map_); } //////////////////////////////////////////////////////////////// @@ -3355,11 +3326,11 @@ Sdc::movePortExtCaps(Sdc *from, Sdc *to) { for (int corner_index = 0; corner_index < from->corners()->count(); corner_index++) { - to->port_ext_cap_maps_[corner_index] = from->port_ext_cap_maps_[corner_index]; - from->port_ext_cap_maps_[corner_index].clear(); + to->port_ext_cap_maps_[corner_index] = + std::move(from->port_ext_cap_maps_[corner_index]); - to->net_wire_cap_maps_[corner_index] = from->net_wire_cap_maps_[corner_index]; - from->net_wire_cap_maps_[corner_index].clear(); + to->net_wire_cap_maps_[corner_index] = + std::move(from->net_wire_cap_maps_[corner_index]); } } diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index bacdaeea..bfeae06f 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -114,6 +114,7 @@ MakeTimingModel::saveSdc() Sdc::movePortDelays(sdc_, sdc_backup_); Sdc::movePortExtCaps(sdc_, sdc_backup_); Sdc::moveDeratingFactors(sdc_, sdc_backup_); + Sdc::moveClockInsertions(sdc_, sdc_backup_); sta_->delaysInvalid(); } @@ -123,6 +124,7 @@ MakeTimingModel::restoreSdc() Sdc::movePortDelays(sdc_backup_, sdc_); Sdc::movePortExtCaps(sdc_backup_, sdc_); Sdc::moveDeratingFactors(sdc_backup_, sdc_); + Sdc::moveClockInsertions(sdc_backup_, sdc_); delete sdc_backup_; sta_->delaysInvalid(); }