WASM-METADCE(1)
โจ NAME โจ
wasm-metadce โ the tool from the wasm-metadce(1) manual page that does dead code elimination (DCE) on a bigger space than just the wasm module ๐ it's giving very "I see the whole graph, not just the wasm" energy.
๐ฆ DESCRIPTION ๐ฆ
okay bestie, buckle up, because this one's a whole vibe โจ
wasm-metadce INFILE
So here's the tea ๐: this tool performs dead code elimination (DCE) on a larger space that the wasm module is just a part of. Like, if you have JS and wasm that are connected, this can DCE the combined graph. And by doing that, it's able to eliminate wasm module exports, which otherwise regular optimizations cannot. periodt ๐
This tool receives a representation of the reachability graph that the wasm module resides in, which contains abstract nodes and connections showing what they reach. Some of those nodes can represent the wasm module's imports and exports. The tool then completes the graph by adding the internal parts of the module, and does DCE on the entire thing. iconic behavior, honestly ๐
This tool will output a wasm module with dead code eliminated, and metadata describing the things in the rest of the graph that can be eliminated as well. ๐
The graph description file should represent the graph in the following JSON-like notation โ and note, bestie, this is not true JSON: things like comments, escaping, single-quotes, etc. are not supported ๐
[
{
"name": "entity1", "reaches": ["entity2, "entity3"], "root": true
}, {
"name": "entity2", "reaches": ["entity1, "entity4"]
}, {
"name": "entity3", "reaches": ["entity1"], "export": "export1"
}, {
"name": "entity4", "import": ["module", "import1"]
},
]
Each entity has a name and an optional list of the other entities it reaches. It can also be marked as a root, export (with the export string), or import (with the module and import strings). DCE then computes what is reachable from the roots. ๐
๐ ๏ธ wasm-opt options
--output,-oโ the output file, aka where the slay goes ๐พ--input-source-map,-ismโ consume source map from the specified file--output-source-map,-osmโ emit source map to the specified file--output-source-map-url,-osuโ emit specified string as source map URL--emit-text,-Sโ emit text instead of binary for the output file--debuginfo,-gโ emit names section and debug info ๐--graph-file,-fโ filename of the graph description file (the very graph we're DCE-ing, bestie)--dump,-dโ dump the combined graph file (useful for debugging) ๐
๐ Optimization passes
like. there are SO many. and every single one of them matters, so we're not skipping a single one fr fr ๐ซถ
--abstract-type-refiningโ refine and merge abstract (never-created) types--alignment-loweringโ lower unaligned loads and stores to smaller aligned ones--asyncifyโ async/await style transform, allowing pausing and resuming โธ๏ธโถ๏ธ--avoid-reinterpretsโ tries to avoid reinterpret operations via more loads--cfpโ propagate constant struct field values--cfp-reftestโ propagate constant struct field values, usingref.test--coalesce-localsโ reduce # of locals by coalescing--coalesce-locals-learningโ reduce # of locals by coalescing and learning ๐ง--code-foldingโ fold code, merging duplicates--code-pushingโ push code forward, potentially making it not always execute--const-hoistingโ hoist repeated constants to a local--constraint-analysisโ finds and uses mathematical constraints on locals ๐--daeโ removes arguments to calls in an lto-like manner--dae-optimizingโ removes arguments to calls in an lto-like manner, and optimizes where we removed--dae2โ Experimental reimplementation of DAE ๐งช--dceโ removes unreachable code (our main character, lowkey ๐)--dealignโ forces all loads and stores to have alignment 1--denanโ instrument the wasm to convert NaNs into 0 at runtime--dfoโ optimizes using the DataFlow SSA IR--directizeโ turns indirect calls into direct ones--discard-global-effectsโ discards global effect info--duplicate-function-eliminationโ removes duplicate functions--duplicate-import-eliminationโ removes duplicate imports--dwarfdumpโ dump DWARF debug info sections from the read binary--emit-target-featuresโ emit the target features section in the output--enclose-worldโ modify the wasm (destructively) for closed-world โ ๏ธ yes, destructively, we said what we said--extract-functionโ leaves just one function (useful for debugging)--extract-function-indexโ leaves just one function selected by index--flattenโ flattens out code, removing nesting--fpcast-emuโ emulates function pointer casts, allowing incorrect indirect calls to (sometimes) work ๐--func-metricsโ reports function metrics ๐--generate-dyncallsโ generatedynCallfunctions used by emscripten ABI--generate-global-effectsโ generate global effect info (helps later passes)--generate-i64-dyncallsโ generatedynCallfunctions used by emscripten ABI, but only for functions withi64in their signature (which cannot be invoked via the wasm table without JavaScript BigInt support).--global-refiningโ refine the types of globals--gsiโ globally optimize struct values--gsi-desc-castโ globally optimize struct values, also emittingref.cast_desc_eq--gtoโ globally optimize GC types--gufaโ Grand Unified Flow Analysis: optimize the entire program using information about what content can actually appear in each location ๐ฎ--gufa-cast-allโ GUFA plus add casts for all inferences--gufa-optimizingโ GUFA plus local optimizations in functions we modified--heap-store-optimizationโ optimize heap (GC) stores--heap2localโ replace GC allocations with locals--i64-to-i32-loweringโ lower all uses ofi64s to usei32s instead--inline-mainโ inline__original_mainintomain--inliningโ inline functions (you probably wantinlining-optimizing)--inlining-optimizingโ inline functions and optimizes where we inlined--instrument-branch-hintsโ instrument branch hints so we can see which guessed right--instrument-localsโ instrument the build with code to intercept all loads and stores--instrument-memoryโ instrument the build with code to intercept all loads and stores--intrinsic-loweringโ lower away binaryen intrinsics--legalize-and-prune-js-interfaceโ legalizes the import/export boundary and prunes when needed--legalize-js-interfaceโ legalizesi64types on the import/export boundary--licmโ loop invariant code motion--limit-segmentsโ attempt to merge segments to fit within web limits ๐--llvm-memory-copy-fill-loweringโ Lowermemory.copyandmemory.fillto wasm mvp and disable the bulk-memory feature.--llvm-nontrapping-fptoint-loweringโ lower nontrapping float-to-int operations to wasm mvp and disable the nontrapping fptoint feature--local-cseโ common subexpression elimination inside basic blocks--local-subtypingโ apply more specific subtypes to locals where possible--log-executionโ instrument the build with logging of where execution goes ๐--mark-js-calledโ mark js called functions (usingconfigureAll) as doing so--memory-packingโ packs memory into separate segments, skipping zeros--memory64-loweringโ lower loads and stores to a 64-bit memory to instead use a 32-bit one--merge-blocksโ merges blocks to their parents--merge-j2cl-itablesโ Merges itable structures into vtables to make types more compact--merge-localsโ merges locals when beneficial--merge-similar-functionsโ merges similar functions when benefical (yes that's the spelling, no we will not be fixing it, respect the source bestie)--metricsโ reports metrics (with an optional title,--metrics[=TITLE])--minify-importsโ minifies import names (only those, and not export names), and emits a mapping to the minified ones--minify-imports-and-exportsโ minifies both import and export names, and emits a mapping to the minified ones--minify-imports-and-exports-and-modulesโ minifies both import and export names, and emits a mapping to the minified ones, and minifies the modules as well--minimize-rec-groupsโ Split types into minimal recursion groups--monomorphizeโ creates specialized versions of functions--monomorphize-alwaysโ creates specialized versions of functions (even if unhelpful) ๐ญ--multi-memory-loweringโ combines multiple memories into a single memory--multi-memory-lowering-with-bounds-checksโ combines multiple memories into a single memory, trapping if the read or write is larger than the length of the memory's data--name-typesโ (re)name all heap types--nmโ name list--no-full-inlineโ mark functions as no-inline (for full inlining only)--no-inlineโ mark functions as no-inline--no-partial-inlineโ mark functions as no-inline (for partial inlining only)--once-reductionโ reduces calls to code that only runs once--optimize-added-constantsโ optimizes added constants into load/store offsets--optimize-added-constants-propagateโ optimizes added constants into load/store offsets, propagating them across locals too--optimize-castsโ eliminate and reuse casts--optimize-for-jsโ early optimize of the instruction combinations for js--optimize-instructionsโ optimizes instruction combinations--optimize-j2clโ optimizes J2CL specific constructs.--outliningโ outline instructions--pick-load-signsโ pick load signs based on their uses--poppifyโ Transform Binaryen IR into Poppy IR ๐ธ--post-emscriptenโ miscellaneous optimizations for Emscripten-generated code--precomputeโ computes compile-time evaluatable expressions--precompute-propagateโ computes compile-time evaluatable expressions and propagates them through locals--printโ print in s-expression format--print-boundaryโ print boundary in JSON format--print-call-graphโ print call graph--print-featuresโ print options for enabled features--print-fullโ print in full s-expression format
--print-function-mapโ prints a map that links function indexes to their names. It's literally the backstage pass of function identity ๐๏ธโจ--print-minifiedโ prints in minified s-expression format. Tiny text, zero fluff, maximum compactness ๐--propagate-debug-locsโ propagates debug location from parents or previous siblings down to child nodes. Debug info said pass it down and it did ๐ง--propagate-globals-globallyโ propagates global values to other globals (useful for tests). Globals helping globals, we love to see it ๐ซถ--remove-exportsโ removes exports using a wildcard. Wildcard said begone ๐--remove-importsโ removes imports and replaces them with nops. Imports? Never heard of her ๐--remove-memoryโ removes memory init (legacy name). Bestie this is the legacy name, so it's giving old-school ๐ญ--remove-memory-initโ removes memory initialization. The glow-up version of the legacy one โจ--remove-non-js-opsโ removes operations that are incompatible with js. If JS can't sit with it, it's out ๐ซ--remove-relaxed-simdโ replaces relaxed SIMD instructions withunreachable. Relaxed? Not anymore, bestie ๐--remove-unused-brsโ removes breaks from locations that are not needed. Unnecessary breaks? We don't know them ๐--remove-unused-module-elementsโ removes unused module elements. Decluttered, organized, iconic โจ--remove-unused-namesโ removes names from locations that are never branched to. If nobody branches to you, why are you named? ๐--remove-unused-nonfunction-module-elementsโ removes unused module elements that are not functions. Non-function elements, you are dismissed ๐ซก--remove-unused-typesโ remove unused private GC types. Private types that nobody uses? Bye ๐--reorder-functionsโ sorts functions by access frequency. Most-used functions first, main character energy ๐--reorder-functions-by-nameโ sorts functions by name (useful for debugging). Alphabetical order said let me cook ๐ณ--reorder-globalsโ sorts globals by access frequency. Globals getting reordered by how popular they are ๐--reorder-localsโ sorts locals by access frequency. Locals said rate me by my usage ๐--reorder-typesโ sorts private types by access frequency. Private types, this is your popularity contest ๐--rereloopโ re-optimizes control flow using the relooper algorithm. Control flow said makeover time ๐ฆ--roundtripโ writes the module to binary, then reads it. A little binary vacation, then back home ๐--rseโ remove redundantlocal.sets. Three letters, one job, lowkey iconic ๐--safe-heapโ instruments loads and stores to check for invalid behavior. Safety first, bestie ๐ฆบ--separate-data-segmentsโ writes data segments to a file and strips them from the module. Data segments said I need space ๐--set-globalsโ sets specified globals to specified values. Globals getting assigned, no cap ๐ฏ--signature-pruningโ removes params from function signature types where possible. Params that aren't needed? Pruned โ๏ธ--signature-refiningโ applies more specific subtypes to signature types where possible. Signature said be more specific ๐--signext-loweringโ lowers sign-ext operations to wasm mvp and disables the sign extension feature. Downgraded to mvp, respectfully ๐--simplify-globalsโ miscellaneous globals-related optimizations. Globals getting a little self-care ๐ง--simplify-globals-optimizingโ miscellaneous globals-related optimizations, and optimizes where we replacedglobal.getswith constants. Constants said we ate ๐ฝ๏ธ--simplify-localsโ miscellaneous locals-related optimizations. Locals getting simplified, periodt ๐--simplify-locals-nonestingโ miscellaneous locals-related optimizations (no nesting at all; preserves flatness). Flatness preserved, no nesting drama ๐ซถ--simplify-locals-nostructureโ miscellaneous locals-related optimizations (no structure). Structure? Never met her ๐--simplify-locals-noteeโ miscellaneous locals-related optimizations (no tees). Tees are not invited to this party ๐ซ--simplify-locals-notee-nostructureโ miscellaneous locals-related optimizations (no tees or structure). No tees, no structure, just vibes โจ--souperifyโ emit Souper IR in text form. Souper IR said read me ๐--souperify-single-useโ emit Souper IR in text form (single-use nodes only). Single-use nodes only, exclusive club ๐--spill-pointersโ spill pointers to the C stack (useful for Boehm-style GC). Pointers said spill the tea โ--ssaโ ssa-ify variables so that they have a single assignment. One variable, one assignment, one destiny ๐ซ--ssa-nomergeโ ssa-ify variables so that they have a single assignment, ignoring merges. Single assignment, but merges are ignored ๐--stack-checkโ enforce limits on llvm's__stack_pointerglobal. Stack pointer said boundaries, bestie ๐ง--string-gatheringโ gathers wasm strings to globals. Strings said come together right now ๐ถ--string-liftingโ lift string imports to wasm strings. Imports getting lifted up, glow-up style โจ--string-loweringโ lowers wasm strings and operations to imports. Strings going down to imports, respectfully ๐--string-lowering-magic-importsโ same asstring-lowering, but encodes well-formed strings as magic imports. Magic imports said abracadabra ๐ช--string-lowering-magic-imports-assertโ same asstring-lowering-magic-imports, but raise a fatal error if there are invalid strings. Invalid strings? Fatal error, no cap ๐--stripโ deprecated; same asstrip-debug. Bestie, deprecated ๐ญ same energy asstrip-debug--strip-debugโ strip debug info (including the names section). Debug info stripped, names section included in the yeet ๐งน--strip-dwarfโ strip dwarf debug info. Dwarf debug info said I'm out ๐--strip-ehโ strip EH instructions. EH instructions stripped, periodt ๐--strip-producersโ strip the wasm producers section. Producers section? Gone ๐ซก--strip-target-featuresโ strip the wasm target features section. Target features section said not today ๐ซ--strip-toolchain-annotationsโ strip all toolchain-specific code annotations. Toolchain annotations, you are dismissed ๐--stub-unsupported-jsโ stub out unsupported JS operations. Unsupported JS said stub me out ๐ชต--symbolmapโ alias forprint-function-map. Same map, different name, iykyk ๐บ๏ธ--table64-loweringโ alias formemory64-lowering. Alias behavior, no extra thoughts ๐ญ--trace-callsโ instrument the build with code to intercept specific function calls. Calls getting traced like true crime ๐--translate-to-exnrefโ translate old Phase 3 EH instructions to new ones with exnref. Old Phase 3 said makeover ๐--translate-to-new-ehโ deprecated; same astranslate-to-exnref. Deprecated bestie, same astranslate-to-exnref๐ญ--trap-mode-clampโ replace trapping operations with clamping semantics. Traps said clamp it ๐๏ธ--trap-mode-jsโ replace trapping operations with js semantics. Traps said JS vibes only ๐--tuple-optimizationโ optimize trivial tuples away. Trivial tuples said bye ๐--type-finalizingโ mark all leaf types as final. Leaf types said final answer โ--type-mergingโ merge types to their supertypes where possible. Types merging like a friend group ๐ค--type-refiningโ apply more specific subtypes to type fields where possible. Type fields said be more specific ๐--type-refining-gufaโ apply more specific subtypes to type fields where possible (using GUFA). Same as above but GUFA said let me help ๐ซถ--type-ssaโ create new types to help other optimizations. New types on the block, helping the team ๐--type-unfinalizingโ mark all types as non-final (open). Final? Not anymore, we open now ๐ช--unsubtypingโ removes unnecessary subtyping relationships. Unnecessary relationships? Removed ๐ซ--unteeโ removeslocal.tees, replacing them with sets and gets. Tees said we're replaced ๐--vacuumโ removes obviously unneeded code. Code getting vacuumed, obviously ๐งน
โก Optimization options โก
-Oโ execute default optimization passes (equivalent to-Os). Default energy, size-focused slay โจ-O0โ execute no optimization passes. Optimization said not today ๐ซ-O1โ execute-O1optimization passes (quick&useful opts, useful for iteration builds). Quick and useful, perfect for iteration vibes ๐-O2โ execute-O2optimization passes (most opts, generally gets most perf). Most opts, generally most perf, main character of optimization levels ๐-O3โ execute-O3optimization passes (spends potentially a lot of time optimizing). It may take a lot of time, but it's committed ๐ฐ๏ธ-O4โ execute-O4optimization passes (also flatten the IR, which can take a lot more time and memory, but is useful on more nested / complex / less-optimized input). More time, more memory, more nesting support, highkey intense ๐ฅ-Osโ execute default optimization passes, focusing on code size. Code size said small is beautiful ๐-Ozโ execute default optimization passes, super-focusing on code size. Super-focusing on size, tiny queen behavior ๐--optimize-level,-olโ How much to focus on optimizing code. Dial in your optimization obsession level ๐๏ธ--shrink-level,-sโ How much to focus on shrinking code size. Dial in your shrinking obsession level ๐--debuginfo,-gโ Emit names section in wasm binary (or full debuginfo in wast). Debug info said include me ๐ชช--always-inline-max-function-size,-aimfsโ Max size of functions that are always inlined (default 2, which is safe for use with-Osbuilds). Default2, safe with-Osbuilds, no cap ๐งข--flexible-inline-max-function-size,-fimfsโ Max size of functions that are inlined when lightweight (no loops or function calls) when optimizing aggressively for speed (-O3). Default: 20. Lightweight only, no loops or calls, default20, aggressive speed mode ๐๏ธ--one-caller-inline-max-function-size,-ocimfsโ Max size of functions that are inlined when there is only one caller (default -1, which means all such functions are inlined). Default-1, which means all such functions are inlined, only-one-caller energy ๐--inline-max-combined-binary-size,-imcbsโ Max size of combined functions after inlining. Default: 409600. Default409600, combined size limit, respect it ๐--inline-functions-with-loops,-ifwlโ Allow inlining functions with loops. Loops are invited to the inline party ๐--partial-inlining-ifs,-piiโ Number of ifs allowed in partial inlining (zero means partial inlining is disabled) (default: 0). Default0, zero ifs means partial inlining is disabled ๐ซ--ignore-implicit-traps,-iitโ Optimize under the helpful assumption that no surprising traps occur (from load, div/mod, etc.). Assumption: no surprising traps, helpful but bold ๐--traps-never-happen,-tnhโ Optimize under the helpful assumption that no trap is reached at runtime (from load, div/mod, etc.). Assumption: no trap is reached at runtime, living dangerously โจ--low-memory-unused,-lmuโ Optimize under the helpful assumption that the low 1K of memory is not used by the application. Assumption: low1Kof memory is unused, okay bestie ๐ง--fast-math,-ffmโ Optimize floats without handling corner cases of NaNs and rounding. Floats optimized, NaNs and rounding corner cases not handled ๐--zero-filled-memory,-uimโ Assume that an imported memory will be zero-initialized. Assumption: imported memory is zero-initialized, clean slate energy ๐งผ--skip-pass,-spโ Skip a pass (do not run it). Pass said not running ๐โโ๏ธ
๐งฐ Tool options ๐งฐ
--mvp-features,-mvpโ Disable all non-MVP features. MVP only, non-MVP features said peace out โ๏ธ--all-features,-allโ Enable all features. Everything on, all features invited, no exclusions ๐--detect-featuresโ (deprecated - this flag does nothing). Deprecated and fr it does absolutely nothing, ghost flag ๐ป--quiet,-qโ Emit less verbose output and hide trivial warnings. Less yapping, trivial warnings hidden ๐คซ--experimental-poppyโ Parse wast files as Poppy IR for testing purposes. Poppy IR said it's giving experimental ๐งช--emit-module-namesโ Emit module names, even if not emitting the rest of the names section. Names emitted even without the rest, independent queen ๐--enable-sign-extโ Enable sign extension operations. Sign extension operations enabled โ--disable-sign-extโ Disable sign extension operations. Sign extension operations disabled โ--enable-threadsโ Enable atomic operations. Atomic operations enabled โ๏ธ--disable-threadsโ Disable atomic operations. Atomic operations disabled ๐ซ--enable-mutable-globalsโ Enable mutable globals. Mutable globals enabled ๐--disable-mutable-globalsโ Disable mutable globals. Mutable globals disabled ๐--enable-nontrapping-float-to-intโ Enable nontrapping float-to-int operations. Nontrapping float-to-int enabled โจ--disable-nontrapping-float-to-intโ Disable nontrapping float-to-int operations. Nontrapping float-to-int disabled ๐--enable-simdโ Enable SIMD operations and types. SIMD operations and types enabled ๐ฅ--disable-simdโ Disable SIMD operations and types. SIMD operations and types disabled ๐ซ--enable-bulk-memoryโ Enable bulk memory operations. Bulk memory operations enabled ๐ง--disable-bulk-memoryโ Disable bulk memory operations. Bulk memory operations disabled ๐ญ--enable-bulk-memory-optโ Enablememory.copyandmemory.fill.memory.copyandmemory.fillenabled ๐พ--disable-bulk-memory-optโ Disablememory.copyandmemory.fill.memory.copyandmemory.filldisabled ๐ซ--enable-call-indirect-overlongโ Enable LEB encoding of call-indirect (Ignored for compatibility as it has no effect on Binaryen). Ignored for compatibility, no effect on Binaryen, so don't stress ๐ง--disable-call-indirect-overlongโ Disable LEB encoding of call-indirect (Ignored for compatibility as it has no effect on Binaryen). Also ignored for compatibility, also no effect on Binaryen, twins ๐--enable-exception-handlingโ Enable exception handling operations. Exception handling operations enabled ๐จ--disable-exception-handlingโ Disable exception handling operations. Exception handling operations disabled ๐--enable-tail-callโ Enable tail call operations. Tail call operations enabled ๐พ--disable-tail-callโ Disable tail call operations. Tail call operations disabled ๐ซ--enable-reference-typesโ Enable reference types. Reference types enabled ๐ซถ--disable-reference-typesโ Disable reference types. Reference types disabled โ--enable-multivalueโ Enable multivalue functions. Multivalue functions enabled โจ--disable-multivalueโ Disable multivalue functions. Multivalue functions disabled ๐--enable-gcโ turn garbage collection on ๐--disable-gcโ turn garbage collection off--enable-memory64โ turn 64-bit memory on--disable-memory64โ turn 64-bit memory off--enable-relaxed-simdโ turn relaxed SIMD on--disable-relaxed-simdโ turn relaxed SIMD off--enable-extended-constโ turn extended const expressions on--disable-extended-constโ turn extended const expressions off--enable-stringsโ turn strings on ๐--disable-stringsโ turn strings off--enable-multimemoryโ turn multimemory on--disable-multimemoryโ turn multimemory off--enable-stack-switchingโ turn stack switching on--disable-stack-switchingโ turn stack switching off--enable-shared-everythingโ turn shared-everything threads on--disable-shared-everythingโ turn shared-everything threads off--enable-fp16โ turn float 16 operations on--disable-fp16โ turn float 16 operations off--enable-custom-descriptorsโ turn custom descriptors (RTTs) and exact references on--disable-custom-descriptorsโ turn custom descriptors (RTTs) and exact references off--enable-multibyteโ turn multibyte array loads and stores on--disable-multibyteโ turn multibyte array loads and stores off--enable-relaxed-atomicsโ turn acquire/release atomic memory operations on--disable-relaxed-atomicsโ turn acquire/release atomic memory operations off--enable-custom-page-sizesโ turn custom page sizes on--disable-custom-page-sizesโ turn custom page sizes off--enable-wide-arithmeticโ turn wide arithmetic on--disable-wide-arithmeticโ turn wide arithmetic off--enable-compact-importsโ turn the compact import section on--disable-compact-importsโ turn the compact import section off--enable-typed-function-referencesโ deprecated compatibility flag ๐ it's giving "legacy era", bestie--disable-typed-function-referencesโ deprecated compatibility flag ๐ same vibe, other direction--no-validation,-nโ no cap, this one just turns validation ALL the way off. It straight up assumes your inputs are correct, whichโฆ girl. If they're not, that's between you and the consequences ๐--pass-arg,-paโ an argument you hand off to the optimization passes that are running. Has to be shaped likeKEY@VALUE. IfKEYmatches the name of a pass, it lands on the closest instance of that pass sitting before us. IfKEYisn't a pass name, then it's a global option, and it applies to literally every pass instance that reads it โจ--closed-world,-cwโ assume the code outside the module does not inspect or interact with GC and function references, even if they get passed out. The outside can hold on to them and pass them back in, but it can't peek inside them or call them ๐--preserve-type-orderโ keep the types in the same order they came in from the input (so useful for debugging and testing, fr fr) ๐ง--generate-stack-irโ generate StackIR while writing--optimize-stack-irโ optimize StackIR while writing--print-stack-irโ print StackIR while writing--no-stack-irโ don't use StackIR at all (even when it's the default) ๐
๐ General options ๐
--versionโ spit out the version info and dip ๐ฆ--help,-hโ show this help message and exit, bestie's always got you ๐ซถ--debug,-dโ print debug information tostderr๐ฅ
And that's the whole page, babes โ part 3 done, we ate and left no crumbs ๐ <br> This one's wasm-metadce, version 131, dated August 2026, and it lives at WASM-METADCE(1). Go forth and debug, queen ๐โญ
๐ฆ where this page comes from
- ubuntu stonking: binaryen 131-2 ยท Apache-2.0
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms