mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 01:54:01 +02:00
Fix bit reductions on multi-packed dimensions, bug227/patch0004.
This commit is contained in:
+18
-1
@@ -134,7 +134,8 @@ class SliceCloneVisitor : public AstNVisitor {
|
||||
nodep->unlinkFrBack()->deleteTree(); nodep = NULL;
|
||||
}
|
||||
|
||||
virtual void visit(AstNodeUniop* nodep, AstNUser*) {
|
||||
// Not all Uniop nodes should be cloned down to a single bit
|
||||
void cloneUniop(AstNodeUniop* nodep) {
|
||||
if (nodep->user2() < 2) return; // Don't need clones
|
||||
m_selBits.clear();
|
||||
UINFO(4, "Cloning "<<nodep->user2()<<" times: "<<nodep<<endl);
|
||||
@@ -181,6 +182,22 @@ class SliceCloneVisitor : public AstNVisitor {
|
||||
nodep->unlinkFrBack()->deleteTree(); nodep = NULL;
|
||||
}
|
||||
|
||||
virtual void visit(AstRedOr* nodep, AstNUser*) {
|
||||
cloneUniop(nodep);
|
||||
}
|
||||
|
||||
virtual void visit(AstRedAnd* nodep, AstNUser*) {
|
||||
cloneUniop(nodep);
|
||||
}
|
||||
|
||||
virtual void visit(AstRedXor* nodep, AstNUser*) {
|
||||
cloneUniop(nodep);
|
||||
}
|
||||
|
||||
virtual void visit(AstRedXnor* nodep, AstNUser*) {
|
||||
cloneUniop(nodep);
|
||||
}
|
||||
|
||||
virtual void visit(AstNode* nodep, AstNUser*) {
|
||||
// Default: Just iterate
|
||||
nodep->iterateChildren(*this);
|
||||
|
||||
Reference in New Issue
Block a user