aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/backends/experimental
diff options
context:
space:
mode:
authorKevin Laeufer2021-08-02 13:46:29 -0700
committerGitHub2021-08-02 20:46:29 +0000
commite04f1e7f303920ac1d1f865450d0e280aafb58b3 (patch)
tree73f26cd236ac8069d9c4877a3c42457d65d477fe /src/main/scala/firrtl/backends/experimental
parentff1cd28202fb423956a6803a889c3632487d8872 (diff)
add emitter for optimized low firrtl (#2304)
* rearrange passes to enable optimized firrtl emission * Support ConstProp on padded arguments to comparisons with literals * Move shr legalization logic into ConstProp Continue calling ConstProp of shr in Legalize. Co-authored-by: Jack Koenig <koenig@sifive.com> Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'src/main/scala/firrtl/backends/experimental')
-rw-r--r--src/main/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemantics.scala4
-rw-r--r--src/main/scala/firrtl/backends/experimental/smt/FirrtlToTransitionSystem.scala6
2 files changed, 5 insertions, 5 deletions
diff --git a/src/main/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemantics.scala b/src/main/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemantics.scala
index 099b6712..2c08ff6a 100644
--- a/src/main/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemantics.scala
+++ b/src/main/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemantics.scala
@@ -118,8 +118,8 @@ private object FirrtlExpressionSemantics {
// the resulting value will be zero for unsigned types
// and the sign bit for signed types"
if (n >= width) {
- if (isSigned(e)) { BV1BitZero }
- else { BVSlice(toSMT(e), width - 1, width - 1) }
+ if (isSigned(e)) { BVSlice(toSMT(e), width - 1, width - 1) }
+ else { BV1BitZero }
} else {
BVSlice(toSMT(e), width - 1, n.toInt)
}
diff --git a/src/main/scala/firrtl/backends/experimental/smt/FirrtlToTransitionSystem.scala b/src/main/scala/firrtl/backends/experimental/smt/FirrtlToTransitionSystem.scala
index 78ad3c80..0b8e3ebf 100644
--- a/src/main/scala/firrtl/backends/experimental/smt/FirrtlToTransitionSystem.scala
+++ b/src/main/scala/firrtl/backends/experimental/smt/FirrtlToTransitionSystem.scala
@@ -451,7 +451,7 @@ private class ModuleScanner(
val name = loc.serialize
insertDummyAssignsForUnusedOutputs(expr)
infos.append(name -> info)
- connects.append((name, onExpression(expr, bitWidth(loc.tpe).toInt)))
+ connects.append((name, onExpression(expr, bitWidth(loc.tpe).toInt, allowNarrow = true)))
}
case i @ ir.IsInvalid(info, loc) =>
if (!isGroundType(loc.tpe)) error("All connects should have been lowered to ground type!")
@@ -591,9 +591,9 @@ private class ModuleScanner(
private case class Context() extends TranslationContext {}
- private def onExpression(e: ir.Expression, width: Int): BVExpr = {
+ private def onExpression(e: ir.Expression, width: Int, allowNarrow: Boolean = false): BVExpr = {
implicit val ctx: TranslationContext = Context()
- FirrtlExpressionSemantics.toSMT(e, width, allowNarrow = false)
+ FirrtlExpressionSemantics.toSMT(e, width, allowNarrow)
}
private def onExpression(e: ir.Expression): BVExpr = {
implicit val ctx: TranslationContext = Context()