[Wasm] Disable range checks for arrays. Add cli argument to enable them back.

This commit is contained in:
Igor Laevsky
2022-04-04 16:55:36 +03:00
committed by teamcity
parent 2c9bfe901d
commit 81eae94821
8 changed files with 27 additions and 0 deletions
@@ -156,6 +156,8 @@ class WasmSymbols(
val wasmRefCast = getInternalFunction("wasm_ref_cast")
val rangeCheck = getInternalFunction("rangeCheck")
val boxIntrinsic: IrSimpleFunctionSymbol = getInternalFunction("boxIntrinsic")
val unboxIntrinsic: IrSimpleFunctionSymbol = getInternalFunction("unboxIntrinsic")
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.util.isInterface
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.wasm.ir.*
class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorVoid {
@@ -258,6 +259,13 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV
return
}
// Range check intrinsic is a special case because it doesn't require arguments on the stack.
if (call.symbol == wasmSymbols.rangeCheck &&
backendContext.configuration.getNotNull(JSConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS) == false) {
body.buildGetUnit()
return
}
val function: IrFunction = call.symbol.owner.realOverrideTarget
call.dispatchReceiver?.let { generateExpression(it) }