[WASM] Remove unreachable code from compiled wasm
This commit is contained in:
+4
-1
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.backend.wasm.ir2wasm
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder
|
||||
import org.jetbrains.kotlin.wasm.ir.WasmInstr
|
||||
import org.jetbrains.kotlin.wasm.ir.WasmLocal
|
||||
|
||||
enum class LoopLabelType { BREAK, CONTINUE }
|
||||
@@ -23,6 +23,9 @@ interface WasmFunctionCodegenContext : WasmBaseCodegenContext {
|
||||
fun referenceLocal(index: Int): WasmLocal
|
||||
fun referenceLocal(type: SyntheticLocalType): WasmLocal
|
||||
|
||||
fun defineNonLocalReturnLevel(block: IrReturnableBlockSymbol, level: Int)
|
||||
fun referenceNonLocalReturnLevel(block: IrReturnableBlockSymbol): Int
|
||||
|
||||
fun defineLoopLevel(irLoop: IrLoop, labelType: LoopLabelType, level: Int)
|
||||
fun referenceLoopLevel(irLoop: IrLoop, labelType: LoopLabelType): Int
|
||||
|
||||
|
||||
+10
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.wasm.WasmBackendContext
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.wasm.ir.*
|
||||
@@ -29,6 +30,7 @@ class WasmFunctionCodegenContextImpl(
|
||||
private val wasmLocals = LinkedHashMap<IrValueSymbol, WasmLocal>()
|
||||
private val wasmSyntheticLocals = LinkedHashMap<SyntheticLocalType, WasmLocal>()
|
||||
private val loopLevels = LinkedHashMap<Pair<IrLoop, LoopLabelType>, Int>()
|
||||
private val nonLocalReturnLevels = LinkedHashMap<IrReturnableBlockSymbol, Int>()
|
||||
|
||||
override fun defineLocal(irValueDeclaration: IrValueSymbol) {
|
||||
assert(irValueDeclaration !in wasmLocals) { "Redefinition of local" }
|
||||
@@ -70,6 +72,14 @@ class WasmFunctionCodegenContextImpl(
|
||||
}
|
||||
}
|
||||
|
||||
override fun defineNonLocalReturnLevel(block: IrReturnableBlockSymbol, level: Int) {
|
||||
nonLocalReturnLevels[block] = level
|
||||
}
|
||||
|
||||
override fun referenceNonLocalReturnLevel(block: IrReturnableBlockSymbol): Int {
|
||||
return nonLocalReturnLevels.getValue(block)
|
||||
}
|
||||
|
||||
override fun defineLoopLevel(irLoop: IrLoop, labelType: LoopLabelType, level: Int) {
|
||||
val loopKey = Pair(irLoop, labelType)
|
||||
assert(loopKey !in loopLevels) { "Redefinition of loop" }
|
||||
|
||||
Reference in New Issue
Block a user