FIR CFA: remove edge kind merging

There shouldn't be any duplicate edges anymore. There probably weren't
any before, either.
This commit is contained in:
pyos
2022-11-27 22:18:49 +01:00
committed by Dmitriy Novozhilov
parent 069d99c5ea
commit 7feeb7cd4e
2 changed files with 20 additions and 54 deletions
@@ -312,7 +312,7 @@ class ControlFlowGraphBuilder {
if (isDefinitelyVisited || splitNode.isDead) {
// The edge that was added as a hack to enforce ordering of nodes needs to be marked as dead if this lambda is never
// skipped. Or if the entry node is dead, because at the time we added the hack-edge we didn't know that.
CFGNode.addJustKindEdge(splitNode, postponedExitNode, EdgeKind.DeadForward, propagateDeadness = !isDefinitelyVisited)
CFGNode.killEdge(splitNode, postponedExitNode, propagateDeadness = !isDefinitelyVisited)
}
if (invocationKind?.canBeVisited() == true) {
addEdge(exitNode, postponedExitNode, propagateDeadness = isDefinitelyVisited)
@@ -1449,15 +1449,9 @@ class ControlFlowGraphBuilder {
if (!node.isDead) return
for (next in node.followingNodes) {
val kind = node.outgoingEdges.getValue(next).kind
if (kind.isDead) continue
if (kind.isBack) {
CFGNode.addJustKindEdge(node, next, EdgeKind.DeadBackward, propagateDeadness = false)
} else {
CFGNode.addJustKindEdge(node, next, EdgeKind.DeadForward, propagateDeadness = false)
if (kind.usedInCfa) {
next.updateDeadStatus()
propagateDeadnessForward(next)
}
if (CFGNode.killEdge(node, next, propagateDeadness = false) && !kind.isBack && kind.usedInCfa) {
next.updateDeadStatus()
propagateDeadnessForward(next)
}
}
}