JVM: erase conditional suspension markers from inline-only functions
Otherwise, the generated bytecode is unnecessarily suboptimal in some (arguably weird) cases. In the JVM backend, this was an accidental regression in #3260, as I had not noticed that effectively inline-only functions were handled by a separate branch in FunctionCodegen. In JVM_IR, I'm pretty sure the redundant markers have always been there as `isSuspensionPoint` in ExpressionCodegen never checked for effectively-inline-only-ness.
This commit is contained in:
+1
-1
@@ -355,7 +355,7 @@ class ClassCodegen private constructor(
|
||||
|
||||
val (node, smap) = generateMethodNode(method)
|
||||
node.preprocessSuspendMarkers(
|
||||
method.origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE,
|
||||
method.origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE || method.isEffectivelyInlineOnly(),
|
||||
method.origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE_CAPTURES_CROSSINLINE
|
||||
)
|
||||
val mv = with(node) { visitor.newMethod(method.OtherOrigin, access, name, desc, signature, exceptions.toTypedArray()) }
|
||||
|
||||
Reference in New Issue
Block a user