Skip to content

Commit bc9613f

Browse files
committed
Print optimized IR for wasm targets.
1 parent ca2d23e commit bc9613f

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

ir-printer-compiler/src/main/java/com/bennyhuo/kotlin/ir/printer/compiler/IrPrinterForOptimized.kt

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package com.bennyhuo.kotlin.ir.printer.compiler
44

55
import com.bennyhuo.kotlin.ir.printer.compiler.options.Options
6+
import org.jetbrains.kotlin.backend.common.CommonBackendContext
67
import org.jetbrains.kotlin.backend.common.phaser.Action
78
import org.jetbrains.kotlin.backend.common.phaser.ActionState
89
import org.jetbrains.kotlin.backend.common.phaser.BeforeOrAfter
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
2122
fun registerPrinterForOptimizedIr() {
2223
registerPrinterForJvmTargets()
2324
registerPrinterForNativeTargets()
25+
registerPrinterForWasmTargets()
2426
}
2527

2628
private fun getIrPrinterForJvmTargets(outputDirOptPath: String): Action<IrModuleFragment, JvmBackendContext> =
@@ -34,7 +36,7 @@ private fun registerPrinterForJvmTargets() {
3436
try {
3537
val actionsField = NamedCompilerPhase::class.java.getDeclaredField("actions")
3638
actionsField.isAccessible = true
37-
@Suppress("UNCHECKED_CAST")
39+
@Suppress("UNCHECKED_CAST")
3840
val actions = actionsField.get(jvmLoweringPhases) as MutableSet<Action<IrModuleFragment, JvmBackendContext>>
3941
actionsField.set(jvmLoweringPhases, actions + getIrPrinterForJvmTargets(Options.outputDirOptPath()))
4042

@@ -65,4 +67,28 @@ private fun registerPrinterForNativeTargets() {
6567
} catch (t: Throwable) {
6668
logger.warn("Failed to register the printer of optimized IR for native targets: $t")
6769
}
70+
}
71+
72+
private fun getIrPrinterForWasmTargets(outputDirOptPath: String): Action<IrModuleFragment, CommonBackendContext> =
73+
fun(_: ActionState, data: IrModuleFragment, _: CommonBackendContext) {
74+
printIr(data, outputDirOptPath)
75+
}
76+
77+
private fun registerPrinterForWasmTargets() {
78+
try {
79+
val preactionsField = SimpleNamedCompilerPhase::class.java.getDeclaredField("preactions")
80+
preactionsField.isAccessible = true
81+
@Suppress("UNCHECKED_CAST")
82+
val wasmLoweringPhasesKtClass = Class.forName("org.jetbrains.kotlin.backend.wasm.WasmLoweringPhasesKt")
83+
val validateIrAfterLoweringField = wasmLoweringPhasesKtClass.getDeclaredField("validateIrAfterLowering")
84+
validateIrAfterLoweringField.isAccessible = true
85+
val preactions = preactionsField.get(validateIrAfterLoweringField.get(null)) as MutableSet<Action<IrModuleFragment, CommonBackendContext>>
86+
preactions.add(getIrPrinterForWasmTargets(Options.outputDirOptPath()))
87+
88+
logger.warn("Register the printer of optimized IR for wasm targets.")
89+
} catch (_: NoClassDefFoundError) {
90+
logger.info("The printer of optimized IR for wasm targets is ignored.")
91+
} catch (t: Throwable) {
92+
logger.warn("Failed to register the printer of optimized IR for wasm targets: $t")
93+
}
6894
}

0 commit comments

Comments
 (0)