Commit Graph
100 Commits
Author SHA1 Message Date
Zalim Bashorov 59a9855373 [Wasm] Use Node.js with canary v8 that supports recent Wasm GC changes
It's required to run wasm stdlib tests and compiler box tests with WASI.

#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov 8a6fdf2493 [Wasm] Change expected outcome to SUCCESS in wasm-wasi-test
Added workaround for missing dependency.

#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov c915cc54c7 [Wasm] Use Node.js with "canary" v8 in gradle mpp tests
It's required due to switching to the latest wasm opcodes.

#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov 86e854a980 Revert "[Wasm] Don't use the new br_on_cast* instructions since they are not supported in Node.js yet"
This reverts commit 2d728727

#KT-60828 Fixed
2023-09-19 09:23:26 +00:00
Zalim Bashorov eecfc2c6d3 [Wasm] Simplify a message printed in case of WebAssembly.CompileError
#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov 44f9199f66 [Wasm] Update Binaryen to 116
#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov 48d4bb5261 [Wasm] Temporarily disable running tests on SpiderMonkey
#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov c71a341a53 [Wasm] Remove no longer needed options for V8
#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov 874ca6a1af [Wasm] Update v8 to 11.9.85
#KT-59720
2023-09-19 09:23:26 +00:00
Zalim Bashorov 9ec6fea9d5 [Wasm] Update Wasm GC to final codes 🎉
#KT-59720 Fixed
2023-09-19 09:23:26 +00:00
Zalim Bashorov fe0629ff8a Regenerate tests 2023-08-02 00:03:49 +02:00
Zalim Bashorov d2f537ede5 [JVM] Mute nestedCallsWithGenericToInt for IR inliner tests 2023-08-01 23:48:24 +02:00
Zalim Bashorov 8452e4732e [Wasm] Unmute typedDelegation test 2023-08-01 23:48:24 +02:00
Zalim Bashorov cac5342add Generate tests 2023-08-01 23:48:24 +02:00
Zalim Bashorov acc3dc0daa [Wasm] Take into account nullability for primitives while recovering a stack type
#KT-60496 Fixed
2023-08-01 23:48:24 +02:00
Zalim Bashorov 141645c5d7 [Wasm] Generate proper code in stack type recovering:
* When the actual type is some nullable type but nullable `Nothing` is expected.
* Respect nullability when casting reference types.

#KT-60113 Fixed
2023-08-01 23:48:23 +02:00
Zalim Bashorov 1946476e58 [Wasm] Generate comments for inlined calls 2023-08-01 23:48:23 +02:00
Zalim Bashorov 2d728727da [Wasm] Don't use the new br_on_cast* instructions since they are not supported in Node.js yet
#KT-60835 Fixed
2023-08-01 08:46:59 +00:00
Zalim Bashorov c136d0fb5b Revert "[Wasm] Use Node.js with "canary" v8 (11.7.310.0) in tests"
This reverts commit 0bdee00ca2.

#KT-60835
2023-08-01 08:46:59 +00:00
Zalim Bashorov 0bdee00ca2 [Wasm] Use Node.js with "canary" v8 (11.7.310.0) in tests
There are no other non-canary Node.js versions using fresh enough v8.
2023-07-28 16:16:34 +00:00
Zalim Bashorov cead5c8aae [Wasm] Update Binaryen to 114
This version supports new br_on_cast* instructions.

