[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:
+19
-4
@@ -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(
|
||||
|
||||
+2
@@ -217,9 +217,11 @@ internal val allLoweringsPhase = NamedCompilerPhase(
|
||||
delegationPhase,
|
||||
functionReferencePhase,
|
||||
singleAbstractMethodPhase,
|
||||
enumWhenPhase,
|
||||
builtinOperatorPhase,
|
||||
finallyBlocksPhase,
|
||||
enumClassPhase,
|
||||
enumUsagePhase,
|
||||
interopPhase,
|
||||
varargPhase,
|
||||
compileTimeEvaluatePhase,
|
||||
|
||||
-8
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user