| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
Generalize constant emitting in fuzzer, using +-1 and *+-1 effects to create more constants in a convenient way.
Also workaround for a gcc-7.2/windows issue that we don't fully understand, but removing the 1, -1 from those pick() calls avoids the bug.
|
|
|
|
| |
And add a visitor which must override all its elements, so this never happens again
|
|
|
| |
flake8 starts warning on bare "except:" in python scripts, and all CI job is failing for that.
|
| |
|
|
|
| |
|passOptions| in wasm-ctor-eval.cpp causes a compile failure, -Wunused-variable on the clang build.
|
| |
|
| |
|
| |
|
|
|
|
| |
complaining about out-of-range values (#1233)
|
| |
|
|
|
|
|
|
|
|
| |
* avoid returning a PassRunner just for OptimizationOptions, it would need a more careful design with a copy constructor. instead, just simplify the API to do the thing we need, which is run the passes
* disallow copy constructor
* delete copy operator too
|
|
|
|
| |
los of extra inefficient variables. this is more similar to the output we had before the flatten rewrite (#1229)
|
| |
|
|
|
|
| |
other similar APIs) and fix some ctor-evalling handling of imports, which was incorrect - we need to create fake globals when importing globals, not later, which is too late for initialized globals from imports (#1226)
|
|
|
|
| |
now that the type system has a proper unreachable, we don't need obviouslyDoesNotFlowOut
|
|
|
|
|
|
|
|
| |
* Fixed parseFile() skipping every other line
Was caused by "s = strchr(s, '\n')"
Also replaced recordFile() by parseFile() as they do exactly the same
* Added parseFile() to process() in s2wasm.h
|
|
|
|
| |
them around, causing us to zero out the wrong thing in another place and ensuing hilarity (#1212)
|
|
|
|
| |
we are moving code out of the br_if's condition - the value executes before (#1213)
|
|
|
|
| |
blocks (#1214)
|
|
|
|
| |
but are now much better covered by the emscripten test suite anyhow (#1222)
|
| |
|
| |
|
| |
|
|
|
|
| |
effect up. also add set_global support in dce (#1218)
|
| |
|
|
|
|
| |
may be unreachable (#1216)
|
|
|
|
| |
consistently handled regardless of whether we optimize in parallel or not (#1208)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rename flatten-control-flow to flatten, which now flattens everything, not just control flow, so e.g.
(i32.add
(call $x)
(call $y)
)
==>
(block
(set_local $temp_x (call $x))
(set_local $temp_y (call $y))
(i32.add
(get_local $x)
(get_local $y)
)
)
This uses more locals than before, but is much simpler and avoids a bunch of corner cases and fuzz bugs the old one hit. We can optimize later if necessary.
|
|
|
|
| |
* refactor validator API to use enums
|
|
|
|
|
|
|
|
|
|
| |
* Add --trap-mode=allow/clamp/js argument to asm2wasm and s2wasm
* Update asm2wasm and auto_update_tests scripts to use --trap-mode
* Throw std::invalid_argument instead of adding a new Invalid TrapMode type
* Remove legacy asm2wasm trap mode arguments
|
|
|
|
|
|
|
| |
This makes wasm validation parallel (the function part). This makes loading+validating tanks (a 12MB wasm file) 2.3x faster on a 4-core machine (from 3.5 to 1.5 seconds). It's a big speedup because most of loading+validating was actually validating.
It's also noticeable during compilation, since we validate by default at the end. 8% faster on -O2 and 23% on -O0. So actually fairly significant on -O0 builds.
As a bonus, this PR also moves the code from being 99% in the header to be 1% in the header.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Extract Asm2WasmBuilder::TrapMode to shared FloatTrapMode
* Extract makeTrappingI32Binary
* Extract makeTrappingI64Binary
* Extract asm2wasm test script into scripts/test/asm2wasm.py
This matches s2wasm.py, and makes iterating on asm2wasm slightly faster.
* Simplify callsites with an arg struct
* Combine func adding across i32 and i64
* Support f32-to-int in asm2wasm
* Add BinaryenTrapMode pass, run pass from s2wasm
* BinaryenTrapMode pass takes trap context as a parameter
* Pass fully supports non-trapping binary ops
* Defer adding functions until after iteration (hackily)
* Update asm2wasm to work with deferred function adding, rebuild tests
* Extract makeTrappingFloatToInt32
* Extract makeTrappingFloatToInt64
* Add unary conversions to trap pass
* Add functions in the pass itself
* Set s2wasm trap mode with command-line arguments
* Print BINARYEN_PASS_DEBUG state when testing
* Get asm2wasm using the BinaryenTrapMode pass instead of handling it inline
* Also handle f32 to int in asm2wasm
* Make BinaryenTrapMode only need a FloatTrapMode from the caller
* Just pass the current binary Expression directly
* Combine makeTrappingI32Binary with makeTrappingI64Binary
* Pass Unary expr to makeTrappingFloatToInt32
* Unify makeTrappingFloatToInt32 & 64
* Move makeTrapping* functions inside BinaryenTrapMode, make addedFunctions non-static
* Remove FloatTrapContext
* Minor cleanups
* Extract some smaller subfunctions
* Emit name switch/casing, rename is32Bit to isI64 for consistency
* Rename BinaryenTrapMode to FloatTrap, make trap mode a nested enum
* Add some comments explaining why FloatTrap is non-parallel
* Rename addedFunctions to generatedFunctions for precision
* Rename move and split float-clamp.h to passes/FloatTrap.(h|cpp)
* Use builder instead of allocator
* Instantiate trap handling passes via the pass manager
* Move passes/FloatTrap.h to ast/trapping.h
* Add helper function to add trap-handling passes
* Add trap mode pass tests
* Rename FloatTrap.cpp to TrapMode.cpp
* Add s2wasm trap mode tests. Force float->int conversion to be signed
* Add trapping_sint_div_s test to unit.asm.js
* Fix flake8 issues with test scripts
* Update pass description comment
* Extract building functions methods
* Make generate functions into top-level functions
* Add GeneratedTrappingFunctions class to manage function/import additions
* Move ensure/makeTrapping functions outside class scope
* Use GeneratedTrappingFunctions to add immediately in asm2wasm mode
* Remove trapping_sint_div_s test
We only added it to test that trapping divisions would get
constant-folded at the correct time. Now that we're not changing the
timing of trapping modes, the test is unneeded (and problematic).
* Review feedback, add validator/*.wasm to .gitignore
* Add support for unsigned float-to-int conversion
* Use opcode directly instead of bools
* Update s2wasm clamp test for unsigned ftoi
|
|
|
|
| |
exist, need to return curr->left, after that change (#1207)
|
|
|
|
| |
combining added constants (#1206)
|
|
|
|
|
|
| |
* don't use multiple threads in torture tests, which are parallel anyhow
* if we fail to create a thread, don't use multiple threads
|
|
|
| |
* optimize wasm reading: use a set of the breaks we've seen, don't rescan blocks to see if they have breaks to them
|
|\
| |
| | |
Fuzzer improvements and a fuzz fix on negative-zero comparison
|
| |
| |
| |
| | |
i.e., 0 != -0
|
|/
|
|
|
|
|
|
| |
* randomize initial memory
* low chance to have tiny blocks
* decent chance to have a branch back to the loop top
|
| |
|
|
|
|
| |
name of constants to include the WASM_ prefix so as not to collide with constants for the unprefixed values (#1199)
|
|
|
|
|
|
| |
* Refactor i64 lowering to use RAII temp vars
* Always generate trampoline blocks for Switch lowering
|
| |
|
|
|
|
| |
to none. that is bad if the function has a return value, as unreachable was ok but none is not. in that case, we must add an unreachable (#1193)
|
|
|
|
| |
Following WebAssembly/threads#58
e.g. (memory $0 23 256 shared) is now (memory $0 (shared 23 256))
|
| |
|
| |
|
| |
|
| |
|