From 8ad540953eef215a189b3f324d1b01cdaf3ccaf2 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Tue, 31 Aug 2021 14:04:29 +0500 Subject: [PATCH] [K/N][optmz] Fix for https://youtrack.jetbrains.com/issue/KT-48380 --- .../backend/konan/optimizations/DFGBuilder.kt | 3 +-- .../backend/konan/optimizations/DataFlowIR.kt | 2 +- .../optimizations/DevirtualizationAnalysis.kt | 14 +++----------- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt index e77d6015649..979ead4981d 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt @@ -859,8 +859,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag DataFlowIR.Node.FieldWrite( receiver, value.symbol.owner.toDataFlowIRField(), - expressionToEdge(value.value), - mapReturnType(value.value.type, value.symbol.owner.type) + expressionToEdge(value.value) ) } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt index 5aa0fcd65cd..09672e8061c 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt @@ -266,7 +266,7 @@ internal object DataFlowIR { class FieldRead(val receiver: Edge?, val field: Field, val type: Type, val ir: IrGetField?) : Node() - class FieldWrite(val receiver: Edge?, val field: Field, val value: Edge, val type: Type) : Node() + class FieldWrite(val receiver: Edge?, val field: Field, val value: Edge) : Node() class ArrayRead(val callee: FunctionSymbol, val array: Edge, val index: Edge, val type: Type, val irCallSite: IrCall?) : Node() diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt index 4a0ae656981..d7c17fd719a 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt @@ -1098,15 +1098,7 @@ internal object DevirtualizationAnalysis { doCast(function, fieldNode, actualType) } - fun writeField(field: DataFlowIR.Field, actualType: DataFlowIR.Type.Declared, value: Node) { - val fieldNode = fieldNode(field) - val expectedType = field.type.resolved() - val castedValue = if (!useTypes || actualType == expectedType) - value - else - doCast(function, value, actualType) - addEdge(castedValue, fieldNode) - } + fun writeField(field: DataFlowIR.Field, value: Node) = addEdge(value, fieldNode(field)) if (node is DataFlowIR.Node.Variable && node.kind != DataFlowIR.VariableKind.Temporary) { var variableNode = variables[node] @@ -1227,7 +1219,7 @@ internal object DevirtualizationAnalysis { val type = node.field.type.resolved() if (entryPoint == null && type.isFinal) addInstantiatingClass(type) - writeField(node.field, node.type.resolved(), edgeToConstraintNode(node.value)) + writeField(node.field, edgeToConstraintNode(node.value)) constraintGraph.voidNode } @@ -1235,7 +1227,7 @@ internal object DevirtualizationAnalysis { readField(constraintGraph.arrayItemField, node.type.resolved()) is DataFlowIR.Node.ArrayWrite -> { - writeField(constraintGraph.arrayItemField, node.type.resolved(), edgeToConstraintNode(node.value)) + writeField(constraintGraph.arrayItemField, edgeToConstraintNode(node.value)) constraintGraph.voidNode }