var_naming and revert

This commit is contained in:
Yilou Wang 2025-10-20 22:52:06 +02:00
parent 64d48e4879
commit 69281ab33c
1 changed files with 16 additions and 16 deletions

View File

@ -230,14 +230,14 @@ class RandomizeMarkVisitor final : public VNVisitor {
// Build MemberSel chain from variable path // Build MemberSel chain from variable path
AstNodeExpr* buildMemberSelChain(AstVarRef* rootVarRefp, const std::vector<AstVar*>& path) { AstNodeExpr* buildMemberSelChain(AstVarRef* rootVarRefp, const std::vector<AstVar*>& path) {
AstNodeExpr* current = rootVarRefp->cloneTree(false); AstNodeExpr* exprp = rootVarRefp->cloneTree(false);
for (AstVar* memberVarp : path) { for (AstVar* memberVarp : path) {
AstMemberSel* memberSel AstMemberSel* memberSelp
= new AstMemberSel{rootVarRefp->fileline(), current, memberVarp}; = new AstMemberSel{rootVarRefp->fileline(), exprp, memberVarp};
memberSel->user2p(m_classp); memberSelp->user2p(m_classp);
current = memberSel; exprp = memberSelp;
} }
return current; return exprp;
} }
// Clone constraints from nested rand class members // Clone constraints from nested rand class members
@ -273,11 +273,11 @@ class RandomizeMarkVisitor final : public VNVisitor {
cloneConstrp->foreach([&](AstVarRef* varRefp) { cloneConstrp->foreach([&](AstVarRef* varRefp) {
if (!varRefp || !varRefp->varp()) return; if (!varRefp || !varRefp->varp()) return;
AstNodeExpr* chain = buildMemberSelChain(rootVarRefp, newPath); AstNodeExpr* const chainp = buildMemberSelChain(rootVarRefp, newPath);
AstMemberSel* finalSel = new AstMemberSel{varRefp->fileline(), AstMemberSel* const finalSelp = new AstMemberSel(varRefp->fileline(),
chain, varRefp->varp()}; chainp, varRefp->varp());
finalSel->user2p(m_classp); finalSelp->user2p(m_classp);
varRefp->replaceWith(finalSel); varRefp->replaceWith(finalSelp);
VL_DO_DANGLING(varRefp->deleteTree(), varRefp); VL_DO_DANGLING(varRefp->deleteTree(), varRefp);
}); });
@ -301,9 +301,9 @@ class RandomizeMarkVisitor final : public VNVisitor {
cloneCons->name(fromp->name() + GLOBAL_CONSTRAINT_SEPARATOR + cloneCons->name()); cloneCons->name(fromp->name() + GLOBAL_CONSTRAINT_SEPARATOR + cloneCons->name());
cloneCons->foreach([&](AstVarRef* varRefp) { cloneCons->foreach([&](AstVarRef* varRefp) {
if (!varRefp || !varRefp->varp()) return; if (!varRefp || !varRefp->varp()) return;
AstVarRef* clonedFromp = fromp->cloneTree(false); AstVarRef* const clonedFromp = fromp->cloneTree(false);
if (!clonedFromp) return; if (!clonedFromp) return;
AstMemberSel* varMemberp AstMemberSel* const varMemberp
= new AstMemberSel{cloneCons->fileline(), clonedFromp, varRefp->varp()}; = new AstMemberSel{cloneCons->fileline(), clonedFromp, varRefp->varp()};
varMemberp->user2p(m_classp); varMemberp->user2p(m_classp);
varRefp->replaceWith(varMemberp); varRefp->replaceWith(varMemberp);
@ -572,7 +572,7 @@ class RandomizeMarkVisitor final : public VNVisitor {
if (nodep->varp()->lifetime().isStatic()) m_staticRefs.emplace(nodep); if (nodep->varp()->lifetime().isStatic()) m_staticRefs.emplace(nodep);
if (nodep->varp()->rand().isRandomizable()) { nodep->user1(true); } if (nodep->varp()->rand().isRandomizable()) nodep->user1(true);
} }
void visit(AstMemberSel* nodep) override { void visit(AstMemberSel* nodep) override {
if (!m_constraintExprGenp) return; if (!m_constraintExprGenp) return;
@ -710,10 +710,10 @@ class ConstraintExprVisitor final : public VNVisitor {
// (used to format "%@.%@" for struct arrays) // (used to format "%@.%@" for struct arrays)
// Build full path for a MemberSel chain (e.g., "obj.l2.l3.l4") // Build full path for a MemberSel chain (e.g., "obj.l2.l3.l4")
std::string buildMemberPath(AstMemberSel* memberSelp) { std::string buildMemberPath(const AstMemberSel* memberSelp) {
if (!memberSelp) return ""; if (!memberSelp) return "";
AstNode* fromp = memberSelp->fromp(); const AstNode* fromp = memberSelp->fromp();
if (VN_IS(fromp, VarRef)) { if (VN_IS(fromp, VarRef)) {
// Base case: reached root VarRef // Base case: reached root VarRef
return VN_AS(fromp, VarRef)->name() + "." + memberSelp->name(); return VN_AS(fromp, VarRef)->name() + "." + memberSelp->name();