Add new configuration key that can enable IR inlining for JVM
This commit is contained in:
+11
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user