diff options
Diffstat (limited to 'src/main/scala/firrtl')
| -rw-r--r-- | src/main/scala/firrtl/passes/Passes.scala | 53 |
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 { |
