From c1c04376cf1b61e14c17dba0b1a9919d6e07e7cc Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Thu, 7 Sep 2023 18:04:21 +0200 Subject: [PATCH] [JVM] Replace open functions in `FastAnalyzer` with constructor args --- .../codegen/optimization/common/FastAnalyzer.kt | 10 ++++------ .../optimization/common/FastMethodAnalyzer.kt | 7 ++++++- .../optimization/fixStack/FastStackAnalyzer.kt | 12 +++++++----- .../optimization/fixStack/FixStackAnalyzer.kt | 3 +-- .../temporaryVals/FastStoreLoadAnalyzer.kt | 8 +++++++- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastAnalyzer.kt index 54e087eff7a..c995eb27d88 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastAnalyzer.kt @@ -20,6 +20,8 @@ abstract class FastAnalyzer>( private val method: MethodNode, private val interpreter: Interpreter, private val pruneExceptionEdges: Boolean, + private val useFastComputeExceptionHandlers: Boolean, + private val useFastMergeControlFlowEdge: Boolean, private val newFrame: (Int, Int) -> F ) { private val nInsns = method.instructions.size() @@ -139,11 +141,9 @@ abstract class FastAnalyzer>( throw AssertionError("Subroutines are deprecated since Java 6") } - protected open fun useFastComputeExceptionHandlers(): Boolean = false - private fun computeExceptionHandlers(m: MethodNode) { for (tcb in m.tryCatchBlocks) { - if (useFastComputeExceptionHandlers()) computeExceptionHandlerFast(tcb) else computeExceptionHandlersForEachInsn(tcb) + if (useFastComputeExceptionHandlers) computeExceptionHandlerFast(tcb) else computeExceptionHandlersForEachInsn(tcb) } } @@ -209,8 +209,6 @@ abstract class FastAnalyzer>( } } - protected open fun useFastMergeControlFlowEdge(): Boolean = false - /** * Updates frame at the index [dest] with its old value if provided and previous control flow node frame [frame]. * Reuses old frame when possible and when [canReuse] is true. @@ -231,7 +229,7 @@ abstract class FastAnalyzer>( oldFrame.init(frame) true } - !useFastMergeControlFlowEdge() -> + !useFastMergeControlFlowEdge -> try { oldFrame.merge(frame, interpreter) } catch (e: AnalyzerException) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastMethodAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastMethodAnalyzer.kt index ab2229a98ca..fe16d3f8036 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastMethodAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/FastMethodAnalyzer.kt @@ -45,4 +45,9 @@ class FastMethodAnalyzer interpreter: Interpreter, pruneExceptionEdges: Boolean = false, newFrame: (Int, Int) -> Frame = { nLocals, nStack -> Frame(nLocals, nStack) } -) : FastAnalyzer>(owner, method, interpreter, pruneExceptionEdges, newFrame) +) : FastAnalyzer>( + owner, method, interpreter, pruneExceptionEdges, + useFastComputeExceptionHandlers = false, + useFastMergeControlFlowEdge = false, + newFrame +) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FastStackAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FastStackAnalyzer.kt index c01be5fbe44..81edd50f089 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FastStackAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FastStackAnalyzer.kt @@ -46,9 +46,11 @@ internal open class FastStackAnalyzer>( method: MethodNode, interpreter: Interpreter, newFrame: (Int, Int) -> F -) : FastAnalyzer(owner, method, interpreter, pruneExceptionEdges = false, newFrame) { - +) : FastAnalyzer( + owner, method, interpreter, + pruneExceptionEdges = false, // Don't have to visit the same exception handler multiple times - we care only about stack state at TCB start. - override fun useFastComputeExceptionHandlers(): Boolean = true - override fun useFastMergeControlFlowEdge(): Boolean = true -} + useFastComputeExceptionHandlers = true, + useFastMergeControlFlowEdge = true, + newFrame +) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt index 9abcfd3fe18..bc4ee78ec6a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt @@ -46,8 +46,7 @@ internal class FixStackAnalyzer( owner, method, FixStackInterpreter(), { nLocals, nStack -> FixStackFrame(nLocals, nStack) } ) { override fun visitControlFlowEdge(insnNode: AbstractInsnNode, successor: Int): Boolean { - if (!skipBreakContinueGotoEdges) return true - return !(insnNode is JumpInsnNode && context.breakContinueGotoNodes.contains(insnNode)) + return !(skipBreakContinueGotoEdges && insnNode is JumpInsnNode && context.breakContinueGotoNodes.contains(insnNode)) } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/FastStoreLoadAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/FastStoreLoadAnalyzer.kt index 807e7a92efd..fedb2cc4cb2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/FastStoreLoadAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/temporaryVals/FastStoreLoadAnalyzer.kt @@ -67,4 +67,10 @@ class FastStoreLoadAnalyzer( method: MethodNode, interpreter: Interpreter, newFrame: (Int, Int) -> StoreLoadFrame = { nLocals, _ -> StoreLoadFrame(nLocals) } -) : FastAnalyzer>(owner, method, interpreter, pruneExceptionEdges = false, newFrame) +) : FastAnalyzer>( + owner, method, interpreter, + pruneExceptionEdges = false, + useFastComputeExceptionHandlers = false, + useFastMergeControlFlowEdge = false, + newFrame +)