JVM KT-47613 traverse nodes backwards in backward analysis

This commit is contained in:
Dmitry Petrov
2021-07-10 20:37:30 +03:00
parent 8c021af646
commit fe71435104
@@ -38,13 +38,12 @@ fun <F : VarFrame<F>> analyze(node: MethodNode, interpreter: BackwardAnalysisInt
val frames = (1..insnList.size()).map { interpreter.newFrame(node.maxLocals) }.toMutableList()
val insnArray = insnList.toArray()
// see Figure 9.16 from Dragon book
var wereChanges: Boolean
do {
wereChanges = false
for (insn in insnArray) {
val index = insnList.indexOf(insn)
for (index in insnArray.indices.reversed()) {
val insn = insnArray[index]
val newFrame = interpreter.newFrame(node.maxLocals)
for (successorIndex in graph.getSuccessorsIndices(insn)) {
newFrame.mergeFrom(frames[successorIndex])