Also, stop passing to binaryen no longer supported option.
2023-07-28 16:16:34 +00:00
Zalim Bashorov a1115236f9 [Wasm] Disable deprecated instructions while running tests in V8
To make sure that our implementation is up-to-date with the spec.
2023-07-28 16:16:34 +00:00
Zalim Bashorov 4572680877 [Wasm] Migrate to the latest br_on_cast* instructions
#KT-59722 Fixed
2023-07-28 16:16:33 +00:00
Zalim Bashorov 9254f70c2a [Wasm] Update SpiderMonkey to 2023-07-24-09-16-21 2023-07-28 16:16:33 +00:00
Zalim Bashorov d6ba233bbe Define fail in the test to pass on JVM and Native 2023-07-21 17:27:17 +00:00
Zalim Bashorov b1a4d354f1 Regenerate tests 2023-07-21 17:27:17 +00:00
Zalim Bashorov 5d1379ead1 [Wasm] Optimize when using br_table only if all conditions read and compare the same variable
#KT-60212 Fixed
2023-07-21 17:27:16 +00:00
Zalim Bashorov 8a645e9c0a [Wasm] Don't print recursion group in wat when it's empty 2023-07-20 11:49:28 +00:00
Zalim Bashorov 590400071b [Wasm] Define canonical representation for NaNs explicitly instead of depending on Kotlin's one
Surprisingly with `Float.NaN.toRawBits()` you can observe different values,
which can lead to different wat files for the same input.
2023-07-20 11:49:28 +00:00
Zalim Bashorov 151f5b90c7 [Wasm] Wrap a recursion group by a "rec" block in wat 2023-07-20 11:49:28 +00:00
Zalim Bashorov 8a9531ce3c [Wasm] Don't print "field" for array types in wat 2023-07-20 11:49:28 +00:00
Zalim Bashorov 8d440a61e2 [Wasm] Make types for none and noextern consistent with the spec 2023-07-20 11:49:28 +00:00
Zalim Bashorov 2d13cbae80 [Wasm] make adding sections a bit more typesafe and extract possible values to WasmBinary 2023-07-20 11:49:28 +00:00
Zalim Bashorov a819a734b8 [Wasm] extract some "mages numbers" to simplify their update and improve readability
In preparation for KT-59720
2023-07-20 11:49:28 +00:00
Zalim Bashorov 0945968751 [Wasm] Update expected size in test data 2023-07-17 23:57:35 +02:00
Zalim Bashorov b34d291f85 [Wasm] Turn on final types in V8 for the box tests 2023-07-17 23:57:35 +02:00
Zalim Bashorov 1cf3841588 [Wasm] Always use -0x30/sub when defining a struct type
Otherwise, according to the spec, a type will be treated as a final,
which is not correct in many cases.
Later, we can generate final struct types when it's applicable.

#KT-60200 Fixed
2023-07-17 23:57:34 +02:00
Zalim Bashorov 5db493a475 [Wasm, JS] Update v8 to 11.7.186 2023-07-17 23:57:34 +02:00
Zalim Bashorov b744f2ef82 [Wasm] Stop using "--type-ssa" since without "--type-merging" it increases output size
"--type-merging" was disabled before because it requires "--close-world"
which we can't use in general (specifically in Compose applications).
2023-07-17 23:57:34 +02:00
Zalim Bashorov 4e36f5b391 [Wasm, JS] Add a warning that dumping reachability and size infos to file is supported only for Kotlin/Wasm 2023-04-25 19:44:03 +02:00
Zalim Bashorov 0a1116376c [CLI, JS, Wasm] Regenerate K2JSCompilerArgumentsCopyGenerated.kt 2023-04-25 19:44:03 +02:00
Zalim Bashorov ef28bf27ae [CLI tests] Update testdata 2023-04-25 19:44:03 +02:00
Zalim Bashorov bd852e87ab [Wasm] Add an option to dump declaration IR sizes to file 2023-04-25 19:44:03 +02:00
Zalim Bashorov 3c343e3074 [Wasm, JS] Minor: make description non-nullable 2023-04-25 19:44:02 +02:00
Zalim Bashorov 62b21ac078 [Wasm] Add an option to dump reachability info to file 2023-04-25 19:44:02 +02:00
Zalim Bashorov a9683bd4a8 Wasm: temporary force keeping Unit_getInstance in DCE 2023-04-22 17:41:23 +00:00
Zalim Bashorov 77491ded1b Use Array constructor with size to create Array of nulls
Change the constructor visibility from public to private as it should be.
2023-04-22 17:41:23 +00:00
Zalim Bashorov 4f76827ea9 [Wasm] Tune Binaryen options and add some notes about 112 2023-04-18 20:40:17 +02:00
Zalim Bashorov 34f8851ac1 [psi2ir] Ignore private members when creating fake overrides from descriptors
The behavior is unified with the IR deserializer.
See `isOverridableMemberOrAccessor` in IrOverridingUtil.kt

Without this change, if we add a private member to the Any in wasm stdlib,
the compiler starts crashing with a linker error.

