aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJack Koenig2021-03-13 18:38:20 -0800
committerGitHub2021-03-14 02:38:20 +0000
commitfd55c51bcef01c2b2919817aa33c67e5a0849d05 (patch)
tree309cfe0f72b8bf6e9cc10b4a98d32e6f6054da44 /src/main
parented1eb88d6ccdccd4b5802676cd8b69f5cc357e4f (diff)
Fix cat of zero-width SInt (#2116)
Previously, concatenating two SInts where one is of zero-width would return the non-zero-width SInt. This is incorrect because the output of Cat should be of type UInt. Now the ZeroWidth transform will introduce a cast when removing a Cat when the argument type is non-UInt.
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/passes/ZeroWidth.scala5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/passes/ZeroWidth.scala b/src/main/scala/firrtl/passes/ZeroWidth.scala
index 60439ec1..e918ff63 100644
--- a/src/main/scala/firrtl/passes/ZeroWidth.scala
+++ b/src/main/scala/firrtl/passes/ZeroWidth.scala
@@ -135,8 +135,9 @@ object ZeroWidth extends Transform with DependencyAPIMigration {
}
}
nonZeros match {
- case Nil => UIntLiteral(ZERO, IntWidth(BigInt(1)))
- case Seq(x) => x
+ case Nil => UIntLiteral(ZERO, IntWidth(BigInt(1)))
+ // We may have an SInt, Cat has type UInt so cast
+ case Seq(x) => castRhs(tpe, x)
case seq => DoPrim(Cat, seq, consts, tpe).map(onExp)
}
case DoPrim(Andr, Seq(x), _, _) if (bitWidth(x.tpe) == 0) => UIntLiteral(1) // nothing false