[K/N] Fix order of lowerings to enable when on enum optimisation

EnumWhenLowering searches for pattern, which is destroyed by
BuiltinOperatorLowering, so first one should happen before second.
This commit is contained in:
Pavel Kunyavskiy
2021-05-18 14:22:16 +03:00
committed by Space
parent 43b91589a1
commit 2680111125
3 changed files with 21 additions and 12 deletions
@@ -288,13 +288,28 @@ internal val functionReferencePhase = makeKonanFileLoweringPhase(
prerequisite = setOf(delegationPhase, localFunctionsPhase) // TODO: make weak dependency on `testProcessorPhase`
)
internal val enumClassPhase = makeKonanFileOpPhase(
{ context, irFile -> EnumClassLowering(context).run(irFile) },
internal val enumWhenPhase = makeKonanFileLoweringPhase(
::NativeEnumWhenLowering,
name = "EnumWhen",
description = "Enum when lowering",
prerequisite = setOf(enumConstructorsPhase, functionReferencePhase)
)
internal val enumClassPhase = makeKonanFileLoweringPhase(
::EnumClassLowering,
name = "Enums",
description = "Enum classes lowering",
prerequisite = setOf(enumConstructorsPhase, functionReferencePhase) // TODO: make weak dependency on `testProcessorPhase`
prerequisite = setOf(enumConstructorsPhase, functionReferencePhase, enumWhenPhase) // TODO: make weak dependency on `testProcessorPhase`
)
internal val enumUsagePhase = makeKonanFileLoweringPhase(
::EnumUsageLowering,
name = "EnumUsage",
description = "Enum usage lowering",
prerequisite = setOf(enumConstructorsPhase, functionReferencePhase, enumClassPhase)
)
internal val singleAbstractMethodPhase = makeKonanFileLoweringPhase(
::NativeSingleAbstractMethodLowering,
name = "SingleAbstractMethod",
@@ -306,7 +321,7 @@ internal val builtinOperatorPhase = makeKonanFileLoweringPhase(
::BuiltinOperatorLowering,
name = "BuiltinOperators",
description = "BuiltIn operators lowering",
prerequisite = setOf(defaultParameterExtentPhase, singleAbstractMethodPhase)
prerequisite = setOf(defaultParameterExtentPhase, singleAbstractMethodPhase, enumWhenPhase)
)
internal val interopPhase = makeKonanFileLoweringPhase(
@@ -217,9 +217,11 @@ internal val allLoweringsPhase = NamedCompilerPhase(
delegationPhase,
functionReferencePhase,
singleAbstractMethodPhase,
enumWhenPhase,
builtinOperatorPhase,
finallyBlocksPhase,
enumClassPhase,
enumUsagePhase,
interopPhase,
varargPhase,
compileTimeEvaluatePhase,
@@ -120,14 +120,6 @@ internal class EnumUsageLowering(val context: Context)
internal class EnumClassLowering(val context: Context) : FileLoweringPass {
fun run(irFile: IrFile) {
// EnumWhenLowering should be performed before EnumUsageLowering because
// the latter performs lowering of IrGetEnumValue
NativeEnumWhenLowering(context).lower(irFile)
lower(irFile)
EnumUsageLowering(context).lower(irFile)
}
override fun lower(irFile: IrFile) {
irFile.transformChildrenVoid(object : IrElementTransformerVoid() {
override fun visitClass(declaration: IrClass): IrStatement {