It's hard to write a relevant, self-contained box test for that since it requires
adding a private member to Any and affects **only** "virtual" FunctionN interfaces.
2023-04-18 18:44:47 +02:00
Zalim Bashorov 521a272acb [Wasm] Pass js stack value directly when replacing a wasm exception with JS one
In this case, we don't need to convert a value to and from wasm String.
2023-04-17 16:15:22 +00:00
Zalim Bashorov 6bfd1e7e9f [Wasm] Stop using unsigned numbers in ScopedMemoryAllocator
It turned out that using unsigned numbers is heavy both in terms of size and performance.
We can consider switching back (KT-58041) as soon as we implement unsigned numbers and operations using wasm built-in capabilities (KT-58039).
2023-04-17 16:15:22 +00:00
Zalim Bashorov c114afb55d [Wasm] export __callFunction_* only when a respective closure/lambda converter is used 2023-04-17 16:15:21 +00:00
Zalim Bashorov 1e6626338d [CODEOWNERS] Changes in wasm output size tests must be shown to Zalim.Bashorov 2023-04-06 10:14:06 +00:00
Zalim Bashorov 155eb9b77a [Wasm, stdlib] extract Any::identityHashCode to workaround the bug in FunctionDescriptorFactory
A fix is on its way -- KT-MR-9426.
2023-04-05 20:50:53 +02:00
Zalim Bashorov 46459dfa60 [Wasm] Minor: update expected size after rebase 2023-04-05 20:50:52 +02:00
Zalim Bashorov 2e4a09f841 [Wasm] Replace takeIf with ifEmpty in TeamcityAdapter 2023-04-05 20:50:52 +02:00
Zalim Bashorov 9760e3ee1e [Wasm] Introduce check and error specialized for String to reduce output size 2023-04-05 20:50:52 +02:00
Zalim Bashorov 295acdf2af [Wasm] Rewrite lazy initialization without by lazy and lateinit to reduce overhead 2023-04-05 20:50:52 +02:00
Zalim Bashorov 1a8a4fa65d [Wasm] Don't use by lazy inside Throwable 2023-04-05 20:50:52 +02:00
Zalim Bashorov 67357fa5d4 [Wasm] Replace heavyweight stackTraceToString with "pure" JS stack 2023-04-05 20:50:52 +02:00
Zalim Bashorov 14af47bbd9 [Wasm] Introduce utilities to get package and name of class directly from metadata and use it in some places 2023-04-05 20:50:52 +02:00
Zalim Bashorov f206b0b72d [Wasm] TeamcityAdapter: rewrite lazy property initialization using lateinit 2023-04-05 20:50:52 +02:00
Zalim Bashorov a9b553f16e [Wasm] Don't use by lazy to keep some JS values used by adapters 2023-04-05 20:50:52 +02:00
Zalim Bashorov 494403c4bb [Wasm] Don't use by lazy inside TeamcityAdapter 2023-04-05 20:50:52 +02:00
Zalim Bashorov 2ef47901d0 [Wasm] Introducing private identityHashCode shared between Any's hashCode and toString
It splits the dependency of toString from hashCode that prevents keeping hashCode when toString is used.
2023-04-05 20:50:51 +02:00
Zalim Bashorov 6e3eef7a88 [Wasm] add simple tests to track the size of wasm and mjs files 2023-04-05 20:50:51 +02:00
Zalim Bashorov 1697a28bf0 [Wasm] introduce a directive to check output size in some wasm tests
Syntax:
// WASM_DCE_EXPECTED_OUTPUT_SIZE: <file extension> <expected size in bytes>

Example:
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 10_000
2023-04-05 20:46:13 +02:00
Zalim Bashorov 4d7cf81ed0 [Wasm] Stop supporting "_export.js" in test infra, use import/export capability in relevant tests
* It works slightly differently in SpiderMonkey.
* It was a hack.
2023-03-06 23:19:02 +01:00
Zalim Bashorov bec827b654 [Wasm] Update SpiderMonkey to 112.0a1 (2023-03-04-09-52-24) 2023-03-06 23:19:02 +01:00
Zalim Bashorov f3e022e4ca [Wasm] Print an instruction if CompileError was thrown while instantiating a module
#KT-56160 Fixed
2023-02-03 14:06:32 +01:00
Zalim Bashorov 95a1218996 [CODEOWNERS] Change owner of wasm intrinsics to "Kotlin Wasm"
And make "Kotlin Wasm" co-owner of /js/js.translator/testData/
2023-02-01 00:36:11 +01:00
Zalim Bashorov 58e523b890 [Wasm] Change target directory for wasm intrinsics for finer tuning code owners
Also, minor cleanup in the generator.
2023-02-01 00:35:49 +01:00
Zalim Bashorov 6a73650b35 [Wasm] SpiderMonkey.kt -> WasmVM.kt 2023-01-27 17:57:50 +01:00
Zalim Bashorov b02279de14 [Wasm] Run wasm test using all available VMs: V8 & SpiderMonkey for now
Also, add a new directive, `WASM_FAILS_IN`, to specify VMs where a test is expected to fail for now.

