aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/transforms/ConstantPropagation.scala
diff options
context:
space:
mode:
authorSchuyler Eldridge2019-02-05 14:57:53 -0500
committerGitHub2019-02-05 14:57:53 -0500
commitd69c609fd41c2b6ca2993085bcd2923daa563bde (patch)
tree3d7a3bacd8debc917cd5525d6fdecdee6a50e31c /src/main/scala/firrtl/transforms/ConstantPropagation.scala
parentfa0a6e2cbe2a78fc231f47b5b73d870669b54ade (diff)
parent0a88492bfbbfe7e446b74776ec59cab69e73585b (diff)
Merge pull request #1004 from seldridge/issue-423
Add "mverilog" Compiler Option, MinimumVerilogEmitter
Diffstat (limited to 'src/main/scala/firrtl/transforms/ConstantPropagation.scala')
-rw-r--r--src/main/scala/firrtl/transforms/ConstantPropagation.scala22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/main/scala/firrtl/transforms/ConstantPropagation.scala b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
index 54338719..6618312a 100644
--- a/src/main/scala/firrtl/transforms/ConstantPropagation.scala
+++ b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
@@ -45,6 +45,17 @@ object ConstantPropagation {
case _ => e
}
}
+
+ def foldShiftRight(e: DoPrim) = e.consts.head.toInt match {
+ case 0 => e.args.head
+ case x => e.args.head match {
+ // TODO when amount >= x.width, return a zero-width wire
+ case UIntLiteral(v, IntWidth(w)) => UIntLiteral(v >> x, IntWidth((w - x) max 1))
+ // take sign bit if shift amount is larger than arg width
+ case SIntLiteral(v, IntWidth(w)) => SIntLiteral(v >> x, IntWidth((w - x) max 1))
+ case _ => e
+ }
+ }
}
class ConstantPropagation extends Transform with ResolvedAnnotationPaths {
@@ -144,17 +155,6 @@ class ConstantPropagation extends Transform with ResolvedAnnotationPaths {
case _ => e
}
- private def foldShiftRight(e: DoPrim) = e.consts.head.toInt match {
- case 0 => e.args.head
- case x => e.args.head match {
- // TODO when amount >= x.width, return a zero-width wire
- case UIntLiteral(v, IntWidth(w)) => UIntLiteral(v >> x, IntWidth((w - x) max 1))
- // take sign bit if shift amount is larger than arg width
- case SIntLiteral(v, IntWidth(w)) => SIntLiteral(v >> x, IntWidth((w - x) max 1))
- case _ => e
- }
- }
-
private def foldDynamicShiftRight(e: DoPrim) = e.args.last match {
case UIntLiteral(v, IntWidth(w)) =>
val shr = DoPrim(Shr, Seq(e.args.head), Seq(v), UnknownType)