Various WASM AOT changes (#62997)
authorZoltan Varga <vargaz@gmail.com>
Mon, 20 Dec 2021 23:12:38 +0000 (18:12 -0500)
committerGitHub <noreply@github.com>
Mon, 20 Dec 2021 23:12:38 +0000 (18:12 -0500)
commit9ddd58a58d14a7bec5ed6eb777c6703c48aca15d
tree4b4e1c6ee453411dc1448cd36527df6557c27358
parent192db36c1233bee44a2611853d987748ad4c3dd6
Various WASM AOT changes (#62997)

* [mono] Add a mono_dummy_jit_icall_val () icall.

This can be used to trace values from AOT code during runtime
debugging.

* [mono] Avoid adding a try clause to vector alloc wrappers.

Previously, a try-catch clause was added to the vector Alloc
wrappers to convert the OverflowException thrown by the .ovf
opcodes to an OutOfMemoryException. This could cause EH problems on wasm
since on wasm no AOTed code should contain clauses, but this
wrapper was still AOTed for performance reasons.
Instead, add a new CIL opcode to make the .ovf opcodes throw the
OutOfMemoryException directly.

* Disable inline rgctx fetch in mono_decompose_vtype_opts () as well.

It can't handle the new bblocks added by the inline rgctx fetch code.

* [mono] Factor out the slow path of Array.Copy () into a separate method.

The slowpath contained a try-catch clause, preventing Array.Copy () from
being AOTed on WASM.

* [mono] Fix assigning a name to LLVM Alloca instructions.

* Add a V=1 makefile option to wasm/Makefile.

* Add a WasmAotProfilePath build property.
17 files changed:
src/mono/System.Private.CoreLib/src/System/Array.Mono.cs
src/mono/mono/cil/cil-opcodes.xml
src/mono/mono/cil/opcode.def
src/mono/mono/metadata/jit-icall-reg.h
src/mono/mono/metadata/sgen-mono-ilgen.c
src/mono/mono/mini/decompose.c
src/mono/mono/mini/jit-icalls.c
src/mono/mono/mini/jit-icalls.h
src/mono/mono/mini/method-to-ir.c
src/mono/mono/mini/mini-codegen.c
src/mono/mono/mini/mini-llvm-cpp.cpp
src/mono/mono/mini/mini-llvm.c
src/mono/mono/mini/mini-runtime.c
src/mono/mono/mini/mini.h
src/mono/wasm/Makefile
src/mono/wasm/build/WasmApp.Native.targets
src/mono/wasm/build/WasmApp.targets