#KT-56166 Fixed
2023-01-27 17:57:50 +01:00
Zalim Bashorov 885381dd63 [Wasm] Change externRefToAny to make it compatible with SpiderMonkey and V8
It's hard to achieve that without implementing part of `externRefToAny` using an intrinsic. It should be rewritten when all VMs and tools update to the latest spec.

Also, stop using (deprecated) instructions unsupported by SpiderMonkey.

#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov d1855371a0 [Wasm] Don't wrap single null expression into composite in WasmNullCoercingLowering
Otherwise, it breaks check/assert inside DeclarationGenerator::visitField (DeclarationGenerator.kt:458)

#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov ca79711610 [Wasm] Generate .mjs compatible with other standalone js & wasm VMs: SpiderMonkey and JavaScriptCore in addition to V8
#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov 802a8ec326 [Wasm] Update SpiderMonkey version
#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov 1d793f7bec [Wasm] Revert a7ed496a and few fixes to make Kotlin/Wasm compatible with Firefox
Revert changes as soon as the bug is fixed https://bugzilla.mozilla.org/show_bug.cgi?id=1811932

a7ed496a "[WASM] Use wasm bottom types for Nothing?"

#KT-56166 In-Progress
2023-01-27 17:57:49 +01:00
Zalim Bashorov 2573201a87 [Wasm] provide "location" for pseudo-instructions using to add comments 2023-01-17 19:37:06 +01:00
Zalim Bashorov ab1cbc49dd [Wasm] Minor: move buildUnreachable* helpers to more specific module 2023-01-17 19:37:05 +01:00
Zalim Bashorov 9e4b2b78e6 [Wasm] Remove unnecessary location from WasmDataMode constructor 2023-01-17 19:37:05 +01:00
Zalim Bashorov 2fa2725012 [Wasm] Add a comment about location into WasmExpressionBuilder 2023-01-17 19:37:05 +01:00
Zalim Bashorov 37879e18d9 [Wasm] Pass location instead of fileEntry to generateConstExpression 2023-01-17 19:37:05 +01:00
Zalim Bashorov aa8a0fd7d7 [Wasm] Remove LocationHolder and helper functions
It turned out that dedicated scoping function for locations are not so useful.
Now, if you want to scope a location use functions from stdlib, like `let`.
2023-01-17 19:37:05 +01:00
Zalim Bashorov e62add937b [Wasm] Remove SourceLocation.TBDLocation and related things 2023-01-17 19:37:05 +01:00
Zalim Bashorov 0d203d190e [Wasm] Remove buildInstr without location and fix usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 42f2edd282 [Wasm] Require location for buildThrow and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 1244cd1259 [Wasm] Require location for buildBr* and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 95c84d5d3f [Wasm] Require location for buildDrop and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 6eba0392db [Wasm] Require location for buildRefNull and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 12854af0a2 [Wasm] Require location for buildRefTestStatic and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 7bd92bc412 [Wasm] Require location for buildRefCastNullStatic and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov 158a307334 [Wasm] Require location for buildStructSet and fix all usages 2023-01-17 19:37:05 +01:00
Zalim Bashorov e7dc443c18 [Wasm] Require location for buildStructGet and fix all usages 2023-01-17 19:37:04 +01:00
Zalim Bashorov 530438dfcb [Wasm] Require location for buildStructNew and fix all usages 2023-01-17 19:37:04 +01:00
Zalim Bashorov 3967bd2755 [Wasm] Require location for buildSetGlobal and fix all usages 2023-01-17 19:37:04 +01:00
Zalim Bashorov 65e1b53027 [Wasm] Require location for buildGetGlobal and fix all usages 2023-01-17 19:37:04 +01:00
Zalim Bashorov 00d0c38fc3 [Wasm] Require location for buildSetLocal and fix all usages 2023-01-17 19:37:04 +01:00
Zalim Bashorov 0b59ef58dc [Wasm] Require location for buildGetLocal and fix all usages 2023-01-17 19:37:04 +01:00