Internals: Use AstUserAllocator in V3Order

This commit is contained in:
Geza Lore 2021-06-19 14:40:31 +01:00
parent 8d737271ca
commit eebda248c7
1 changed files with 5 additions and 11 deletions

View File

@ -80,6 +80,7 @@
#include "verilatedos.h" #include "verilatedos.h"
#include "V3Ast.h" #include "V3Ast.h"
#include "V3AstUserAllocator.h"
#include "V3Const.h" #include "V3Const.h"
#include "V3EmitCBase.h" #include "V3EmitCBase.h"
#include "V3EmitV.h" #include "V3EmitV.h"
@ -640,7 +641,7 @@ private:
// NODE STATE // NODE STATE
// Forming graph: // Forming graph:
// Entire Netlist: // Entire Netlist:
// AstVarScope::user1p -> OrderUser* for usage var // AstVarScope::user1u -> OrderUser* for usage var (via m_orderUser)
// {statement}Node::user1p-> AstModule* statement is under // {statement}Node::user1p-> AstModule* statement is under
// USER4 Cleared on each Logic stmt // USER4 Cleared on each Logic stmt
// AstVarScope::user4() -> VarUsage(gen/con/both). Where already encountered signal // AstVarScope::user4() -> VarUsage(gen/con/both). Where already encountered signal
@ -654,6 +655,8 @@ private:
AstUser3InUse m_inuser3; AstUser3InUse m_inuser3;
// AstUser4InUse m_inuser4; // Used only when building tree, so below // AstUser4InUse m_inuser4; // Used only when building tree, so below
AstUser1Allocator<AstVarScope, OrderUser> m_orderUser;
// STATE // STATE
OrderGraph m_graph; // Scoreboard of var usages/dependencies OrderGraph m_graph; // Scoreboard of var usages/dependencies
SenTreeFinder m_finder; // Find global sentree's and add them SenTreeFinder m_finder; // Find global sentree's and add them
@ -673,7 +676,6 @@ private:
bool m_inPost = false; // Underneath AstAssignPost bool m_inPost = false; // Underneath AstAssignPost
bool m_inPostponed = false; // Underneath AstAssignPostponed bool m_inPostponed = false; // Underneath AstAssignPostponed
OrderLogicVertex* m_activeSenVxp = nullptr; // Sensitivity vertex OrderLogicVertex* m_activeSenVxp = nullptr; // Sensitivity vertex
std::deque<OrderUser*> m_orderUserps; // All created OrderUser's for later deletion.
// STATE... for inside process // STATE... for inside process
AstCFunc* m_pomNewFuncp = nullptr; // Current function being created AstCFunc* m_pomNewFuncp = nullptr; // Current function being created
int m_pomNewStmts = 0; // Statements in function being created int m_pomNewStmts = 0; // Statements in function being created
@ -717,14 +719,7 @@ private:
OrderVarVertex* newVarUserVertex(AstVarScope* varscp, WhichVertex type, OrderVarVertex* newVarUserVertex(AstVarScope* varscp, WhichVertex type,
bool* createdp = nullptr) { bool* createdp = nullptr) {
if (!varscp->user1p()) { return m_orderUser(varscp).newVarUserVertex(&m_graph, m_scopep, varscp, type, createdp);
OrderUser* newup = new OrderUser();
m_orderUserps.push_back(newup);
varscp->user1p(newup);
}
OrderUser* up = reinterpret_cast<OrderUser*>(varscp->user1p());
OrderVarVertex* varVxp = up->newVarUserVertex(&m_graph, m_scopep, varscp, type, createdp);
return varVxp;
} }
void process(); void process();
@ -1232,7 +1227,6 @@ public:
} }
} }
// Destruction // Destruction
for (OrderUser* ip : m_orderUserps) delete ip;
m_graph.debug(V3Error::debugDefault()); m_graph.debug(V3Error::debugDefault());
} }
void main(AstNode* nodep) { iterate(nodep); } void main(AstNode* nodep) { iterate(nodep); }