From 74bc7af4762ce7b1ee417662a9a77afb8fb3edaa Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 25 Jun 2022 10:31:18 -0700 Subject: [PATCH] TimingArcSet attrs Signed-off-by: James Cherry --- include/sta/TimingArc.hh | 18 ++++++------------ liberty/LibertyReader.cc | 34 ++++++++++++++-------------------- liberty/TimingArc.cc | 25 ++++++------------------- 3 files changed, 26 insertions(+), 51 deletions(-) diff --git a/include/sta/TimingArc.hh b/include/sta/TimingArc.hh index 2378c06f..f22b32bb 100644 --- a/include/sta/TimingArc.hh +++ b/include/sta/TimingArc.hh @@ -159,19 +159,19 @@ public: void deleteTimingArc(TimingArc *arc); TimingArc *findTimingArc(unsigned arc_index); void setRole(TimingRole *role); - FuncExpr *cond() const { return cond_; } + FuncExpr *cond() const { return attrs_->cond(); } // Cond default is the timing arcs with no condition when there are // other conditional timing arcs between the same pins. bool isCondDefault() const { return is_cond_default_; } void setIsCondDefault(bool is_default); // SDF IOPATHs match sdfCond. // sdfCond (IOPATH) reuses sdfCondStart (timing check) variable. - const char *sdfCond() const { return sdf_cond_start_; } + const char *sdfCond() const { return attrs_->sdfCondStart(); } // SDF timing checks match sdfCondStart/sdfCondEnd. - const char *sdfCondStart() const { return sdf_cond_start_; } - const char *sdfCondEnd() const { return sdf_cond_end_; } - const char *modeName() const { return mode_name_; } - const char *modeValue() const { return mode_value_; } + const char *sdfCondStart() const { return attrs_->sdfCondStart(); } + const char *sdfCondEnd() const { return attrs_->sdfCondEnd(); } + const char *modeName() const { return attrs_->modeName(); } + const char *modeValue() const { return attrs_->modeValue(); } // Timing arc set index in cell. TimingArcIndex index() const { return index_; } bool isDisabledConstraint() const { return is_disabled_constraint_; } @@ -203,13 +203,7 @@ protected: TimingRole *role_; TimingArcAttrs *attrs_; TimingArcSeq arcs_; - FuncExpr *cond_; bool is_cond_default_; - const char *sdf_cond_start_; - const char *sdf_cond_end_; - const char *mode_name_; - const char *mode_value_; - float ocv_arc_depth_; unsigned index_; bool is_disabled_constraint_; TimingArc *from_arc1_[RiseFall::index_count]; diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 796d3a35..7aad95ae 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -3925,38 +3925,32 @@ LibertyReader::makeTable(LibertyAttr *attr, FloatTable *table = makeFloatTable(attr, axis_[0]->size()*axis_[1]->size(), axis_[2]->size(), scale); - if (table) - table_ = new Table3(table, - axis_[0], own_axis_[0], - axis_[1], own_axis_[1], - axis_[2], own_axis_[2]); + table_ = new Table3(table, + axis_[0], own_axis_[0], + axis_[1], own_axis_[1], + axis_[2], own_axis_[2]); } else if (axis_[0] && axis_[1]) { // Row variable1/axis[0] // Column variable2/axis[1] FloatTable *table = makeFloatTable(attr, axis_[0]->size(), axis_[1]->size(), scale); - if (table) - table_ = new Table2(table, - axis_[0], own_axis_[0], - axis_[1], own_axis_[1]); + table_ = new Table2(table, + axis_[0], own_axis_[0], + axis_[1], own_axis_[1]); } else if (axis_[0]) { FloatTable *table = makeFloatTable(attr, 1, axis_[0]->size(), scale); - if (table) { - FloatSeq *values = (*table)[0]; - delete table; - table_ = new Table1(values, axis_[0], own_axis_[0]); - } + FloatSeq *values = (*table)[0]; + delete table; + table_ = new Table1(values, axis_[0], own_axis_[0]); } else { FloatTable *table = makeFloatTable(attr, 1, 1, scale); - if (table) { - float value = (*(*table)[0])[0]; - delete (*table)[0]; - delete table; - table_ = new Table0(value); - } + float value = (*(*table)[0])[0]; + delete (*table)[0]; + delete table; + table_ = new Table0(value); } } else diff --git a/liberty/TimingArc.cc b/liberty/TimingArc.cc index ca83f8f0..43789d9b 100644 --- a/liberty/TimingArc.cc +++ b/liberty/TimingArc.cc @@ -91,6 +91,7 @@ TimingArcAttrs::setSdfCond(const char *cond) { stringDelete(sdf_cond_); sdf_cond_ = stringCopy(cond); + sdf_cond_start_ = sdf_cond_end_ = sdf_cond_; } void @@ -184,20 +185,10 @@ TimingArcSet::TimingArcSet(LibertyCell *cell, related_out_(related_out), role_(role), attrs_(attrs), - cond_(attrs->cond()), is_cond_default_(false), - sdf_cond_start_(attrs->sdfCondStart()), - sdf_cond_end_(attrs->sdfCondEnd()), - mode_name_(attrs->modeName()), - mode_value_(attrs->modeValue()), - ocv_arc_depth_(attrs->ocvArcDepth()), index_(0), is_disabled_constraint_(false) { - const char *sdf_cond = attrs->sdfCond(); - if (sdf_cond) - sdf_cond_start_ = sdf_cond_end_ = sdf_cond; - init(cell); } @@ -208,12 +199,7 @@ TimingArcSet::TimingArcSet(TimingRole *role, related_out_(nullptr), role_(role), attrs_(attrs), - cond_(nullptr), is_cond_default_(false), - sdf_cond_start_(nullptr), - sdf_cond_end_(nullptr), - mode_name_(nullptr), - mode_value_(nullptr), index_(0), is_disabled_constraint_(false) { @@ -363,15 +349,16 @@ float TimingArcSet::ocvArcDepth() const { if (from_) { - if (ocv_arc_depth_ != 0.0) - return ocv_arc_depth_; + float depth = attrs_->ocvArcDepth(); + if (depth != 0.0) + return depth; else { LibertyCell *cell = from_->libertyCell(); - float depth = cell->ocvArcDepth(); + depth = cell->ocvArcDepth(); if (depth != 0.0) return depth; else { - float depth = cell->libertyLibrary()->ocvArcDepth(); + depth = cell->libertyLibrary()->ocvArcDepth(); if (depth != 0.0) return depth; }