Internals: Remove m_logicMap as m_detailedMap covers it. No functional change intended.
This commit is contained in:
parent
a95f58749f
commit
3a720204c2
|
|
@ -1139,7 +1139,7 @@ void AstNode::v3errorEnd(std::ostringstream& str) const {
|
||||||
void AstNode::dtypeChgSigned(bool flag) {
|
void AstNode::dtypeChgSigned(bool flag) {
|
||||||
UASSERT_OBJ(dtypep(), this, "No dtype when changing to (un)signed");
|
UASSERT_OBJ(dtypep(), this, "No dtype when changing to (un)signed");
|
||||||
dtypeChgWidthSigned(dtypep()->width(), dtypep()->widthMin(),
|
dtypeChgWidthSigned(dtypep()->width(), dtypep()->widthMin(),
|
||||||
flag ? AstNumeric::SIGNED : AstNumeric::UNSIGNED);
|
AstNumeric::fromBool(flag));
|
||||||
}
|
}
|
||||||
void AstNode::dtypeChgWidth(int width, int widthMin) {
|
void AstNode::dtypeChgWidth(int width, int widthMin) {
|
||||||
UASSERT_OBJ(dtypep(), this,
|
UASSERT_OBJ(dtypep(), this,
|
||||||
|
|
|
||||||
|
|
@ -1942,7 +1942,7 @@ public:
|
||||||
// AstNumeric::NOSIGN overloaded to indicate not packed
|
// AstNumeric::NOSIGN overloaded to indicate not packed
|
||||||
m_packed = (numericUnpack != AstNumeric::NOSIGN);
|
m_packed = (numericUnpack != AstNumeric::NOSIGN);
|
||||||
m_isFourstate = false; // V3Width computes
|
m_isFourstate = false; // V3Width computes
|
||||||
numeric(numericUnpack.isSigned() ? AstNumeric::SIGNED : AstNumeric::UNSIGNED);
|
numeric(AstNumeric::fromBool(numericUnpack.isSigned()));
|
||||||
}
|
}
|
||||||
ASTNODE_BASE_FUNCS(NodeClassDType)
|
ASTNODE_BASE_FUNCS(NodeClassDType)
|
||||||
virtual const char* broken() const;
|
virtual const char* broken() const;
|
||||||
|
|
|
||||||
|
|
@ -676,12 +676,6 @@ void AstTypeTable::clearCache() {
|
||||||
for (int i=0; i < static_cast<int>(AstBasicDTypeKwd::_ENUM_MAX); ++i) {
|
for (int i=0; i < static_cast<int>(AstBasicDTypeKwd::_ENUM_MAX); ++i) {
|
||||||
m_basicps[i] = NULL;
|
m_basicps[i] = NULL;
|
||||||
}
|
}
|
||||||
for (int isbit=0; isbit<_IDX0_MAX; ++isbit) {
|
|
||||||
for (int numer=0; numer<AstNumeric::_ENUM_MAX; ++numer) {
|
|
||||||
LogicMap& mapr = m_logicMap[isbit][numer];
|
|
||||||
mapr.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_detailedMap.clear();
|
m_detailedMap.clear();
|
||||||
// Clear generic()'s so dead detection will work
|
// Clear generic()'s so dead detection will work
|
||||||
for (AstNode* nodep = typesp(); nodep; nodep=nodep->nextp()) {
|
for (AstNode* nodep = typesp(); nodep; nodep=nodep->nextp()) {
|
||||||
|
|
@ -718,24 +712,10 @@ AstBasicDType* AstTypeTable::findBasicDType(FileLine* fl, AstBasicDTypeKwd kwd)
|
||||||
|
|
||||||
AstBasicDType* AstTypeTable::findLogicBitDType(FileLine* fl, AstBasicDTypeKwd kwd,
|
AstBasicDType* AstTypeTable::findLogicBitDType(FileLine* fl, AstBasicDTypeKwd kwd,
|
||||||
int width, int widthMin, AstNumeric numeric) {
|
int width, int widthMin, AstNumeric numeric) {
|
||||||
int idx = IDX0_LOGIC;
|
|
||||||
if (kwd == AstBasicDTypeKwd::LOGIC) idx = IDX0_LOGIC;
|
|
||||||
else if (kwd == AstBasicDTypeKwd::BIT) idx = IDX0_BIT;
|
|
||||||
else fl->v3fatalSrc("Bad kwd for findLogicBitDType");
|
|
||||||
std::pair<int,int> widths = make_pair(width, widthMin);
|
|
||||||
LogicMap& mapr = m_logicMap[idx][static_cast<int>(numeric)];
|
|
||||||
LogicMap::const_iterator it = mapr.find(widths);
|
|
||||||
if (it != mapr.end()) return it->second;
|
|
||||||
//
|
|
||||||
AstBasicDType* new1p = new AstBasicDType(fl, kwd, numeric, width, widthMin);
|
AstBasicDType* new1p = new AstBasicDType(fl, kwd, numeric, width, widthMin);
|
||||||
// Because the detailed map doesn't update this map,
|
|
||||||
// check the detailed map for this same node, and if found update this map
|
|
||||||
// Also adds this new node to the detailed map
|
|
||||||
AstBasicDType* newp = findInsertSameDType(new1p);
|
AstBasicDType* newp = findInsertSameDType(new1p);
|
||||||
if (newp != new1p) new1p->deleteTree();
|
if (newp != new1p) new1p->deleteTree();
|
||||||
else addTypesp(newp);
|
else addTypesp(newp);
|
||||||
//
|
|
||||||
mapr.insert(make_pair(widths, newp));
|
|
||||||
return newp;
|
return newp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1030,22 +1010,6 @@ void AstTypeTable::dump(std::ostream& str) {
|
||||||
subnodep->dump(str);
|
subnodep->dump(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int isbit=0; isbit<2; ++isbit) {
|
|
||||||
for (int issigned=0; issigned<AstNumeric::_ENUM_MAX; ++issigned) {
|
|
||||||
LogicMap& mapr = m_logicMap[isbit][issigned];
|
|
||||||
for (LogicMap::const_iterator it = mapr.begin(); it != mapr.end(); ++it) {
|
|
||||||
AstBasicDType* dtypep = it->second;
|
|
||||||
str<<endl; // Newline from caller, so newline first
|
|
||||||
std::stringstream nsstr;
|
|
||||||
nsstr<<(isbit?"bw":"lw")
|
|
||||||
<<it->first.first<<"/"<<it->first.second;
|
|
||||||
str<<"\t\t"<<std::setw(8)<<nsstr.str();
|
|
||||||
if (issigned) str<<" s"; else str<<" u";
|
|
||||||
str<<" -> ";
|
|
||||||
dtypep->dump(str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
DetailedMap& mapr = m_detailedMap;
|
DetailedMap& mapr = m_detailedMap;
|
||||||
for (DetailedMap::const_iterator it = mapr.begin(); it != mapr.end(); ++it) {
|
for (DetailedMap::const_iterator it = mapr.begin(); it != mapr.end(); ++it) {
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,7 @@ private:
|
||||||
dtypeSetString();
|
dtypeSetString();
|
||||||
} else {
|
} else {
|
||||||
dtypeSetLogicSized(m_num.width(), (m_num.sized() ? 0 : m_num.widthMin()),
|
dtypeSetLogicSized(m_num.width(), (m_num.sized() ? 0 : m_num.widthMin()),
|
||||||
m_num.isSigned() ? AstNumeric::SIGNED
|
AstNumeric::fromBool(m_num.isSigned()));
|
||||||
: AstNumeric::UNSIGNED);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
|
|
@ -6066,12 +6065,8 @@ public:
|
||||||
class AstTypeTable : public AstNode {
|
class AstTypeTable : public AstNode {
|
||||||
// Container for hash of standard data types
|
// Container for hash of standard data types
|
||||||
// Children: NODEDTYPEs
|
// Children: NODEDTYPEs
|
||||||
typedef std::map<std::pair<int,int>,AstBasicDType*> LogicMap;
|
|
||||||
AstBasicDType* m_basicps[AstBasicDTypeKwd::_ENUM_MAX];
|
AstBasicDType* m_basicps[AstBasicDTypeKwd::_ENUM_MAX];
|
||||||
//
|
//
|
||||||
enum { IDX0_LOGIC, IDX0_BIT, _IDX0_MAX };
|
|
||||||
LogicMap m_logicMap[_IDX0_MAX][AstNumeric::_ENUM_MAX]; // uses above IDX enums
|
|
||||||
//
|
|
||||||
typedef std::map<VBasicTypeKey,AstBasicDType*> DetailedMap;
|
typedef std::map<VBasicTypeKey,AstBasicDType*> DetailedMap;
|
||||||
DetailedMap m_detailedMap;
|
DetailedMap m_detailedMap;
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -833,7 +833,7 @@ private:
|
||||||
// use the lhs to replace the parent concat
|
// use the lhs to replace the parent concat
|
||||||
lp->lhsp()->replaceWith(newlp);
|
lp->lhsp()->replaceWith(newlp);
|
||||||
lp->rhsp()->replaceWith(newrp);
|
lp->rhsp()->replaceWith(newrp);
|
||||||
lp->dtypeChgWidthSigned(newlp->width(), newlp->width(), AstNumeric::fromBool(true));
|
lp->dtypeChgWidthSigned(newlp->width(), newlp->width(), AstNumeric::SIGNED);
|
||||||
UINFO(5, "merged "<< nodep <<endl);
|
UINFO(5, "merged "<< nodep <<endl);
|
||||||
rp->unlinkFrBack()->deleteTree(); VL_DANGLING(rp);
|
rp->unlinkFrBack()->deleteTree(); VL_DANGLING(rp);
|
||||||
nodep->replaceWith(lp->unlinkFrBack()); nodep->deleteTree(); VL_DANGLING(nodep);
|
nodep->replaceWith(lp->unlinkFrBack()); nodep->deleteTree(); VL_DANGLING(nodep);
|
||||||
|
|
|
||||||
|
|
@ -1330,7 +1330,7 @@ private:
|
||||||
oldrhsp->deleteTree(); VL_DANGLING(oldrhsp);
|
oldrhsp->deleteTree(); VL_DANGLING(oldrhsp);
|
||||||
m_assignp->dtypeChgWidthSigned(m_assignp->width()+assignp->width(),
|
m_assignp->dtypeChgWidthSigned(m_assignp->width()+assignp->width(),
|
||||||
m_assignp->width()+assignp->width(),
|
m_assignp->width()+assignp->width(),
|
||||||
AstNumeric::fromBool(true));
|
AstNumeric::SIGNED);
|
||||||
// don't need to delete, will be handled
|
// don't need to delete, will be handled
|
||||||
//assignp->unlinkFrBack(); assignp->deleteTree(); VL_DANGLING(assignp);
|
//assignp->unlinkFrBack(); assignp->deleteTree(); VL_DANGLING(assignp);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue