blob: ab48c3db32bf9a22fce743dc9da7a3d301623840 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
// SPDX-License-Identifier: Apache-2.0
package firrtl.passes
import firrtl.Transform
import firrtl.ir._
import firrtl.{WSubAccess, WSubIndex}
import firrtl.Mappers._
import firrtl.options.Dependency
/** Replaces constant [[firrtl.WSubAccess]] with [[firrtl.WSubIndex]]
* TODO Fold in to High Firrtl Const Prop
*/
object ReplaceAccesses extends Pass {
override def prerequisites = firrtl.stage.Forms.Deduped :+ Dependency(PullMuxes)
override def invalidates(a: Transform) = false
def run(c: Circuit): Circuit = {
def onStmt(s: Statement): Statement = s.map(onStmt).map(onExp)
def onExp(e: Expression): Expression = e match {
case WSubAccess(ex, UIntLiteral(value, _), t, g) =>
ex.tpe match {
case VectorType(_, len) if (value < len) => WSubIndex(onExp(ex), value.toInt, t, g)
case _ => e.map(onExp)
}
case _ => e.map(onExp)
}
c.copy(modules = c.modules.map(_.map(onStmt)))
}
}
|