From 29584edcdd6b155a103703a121674ed28de720ba Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Wed, 19 May 2021 14:52:32 +0500 Subject: [PATCH] [K/N][codegen] Escape analysis: handled nulls more optimally Helps with https://youtrack.jetbrains.com/issue/KT-44148 --- .../kotlin/backend/konan/optimizations/EscapeAnalysis.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/EscapeAnalysis.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/EscapeAnalysis.kt index 917948603cd..9375bbb0d82 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/EscapeAnalysis.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/EscapeAnalysis.kt @@ -182,13 +182,14 @@ internal object EscapeAnalysis { fun computeDepths(node: DataFlowIR.Node, depth: Int) { if (node is DataFlowIR.Node.Scope) node.nodes.forEach { computeDepths(it, depth + 1) } - else + else if (node != DataFlowIR.Node.Null) nodesRoles[node] = NodeInfo(depth) } computeDepths(body.rootScope, Depths.ROOT_SCOPE - 1) fun assignRole(node: DataFlowIR.Node, role: Role, infoEntry: RoleInfoEntry?) { - nodesRoles[node]!!.add(role, infoEntry) + if (node != DataFlowIR.Node.Null && infoEntry?.node != DataFlowIR.Node.Null) + nodesRoles[node]!!.add(role, infoEntry) } body.returns.values.forEach { assignRole(it.node, Role.RETURN_VALUE, null) }