Run inlining phase against whole module
It is wrong to run inlining phase file by file, because other lowerings could modify inline function before it had been inlined.
This commit is contained in:
+14
-3
@@ -21,21 +21,32 @@ import org.jetbrains.kotlin.backend.common.lower.*
|
||||
import org.jetbrains.kotlin.backend.common.validateIrFile
|
||||
import org.jetbrains.kotlin.backend.konan.lower.*
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
|
||||
internal class KonanLower(val context: Context) {
|
||||
|
||||
fun lower() {
|
||||
// Phases to run against whole module.
|
||||
lowerModule(context.irModule!!)
|
||||
|
||||
// Phases to run against a file.
|
||||
context.irModule!!.files.forEach {
|
||||
lower(it)
|
||||
lowerFile(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun lower(irFile: IrFile) {
|
||||
fun lowerModule(irModule: IrModuleFragment) {
|
||||
val phaser = PhaseManager(context)
|
||||
|
||||
// Inlining must be run before other phases.
|
||||
phaser.phase(KonanPhase.LOWER_INLINE) {
|
||||
FunctionInlining(context).inline(irFile)
|
||||
FunctionInlining(context).inline(irModule)
|
||||
}
|
||||
}
|
||||
|
||||
fun lowerFile(irFile: IrFile) {
|
||||
val phaser = PhaseManager(context)
|
||||
|
||||
phaser.phase(KonanPhase.LOWER_STRING_CONCAT) {
|
||||
StringConcatenationLowering(context).lower(irFile)
|
||||
}
|
||||
|
||||
+2
-5
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.builders.Scope
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyIrTree
|
||||
@@ -48,7 +45,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid(
|
||||
//-------------------------------------------------------------------------//
|
||||
private val deserializer = DeserializerDriver(context)
|
||||
|
||||
fun inline(irFile: IrFile) = irFile.accept(this, null)
|
||||
fun inline(irModule: IrModuleFragment) = irModule.accept(this, null)
|
||||
|
||||
//-------------------------------------------------------------------------//
|
||||
|
||||
|
||||
Reference in New Issue
Block a user