Add new configuration key that can enable IR inlining for JVM

This commit is contained in:
Ivan Kylchik
2022-12-07 21:35:07 +01:00
committed by Space Team
parent ab2c3572ab
commit 1c210822ea
5 changed files with 22 additions and 0 deletions
@@ -860,6 +860,17 @@ Also sets `-jvm-target` value equal to the selected JDK version"""
field = value
}
@Argument(
value = "-Xir-inliner",
description = "Inline functions using IR inliner instead of bytecode inliner"
)
var enableIrInliner: Boolean = false
set(value) {
checkFrozen()
field = value
}
override fun configureAnalysisFlags(collector: MessageCollector, languageVersion: LanguageVersion): MutableMap<AnalysisFlag<*>, Any> {
val result = super.configureAnalysisFlags(collector, languageVersion)
result[JvmAnalysisFlags.strictMetadataVersionSemantics] = strictMetadataVersionSemantics
@@ -308,6 +308,7 @@ fun CompilerConfiguration.configureAdvancedJvmOptions(arguments: K2JVMCompilerAr
put(JVMConfigurationKeys.IGNORE_CONST_OPTIMIZATION_ERRORS, arguments.ignoreConstOptimizationErrors)
put(JVMConfigurationKeys.NO_NEW_JAVA_ANNOTATION_TARGETS, arguments.noNewJavaAnnotationTargets)
put(JVMConfigurationKeys.OLD_INNER_CLASSES_LOGIC, arguments.oldInnerClassesLogic)
put(JVMConfigurationKeys.ENABLE_IR_INLINER, arguments.enableIrInliner)
val assertionsMode =
JVMAssertionsMode.fromStringOrNull(arguments.assertionsMode)
@@ -168,4 +168,7 @@ public class JVMConfigurationKeys {
public static final CompilerConfigurationKey<Boolean> OLD_INNER_CLASSES_LOGIC =
CompilerConfigurationKey.create("Use old logic for generation of InnerClasses attributes");
public static final CompilerConfigurationKey<Boolean> ENABLE_IR_INLINER =
CompilerConfigurationKey.create("Enable inlining on IR, instead of inlining on bytecode");
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.backend.jvm.ir.constantValue
import org.jetbrains.kotlin.backend.jvm.ir.shouldContainSuspendMarkers
import org.jetbrains.kotlin.backend.jvm.lower.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.ir.IrElement
@@ -293,6 +294,11 @@ internal val functionInliningPhase = makeIrModulePhase<JvmBackendContext>(
return irFunction.symbol
}
}
if (!context.configuration.getBoolean(JVMConfigurationKeys.ENABLE_IR_INLINER)) {
return@makeIrModulePhase FileLoweringPass.Empty
}
FunctionInlining(
context, JvmInlineFunctionResolver(), context.innerClassesSupport,
inlinePureArguments = false,
+1
View File
@@ -30,6 +30,7 @@ where advanced options include:
-Xemit-jvm-type-annotations Emit JVM type annotations in bytecode
-Xdebug Enable debug mode for compilation.
Currently this includes spilling all variables in a suspending context regardless their liveness.
-Xir-inliner Inline functions using IR inliner instead of bytecode inliner
-Xjvm-enable-preview Allow using features from Java language that are in preview phase.
Works as `--enable-preview` in Java. All class files are marked as preview-generated thus it won't be possible to use them in release environment
-Xenhance-type-parameter-types-to-def-not-null