summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fuzzer: Tweak constants during mutation as well (#3272)Alon Zakai2020-10-212-58/+72
| | | | Move the tweak function to an outer location, and call it from mutate() with some probability.
* Fuzzer: run emcc with memory growth enabled, to allow larger things to run ↵Alon Zakai2020-10-211-1/+5
| | | | (#3269)
* Remove old/non-working SpillPointers pass (#3261)Sam Clegg2020-10-209-2017/+4
| | | | | | | | | And associated stack.h. The current stack.h clearly doesn't work with the llvm back as it assumes the stack grows up, which means non of these has been working or used in a long time. Rather than trying to fix this unused features its probably cleaner to just remove it for now and restore it rom git history if its someone that anyone actually wants to use in the future.
* Remove remnants of spec interpreter, and excess mozjs warning (#3262)Alon Zakai2020-10-202-23/+0
| | | | | The spec interpreter is no longer used at all. Mozjs is still used optionally, but while it was crucial in the past for test coverage, it is entirely optional now and not run by default, so no need to warn.
* Optimize signed division when RHS is signed minimum (#3221)Max Graey2020-10-203-3/+58
|
* Avoid name collisions in MemoryPacking (#3265)Alon Zakai2020-10-203-38/+64
| | | | | | | | | Such a collision can happen if we run the pass twice, and somehow it finds more to optimize. To make this easy, add a general utility for getting a unique name based on a root + a numeric suffix to avoid collisions. Fixes the second testcase in #3225
* Warn on memory segment overlaps (#3257)Alon Zakai2020-10-201-0/+2
| | | | | We may fix this eventually, but it appears to not be urgent. For now at least show a warning so toolchains have a chance to see there is something they should fix.
* Remove legacy asm.js tests (#3260)Sam Clegg2020-10-1922-13886/+0
| | | I don't think these files have been referenced since #3042 landed.
* wasm-reduce: When trying to remove a function, try to replace ref.func ↵Alon Zakai2020-10-191-0/+5
| | | | usages too (#3254)
* Fix validateGlobally usage in validator, and an i64-to-i32 bug hidden by it ↵Alon Zakai2020-10-194-7/+42
| | | | | | | | | | | | | | (#3253) validateGlobally means that we can't do lookups on the module. A few places were missing that, or had it wrong. I think the reason for the wrong usages is that we used to have types on the module, and then removed that, so more is now validatable actually. This uncovered a real bug, where i64-to-32 would ignore an unreachable parameter of a call_indirect. That's bad, since if the type is i64, we need to replace it with two parameters. To fix that, just handle unreachability there, using the existing logic (which skips the call_indirect entirely in this case).
* Remove process_optimize_instructions.py which is no longer needed after ↵Max Graey2020-10-191-16/+0
| | | | #3200 (#3258)
* Inlining fuzz fix: Notice ref.func function references in global inits (#3252)Alon Zakai2020-10-193-1/+30
| | | Such a reference may mean we cannot remove a function after inlining it.
* Optimize comparisons with 0/1 in boolean context (#3240)Max Graey2020-10-185-26/+73
| | | | | | | | | | i32(bool(x)) != 0 ==> i32(bool(x)) i64(bool(x)) & 1 ==> i64(bool(x)) Also: * clean up related matching rules in optimizeWithConstantOnRight * add more explanations about isPowerOf2Float & rename to isPowerOfTwoInvertibleFloat
* Only ignore the root `config.h` file (#3256)Blaine Bublitz2020-10-181-1/+1
|
* Remove now-redundant stack pointer manipulation passes (#3251)Sam Clegg2020-10-1815-167/+14
| | | | The use of these passes was removed on the emscripten side in https://github.com/emscripten-core/emscripten/pull/12536.
* Add unmodifiedImportedMemory pass option (#3246)Alon Zakai2020-10-162-1/+17
| | | | | | | | | When set, we can assume an imported memory was not modified before us. That lets us assume it is all zeros and so we can optimize out zeros from memory segments. This does not actually do anything with the flag, just adds it. This is to avoid a rolling problem. Next emscripten can emit it without erroring, and then we can start to use it.
* finalize: remove legacy support for "table" import (#3249)Sam Clegg2020-10-166-12/+5
| | | | | These days we always export the table, except in the case of dynamic linking, and even then we use the name `__indirect_function_table`.
* finalize: add --mutable-sp flag (#3250)Sam Clegg2020-10-151-3/+13
| | | | | | | This flag disables the features of `wasm-emscripten-finalize` the replace the mutable global import of `__stack_pointer`. See the corresponding emscripten change that depends on this one: https://github.com/emscripten-core/emscripten/pull/12536
* finalize: move more functionality behind legacyPIC (#3248)Sam Clegg2020-10-151-9/+11
| | | | | | | Internalizing of the stack pointer is only needed in legacy PIC mode, since in the new PIC mode we support mutable globals. Also the additional ASSIGN_GOT_ENTRIES function only exists in support of the legacy mode.
* Only write explicit names to name section (#3241)Sam Clegg2020-10-156-30/+42
| | | | Fixes: #3226
* Fuzz fix for MemoryPacking on trampled data (#3222)Alon Zakai2020-10-156-6/+339
| | | | | | | | | | | | | I believe originally wasm did not allow overlapping segments, that is, where one memory segment tramples the data from a previous one. But then the spec changed its mind and we allowed it. Binaryen seems to have assumed the original case, and not checked for trampling. If there is a chance of trampling, we cannot optimize out zeros - the zero may have an effect if it tramples data from a previous segment. This does not occur in practice in LLVM output, which is why this wasn't a problem so far, I think. An existing testcase hit this issue, so I split it up.
* Log nested pass names in BINARYEN_PASS_DEBUG=2 (#3214)Alon Zakai2020-10-152-12/+20
| | | | We can't validate or print out the wasm in that case, but at least logging the names as they run can help debug some situations.
* Assign import names consistently between text and binaryn reader (#3238)Sam Clegg2020-10-1421-57/+66
| | | | | | | | | The s-parser was assigning numbers names per-type where as the binaryn reader was using the global import count as the number to append. This change switches to use per-element count which I think it preferable as it increases the stability of the auto-generated names. e.g. memory is now always named `$mimport0`.
* [MemoryPacking] Emit the correct segment indices on memory.init (#3239)Thomas Lively2020-10-143-2/+44
| | | | | | | | | | | This PR fixes a bug in which the segment index of a memory.init instruction was incorrect in some circumstances. Specifically, the first segment index used in output memory.init instructions was always the index of the first segment created from splitting up the corresponding input segment. This was incorrect when the input memory.init had an offset that caused it to skip over that first emitted segment so that the first output memory.init should have referred to a subsequent output segment. Fixes #3225.
* Improve partial evaluation (#3236)Max Graey2020-10-143-2/+87
|
* PickLoadSigns fuzz fix: cannot make an atomic operation signed (#3235)Alon Zakai2020-10-133-0/+51
|
* Optimize power of two float divisions (#3018)Max Graey2020-10-137-12/+368
|
* EmscriptenPIC: Remove internalization of GOT entries (#3211)Sam Clegg2020-10-139-266/+42
| | | | | | | wasm-ld now does this better than binaryen and does it by default when linking and executable and optionally with `-Bsymbolic` when linking a shared library. See https://reviews.llvm.org/D89152
* Added Initial Memory64Lowering pass (#3230)Wouter van Oortmerssen2020-10-136-0/+290
| | | | This pass will convert a module with 64-bit loads and stores accessing a 64-bit memory to a regular 32-bit one. Pointers remain 64-bit but are truncated just before use.
* Fix Wasm capitalization in binaryen-c.h comments (#3233)Max Desiatov2020-10-131-2/+2
| | | According to the WebAssembly spec, Wasm is an abbreviation, not an acronym.
* Release 98 (#3234)Sam Clegg2020-10-132-1/+6
|
* Optimize unsigned divisions when rhs is negative constant (#2991)Max Graey2020-10-133-9/+98
| | | | | | | | `(uint32_t)x / C` --> `x >= C`, where `C > 2^31` `(uint32_t)x / -1` --> `x != -1` and for `shrinkLevel == 0`: `(uint64_t)x / C` --> `uint64_t(x >= C)`, where `C > 2^63` `(uint64_t)x / -1` --> `x != -1`
* Update tests after landing PRs collided (#3232)Alon Zakai2020-10-131-195/+151
|
* Interpreter: Add a limit to how much we try to grow memory, to avoid DOS (#3227)Alon Zakai2020-10-123-5/+16
| | | | | growMemory() now also returns whether we succeeded. Without this it could eventually start to swap etc., which is annoying.
* Fuzzer: Do not emit random global.get/sets of the hang limit global (#3229)Alon Zakai2020-10-123-126/+555
| | | | | | | | | That global is for internal use. If we emit random sets to it, we could prevent it from doing its job of preventing an infinite loop (normally it decreases each time a loop runs or we recurse, until we reach 0 - if we set it to a nonzero value in that code, that would be bad). Random gets are less of a problem, but may be confusing when debugging a testcase.
* Slightly improve validator error text on segments (#3215)Alon Zakai2020-10-121-2/+2
| | | Mentioning if it's a memory or a table segment is convenient.
* Memory64 fuzzing preparations (#3223)Alon Zakai2020-10-121-7/+13
|
* Rename Emscripten EHSjLj functions in wasm backend (#3191)Heejin Ahn2020-10-106-174/+3
| | | | | | | | | | | Now that we are renaming invoke wrappers and `emscripten_longjmp_jmpbuf` in the wasm backend, this deletes all related renaming routines and relevant tests. Depends on #3192. Addresses: #3043 and #3081 Companions: https://reviews.llvm.org/D88697 emscripten-core/emscripten#12399
* RemoveUnusedBrs fuzz fix for switches with a single target and with a value ↵Alon Zakai2020-10-093-5/+56
| | | | | | (#3220) We turn a br_table with a single target into a br, but we reverse the order of the condition and the value when doing so, which we forgot to take into account.
* Asyncify fuzzing harness fix for growth (#3205)Alon Zakai2020-10-091-2/+9
| | | | | Fuzzing Asyncify on data with a memory growth showed that the harness did not handle a growth. When growth happens we must recreate the view. For simplicity, always refresh, in a location that dominates all the uses.
* Refactor naming convention for functions handling tuples (#3196)Max Graey2020-10-0918-43/+73
| | | When there are two versions of a function, one handling tuples and the other handling non-tuple values, the previous naming convention was to have "Single" in the name of the non-tuple handling function. This PR simplifies the convention and shortens function names by making the names plural for the tuple-handling version and singular for the non-tuple-handling version.
* Add an optimizer overview to the readme (#3210)Alon Zakai2020-10-091-10/+102
|
* Re-generate lld test inputs (#3212)Sam Clegg2020-10-094-42/+36
| | | | | | Generated by running: ./scripts/test/generate_lld_tests.py ./auto_update_tests.py
* Fix split_wast on asserts before the first module (#3206)Alon Zakai2020-10-091-0/+6
| | | | | | | | Normally a wast file has a module and then asserts on it, but some tests have just asserts without a module. In that case, set the module to None. (This can happen if the asserts do not refer to a module, and are at the top of the wast file.)
* Add a little code to prepare exception handling support in fuzzer (#3207)Alon Zakai2020-10-091-4/+6
| | | | | | | fixLabels() in the fuzzer looks for invalid labels and fixes them up, after doing some random changes to existing wasm (which checks for types while doing so, but it may invalidate labels if we remove the target of a branch, for example). This adds trivial support for BrOnExn and Try there.
* Optimize getLoggableTypes in fuzzer, and add isLoggableType (#3208)Alon Zakai2020-10-091-7/+17
| | | | | | | Previously getLoggableType would allocate a vector every time. This caches it. Also add isLoggableType which will need this caching as I will be calling it quite a lot in a future patch to the fuzzer.
* Validate memory64 (#3202)Alon Zakai2020-10-087-6/+11
|
* Fuzz fix for DuplicateFunctionElimination (#3204)Alon Zakai2020-10-083-2/+25
| | | | The replaceFunctions utility replaced exports by name, but did not check the kind, so it could get confused when names happen to overlap.
* Add static guards for cast and dynCast (#3201)Max Graey2020-10-081-1/+13
|
* Remove RelooperJumpThreading pass, which was just for fastcomp (#3199)Alon Zakai2020-10-084-286/+0
| | | See emscripten-core/emscripten#11860