aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala')
-rw-r--r--src/main/scala/firrtl/passes/Passes.scala53
1 files changed, 25 insertions, 28 deletions
diff --git a/src/main/scala/firrtl/passes/Passes.scala b/src/main/scala/firrtl/passes/Passes.scala
index 46e68d5c..87458a2b 100644
--- a/src/main/scala/firrtl/passes/Passes.scala
+++ b/src/main/scala/firrtl/passes/Passes.scala
@@ -54,35 +54,32 @@ object ToWorkingIR extends Pass {
object PullMuxes extends Pass {
def name = "Pull Muxes"
def run(c: Circuit): Circuit = {
- def pull_muxes_e(e: Expression): Expression = {
- val exxx = e map pull_muxes_e match {
- case ex: WSubField => ex.exp match {
- case exx: Mux => Mux(exx.cond,
- WSubField(exx.tval, ex.name, ex.tpe, ex.gender),
- WSubField(exx.fval, ex.name, ex.tpe, ex.gender), ex.tpe)
- case exx: ValidIf => ValidIf(exx.cond,
- WSubField(exx.value, ex.name, ex.tpe, ex.gender), ex.tpe)
- case _ => ex // case exx => exx causes failed tests
- }
- case ex: WSubIndex => ex.exp match {
- case exx: Mux => Mux(exx.cond,
- WSubIndex(exx.tval, ex.value, ex.tpe, ex.gender),
- WSubIndex(exx.fval, ex.value, ex.tpe, ex.gender), ex.tpe)
- case exx: ValidIf => ValidIf(exx.cond,
- WSubIndex(exx.value, ex.value, ex.tpe, ex.gender), ex.tpe)
- case _ => ex // case exx => exx causes failed tests
- }
- case ex: WSubAccess => ex.exp match {
- case exx: Mux => Mux(exx.cond,
- WSubAccess(exx.tval, ex.index, ex.tpe, ex.gender),
- WSubAccess(exx.fval, ex.index, ex.tpe, ex.gender), ex.tpe)
- case exx: ValidIf => ValidIf(exx.cond,
- WSubAccess(exx.value, ex.index, ex.tpe, ex.gender), ex.tpe)
- case _ => ex // case exx => exx causes failed tests
- }
- case ex => ex
+ def pull_muxes_e(e: Expression): Expression = e map pull_muxes_e match {
+ case ex: WSubField => ex.exp match {
+ case exx: Mux => Mux(exx.cond,
+ WSubField(exx.tval, ex.name, ex.tpe, ex.gender),
+ WSubField(exx.fval, ex.name, ex.tpe, ex.gender), ex.tpe)
+ case exx: ValidIf => ValidIf(exx.cond,
+ WSubField(exx.value, ex.name, ex.tpe, ex.gender), ex.tpe)
+ case _ => ex // case exx => exx causes failed tests
}
- exxx map pull_muxes_e
+ case ex: WSubIndex => ex.exp match {
+ case exx: Mux => Mux(exx.cond,
+ WSubIndex(exx.tval, ex.value, ex.tpe, ex.gender),
+ WSubIndex(exx.fval, ex.value, ex.tpe, ex.gender), ex.tpe)
+ case exx: ValidIf => ValidIf(exx.cond,
+ WSubIndex(exx.value, ex.value, ex.tpe, ex.gender), ex.tpe)
+ case _ => ex // case exx => exx causes failed tests
+ }
+ case ex: WSubAccess => ex.exp match {
+ case exx: Mux => Mux(exx.cond,
+ WSubAccess(exx.tval, ex.index, ex.tpe, ex.gender),
+ WSubAccess(exx.fval, ex.index, ex.tpe, ex.gender), ex.tpe)
+ case exx: ValidIf => ValidIf(exx.cond,
+ WSubAccess(exx.value, ex.index, ex.tpe, ex.gender), ex.tpe)
+ case _ => ex // case exx => exx causes failed tests
+ }
+ case ex => ex
}
def pull_muxes(s: Statement): Statement = s map pull_muxes map pull_muxes_e
val modulesx = c.modules.map {