Fix errant integer promotion (#7012)

This commit is contained in:
Todd Strader
2026-02-28 09:52:35 -05:00
committed by GitHub
parent 02c1dbc5dc
commit 8705bc56c8
5 changed files with 1155 additions and 1113 deletions
+2 -1
View File
@@ -18,7 +18,7 @@
// Each module:
// For each expression, if it requires a clean operand,
// and the operand is dirty, insert a CLEAN node.
// Resize operands to C++ 32/64/wide types.
// Resize operands (but not variables or variable selects) to C++ 32/64/wide types.
// Copy all width() values to widthMin() so RANGE, etc can still see orig widths
//
//*************************************************************************
@@ -83,6 +83,7 @@ class CleanVisitor final : public VNVisitor {
if (VN_IS(nodep, Var) //
|| VN_IS(nodep, ConsPackMember) //
|| VN_IS(nodep, NodeDType) // Don't want to change variable widths!
|| VN_IS(nodep, NodeSel) // Array selects should reflect variable widths
|| VN_IS(nodep->dtypep()->skipRefp(), AssocArrayDType) // Or arrays
|| VN_IS(nodep->dtypep()->skipRefp(), WildcardArrayDType)
|| VN_IS(nodep->dtypep()->skipRefp(), DynArrayDType)
+2 -1
View File
@@ -527,7 +527,8 @@ static void process() {
// Bits between widthMin() and width() are irrelevant, but may be non zero.
v3Global.widthMinUsage(VWidthMinUsage::VERILOG_WIDTH);
// Make all expressions either 8, 16, 32 or 64 bits
// Make all expressions 32, 64, or 32*N bits
// Variables and selects-of-variables remain verilog-width
V3Clean::cleanAll(v3Global.rootp());
// Move wide constants to BLOCK temps / ConstPool.