From 15a969b3ba226fe02e97589ac6666c4c3b33b09c Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 1 Jul 2020 02:38:41 +0200 Subject: [PATCH] IR: refactor performByIrFile a little Take a list of phases instead of the CompositePhase, to make stacktraces nicer and avoid quadratic time of phase construction. --- .../backend/common/phaser/PhaseBuilders.kt | 20 +-- .../jetbrains/kotlin/backend/jvm/JvmLower.kt | 162 +++++++++--------- 2 files changed, 90 insertions(+), 92 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/PhaseBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/PhaseBuilders.kt index b194103ce4d..04655a4af5f 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/PhaseBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/PhaseBuilders.kt @@ -132,27 +132,24 @@ fun namedOpUnitPhase( fun performByIrFile( name: String = "PerformByIrFile", description: String = "Perform phases by IrFile", - prerequisite: Set> = emptySet(), - preconditions: Set> = emptySet(), - postconditions: Set> = emptySet(), - stickyPostconditions: Set> = emptySet(), - actions: Set> = setOf(defaultDumper), - lower: CompilerPhase + lower: List> ): NamedCompilerPhase = namedIrModulePhase( - name, description, prerequisite, PerformByIrFilePhase(lower), preconditions, postconditions, stickyPostconditions, actions, - nlevels = 1, + name, description, emptySet(), PerformByIrFilePhase(lower), emptySet(), emptySet(), emptySet(), + setOf(defaultDumper), nlevels = 1, ) private class PerformByIrFilePhase( - private val lower: CompilerPhase + private val lower: List> ) : SameTypeCompilerPhase { override fun invoke( phaseConfig: PhaseConfig, phaserState: PhaserState, context: Context, input: IrModuleFragment ): IrModuleFragment { for (irFile in input.files) { try { - lower.invoke(phaseConfig, phaserState.changeType(), context, irFile) + for (phase in lower) { + phase.invoke(phaseConfig, phaserState.changeType(), context, irFile) + } } catch (e: Throwable) { CodegenUtil.reportBackendException(e, "IR lowering", irFile.fileEntry.name) } @@ -162,7 +159,8 @@ private class PerformByIrFilePhase( return input } - override fun getNamedSubphases(startDepth: Int) = lower.getNamedSubphases(startDepth) + override fun getNamedSubphases(startDepth: Int): List>> = + lower.flatMap { it.getNamedSubphases(startDepth) } } fun makeIrFilePhase( diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt index 32fd2644ce2..d0cf0780e56 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt @@ -270,109 +270,109 @@ private val kotlinNothingValueExceptionPhase = makeIrFilePhase