Commit Graph

321 Commits

Author SHA1 Message Date
23799a2cb6 Collective fix (#4413)
* Fix vector growth check and typos in core (#9)
* Fix resource cleanup in memory and running modes tests (#10)
* Add end of file empty line in wasm_running_modes_test.cc
2025-06-26 10:20:40 +08:00
0343aaf8c3 Modify AOT static PGO to conform to llvm-18 and add a CI job to test static PGO on the coremark benchmark (#4345)
* static PGO compatible with llvm18 and add CI job to test static PGO on coremark benchmark
* update comments and warning info, bitmaps section in llvm profdata shouldn't be used in PGO
2025-06-12 16:57:11 +08:00
c4623e2cb5 Enable aot memory64 sw bounds checks by default (#4350)
- enable aot memory64 sw bounds checks by default
2025-06-12 08:44:45 +08:00
129dc3a30f Add select 128 (#4236)
Add select 128
2025-05-14 12:35:56 +08:00
0a8994a2d5 aot_resolve_object_relocation_group: adapt to LLVM 19 (#4254)
cf.
https://github.com/llvm/llvm-project/pull/95031
https://github.com/llvm/llvm-project/pull/89693
2025-05-08 10:34:04 +08:00
ac2fe552d5 aot_resolve_object_relocation_group: adapt to LLVM 16 (#4250)
cf. https://reviews.llvm.org/D123264
2025-05-07 11:32:14 +08:00
5910e5cd21 Use --target to pass a triple in wamrc (#4199)
Provide a triple string in the format of <arch>-<vendor>-<os>-<abi>
via --target.
2025-05-06 06:56:06 +08:00
3232bdf2f7 teach aot emitter/loader about .srodata and .srodata.cst* sections (#4240)
LLVM 19 and later started to use srodata ("small read only data")
sections for RISCV.  cf. https://github.com/llvm/llvm-project/pull/82214
this commit makes our aot emitter/loader deal with those sections.

an alternative would be to disable small data sections completely by
setting the "SmallDataLimit" module attribute to zero. however, i feel
this commit is more straightforward and consisitent as we are already
dealing with sdata sections.
2025-05-06 06:55:35 +08:00
791e60f533 feat(fuzz): add a new fuzzing target about aot compiler (#4121)
support llvm-jit running mode as another fuzzing target
2025-04-28 21:44:04 +08:00
84767f9121 wamrc: add --disable-llvm-jump-tables option (#4224)
while ideally a user should not need to care this kind of
optimization details, in reality i guess it's sometimes useful.
both of clang and GCC expose a similar option.  (-fno-jump-tables)
2025-04-28 16:43:53 +08:00
6593b3f347 LLVMCreateTargetMachineWithOpts: disable large data (#4220)
for x86-64, llvm 17 and later sometimes uses "l" prefix
for data sections.
cf. 43249378da

because our aot file emitter/loader doesn't support such
sections, it ends up with load-time errors solving symbols like ".lrodata".

this commit fixes it by avoid placing data in the large data sections.

references:
https://groups.google.com/g/x86-64-abi/c/jnQdJeabxiU
1feb00a28c
2025-04-27 11:48:57 +08:00
c2d7fa30df LLVM: don't verify instcombine fixpoint (#4219)
LLVM 18 and later, instcombine perfoms only one iteration.
it performs extra "verify fixpoint" operation when instcombine
is specified in certain ways, including how we do so here.
a problem is that the verification raises a fatal error when it
finds we didn't reach a fixpoint:

    LLVM ERROR: Instruction Combining did not reach a fixpoint
    after 1 iterations

while it should be rare, it's quite normal not to reach a fixpoint.
this commit fixes the issue by simply disabing the verification.

cf. 41895843b5
2025-04-27 11:30:35 +08:00
fc78d67e15 Fix the error of AOT mode on the "i386-windows-msvc" platform (#4183)
* Fix errors on the "i386-windows-msvc" platform
* Refactor symbol name handling for AOT COFF32 binary format
* Fix preprocessor directive placement for Windows compatibility in aot_reloc_x86_32.c

---------

Co-authored-by: liang.he@intel.com <liang.he@intel.com>
2025-04-17 00:04:27 +08:00
8245aefc77 aot: add new u64 intrinsics (#4168) 2025-04-09 15:19:48 +08:00
4e50d2191c Remove indirect-load for constants on Xtensa Target to improve performance (#4162)
* Remove indirect-load for constants on Xtensa Target to improve performance
* Remove const intrinsics flags for xtensa instead of adding too much #ifdef
* Add AOT_INTRINSIC_FLAG_F32_CONST for xtensa frontend, because espressif xtensa llvm backend does not support float-point immediate for now

---------
Co-authored-by: zhanheng1 <Zhanheng.Qin@sony.com>
2025-04-02 14:39:03 +08:00
b8dde7246d dwarf_extractor.cpp: use macro control to be compatible with lower version toolchain (#4169) 2025-04-01 12:05:13 +08:00
412631ac13 fix: correct typos and improve comments across multiple files by codespell (#4116)
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-03-07 08:21:54 +08:00
968b7d4ea0 fix: add dispose of the debug information builder when destroying compilation context (#4105)
Co-authored-by: xiangjia.xj <xiangjia.xj@alibaba-inc.com>
2025-02-26 12:57:46 +08:00
d0e2a7271c fix(aot_emit_aot_file): prevent buffer emission for zero byte_count (#4095)
if using a debug building of wamrc to run spec test. there will be:
core/iwasm/compilation/aot_emit_aot_file.c:1794:13: runtime error: null pointer passed as argument 2, which is declared to never be null
2025-02-21 07:46:20 +08:00
7b724e2382 fix(aot): ensure value_cmp does not exceed br_count in branch table compilation (#4065) 2025-02-06 20:05:33 +08:00
24ecee83ff Merge pull request #3987 from no1wudi/fix
Break aot_create_comp_data into small functions
2024-12-28 20:25:19 +08:00
38cf274292 Optimize memory initialization handling in AOT loader (#3983)
Save memory if the file buffer is always exist before exit.

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2024-12-26 15:15:25 +08:00
9b807660d5 Break aot_create_comp_data into small functions
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2024-12-26 09:32:16 +08:00
9598611e35 CMakeLists.txt: Do not require C++ (#3956)
By default, the project() CMake command defaults to C and C++. [1]
Therefore, CMake might perform tests for both C and C++ compilers as
part of the configuration phase.

However, this has the consequence of the configuration phase to fail if
the system does not have a C++ toolchain installed, even if C++ is not
really used by the top-level project under the default settings.

Some configurations might still require a C++ toolchain, so
enable_language is selectively called under such circumstances.

[1]: https://cmake.org/cmake/help/latest/command/project.html
2024-12-20 13:05:50 +08:00
9563909d6c set alignment 4 when loading multi return value (#3955)
set alignment 4 when loading multi return value for all call opcodes
2024-12-12 20:33:46 +08:00
62aca17279 Check possible integer overflow in aot memory boundary check (#3920)
Check possible integer overflow in aot memory boundary check when
the wasm memory is 64-bit.
2024-11-22 16:01:24 +08:00
f2b87d773e Support external toolchain on Windows for aot compiler (#3911)
allowing custom ARC toolchain on Windows
2024-11-19 17:47:05 +08:00
226bf22f9e GlobalValueSet was moved to IRPartitionLayer recently, but we have a local definition anyway (#3899) 2024-11-13 15:11:33 +08:00
327374cfee Fix some compile warnings and typos (#3854)
- Clear some compile warnings
- Fix some typos
- Fix llvm LICENSE link error
- Remove unused aot file and binarydump bin
- Add checks when loading AOT exports
2024-10-15 16:04:58 +08:00
b038f2721b Merge pull request #3823 from bytecodealliance/dev/shared_heap
Implement the shared heap feature for interpreter, aot and llvm jit.
Add below runtime APIs:
```C
wasm_shared_heap_t
wasm_runtime_create_shared_heap(SharedHeapInitArgs *init_args);

bool
wasm_runtime_attach_shared_heap(wasm_module_inst_t module_inst,
                                wasm_shared_heap_t shared_heap);

void
wasm_runtime_detach_shared_heap(wasm_module_inst_t module_inst);

uint64_t
wasm_runtime_shared_heap_malloc(wasm_module_inst_t module_inst, uint64_t size,
                                void **p_native_addr);

void
wasm_runtime_shared_heap_free(wasm_module_inst_t module_inst, uint64_t ptr);
```

And allow wasm app to call API shared_heap_malloc and shared_heap_free:
```C
void *shared_heap_malloc(uint32_t size);
void shared_heap_free(void *ptr);
```
2024-10-15 14:26:22 +08:00
36d438051e Support table64 extension in classic-interp and AOT running modes (#3811)
Add table64 extension(in Memory64 proposal) support in classic-interp
and AOT running modes, currently still use uint32 to represent table's
initial and maximum size to keep AOT ABI unchanged.
2024-10-11 21:14:56 +08:00
9ba36e284c Implement shared heap for AOT (#3815) 2024-09-29 12:50:59 +08:00
79e695e1a3 Fix a compile warning in aot_emit_function.c (#3793)
This just fixes an unused variable warning when WASM_ENABLE_AOT_STACK_FRAME is != 0.
2024-09-18 09:37:57 +08:00
9c2083a27f Implement option for skipping function index in the callstack (#3785)
Also add a script that converts instruction pointers to function indexes (or function names).

https://github.com/bytecodealliance/wasm-micro-runtime/issues/3758
2024-09-11 16:08:37 +08:00
f453d9d5ce Appease GCC strict prototypes warning (#3775) 2024-09-10 09:42:23 +08:00
cbc2078898 AOT call stack optimizations (#3773)
- Implement TINY / STANDARD frame modes - tiny mode is only able to keep track on the IP
  and func idx, STANDARD mode provides more capabilities (parameters, stack pointer etc.).
- Implement FRAME_PER_FUNCTION / FRAME_PER_CALL modes - frame per function adds
  code at the beginning and at the end of each function for allocating / deallocating stack frame,
  whereas in per-call mode the frame is allocated before each call. The exception is call to
  the imported function, where frame-per-function mode also allocates the stack before the
  `call` instruction (as it can't instrument the imported function).

At the moment TINY + FRAME_PER_FUNCTION is automatically enabled in case GC and perf
profiling are disabled and `values` call stack feature is not requested. In all the other cases
STANDARD + FRAME_PER_CALL is used.

STANDARD + FRAME_PER_FUNCTION and TINY + FRAME_PER_CALL are currently not
implemented but possible, and might be enabled in the future.

ps. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3758
2024-09-10 09:05:23 +08:00
6f97822c18 Add wamrc parameter to configure stack frame features (#3763)
Those parameters can be used to reduce the size of the AOT code.

There's going to be more changes related to AOT code size reduction,
this is just the initial step.

p.s. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3758
2024-09-05 21:44:06 +08:00
b4380fb3b1 refactoring: Re-use commit IP functionality between exception handling and other cases (#3768) 2024-09-05 16:18:47 +08:00
d1141f6f30 aot compiler: Allow to control stack boundary check when boundary check is enabled (#3754)
In the AOT compiler, allow the user to control stack boundary check when the boundary
check is enabled (e.g. `wamrc --bounds-checks=1`). Now the code logic is:

1. When `--stack-bounds-checks` is not set, it will be the same value as `--bounds-checks`.
2. When `--stack-bounds-checks` is set, it will be the option value no matter what the
    status of `--bounds-checks` is.
2024-08-29 11:08:39 +08:00
e8c2952bf9 Fix arm64 issues on mac (#3688)
Make wamrc normalize "arm64" to "aarch64v8". Previously the only way to
make the "arm64" target was to not specify a target on 64 bit arm-based
mac builds. Now arm64 and aarch64v8 are treated as the same.

Make aot_loader accept "aarch64v8" on arm-based apple (as well as
accepting legacy "arm64" based aot targets).

This also removes __APPLE__ and __MACH__ from the block that defaults
size_level to 1 since it doesn't seem to be supported for aarch64:
`LLVM ERROR: Only small, tiny and large code models are allowed on AArch64`
2024-08-23 09:49:06 +08:00
1329e1d3e1 Add support for multi-memory proposal in classic interpreter (#3742)
Implement multi-memory for classic-interpreter. Support core spec (and bulk memory) opcodes now,
and will support atomic opcodes, and add multi-memory export APIs in the future. 

PS: Multi-memory spec test patched a lot for linking test to adapt for multi-module implementation.
2024-08-21 12:22:23 +08:00
581e1d9767 compilation: Use the dedicated stack-sizes section only for AOT (#3732)
For JIT, we naturally use mach-o on macOS, where the section name
we currently use is not valid and ends up with the errors like:

```
LLVM ERROR: Global variable '__orc_lcl.aot_stack_sizes.0' has an invalid section specifier '.aot_stack_sizes': mach-o section specifier requires a segment and section separated by a comma.
```

Because the dedicated section is not necessary for JIT,
this commit simply stops using it.

Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/3730
2024-08-20 10:26:26 +08:00
97c95a2e2f Fix table idx resolving in op call_indirect/return_call_indirect (#3726)
The table index in the call_indirect/return_call_indirect opcode should be
one byte 0x00 when ref-types/GC isn't enabled, and should be treated as
leb u32 when ref-types/GC is enabled.

And make aot compiler bail out if ref-types/GC is disabled by command line
argument while ref-types instructions are used.
2024-08-19 10:57:36 +08:00
4c127715df aot compiler: Fix NaN handling for opcode f32/f64.const in XIP mode (#3721)
If the value of a float constant is an NaN, the aot compiler creates an alloca,
stores the converted i32 const into it and then loads f32 from it again, which
may introduce a relocation in the AOT file and is not allowed for XIP mode.
2024-08-16 14:04:41 +08:00
63df2cf02d Update std atomic check and simd compatibility check for arc compiler (#3716) 2024-08-16 10:12:23 +08:00
b845e2ede4 Add missing headers in bh_atomic.h and aot_llvm_extra.cpp (#3715) 2024-08-16 06:56:49 +08:00
740f499e9c Fix potential memory leak in insert_native_symbol (#3712) 2024-08-14 18:11:18 +08:00
c3dd5598f6 Fix a compilation warning (#3682)
Fix:
```
wamr/core/iwasm/compilation/aot_llvm.c: In function ‘insert_native_symbol’:
wamr/core/iwasm/compilation/aot_llvm.c:3290:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Wsign-compare]
 3290 |     if (ret < 0 || ret + 1 > sizeof(sym->symbol)) {
      |                            ^
```

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2024-08-03 21:05:18 +08:00
2f147fae96 aot compiler: Bail out on too long native symbol names (#3663)
The old code was silently truncating long names.
2024-07-25 11:38:29 +08:00
a055e0b26f aot compiler: Enlarge AOTNativeSymbol->symbol (#3662)
The old value was not enough for wasm_externref_obj_to_internal_obj,
which is 34 characters long.
2024-07-25 11:21:07 +08:00