Running `wasm-opt` with `-Os` leaves NOP / dead control flow behind
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- wasm
- Ambito
- compilers
Direzione di ricerca
Inizia riproducendo il report con il file flute.wasm allegato e il comando wasm-opt mostrato, quindi esamina il primo output di -Os alla ricerca dei blocchi NOP e dei rami irraggiungibili mostrati nell’issue. Confrontalo con un secondo passaggio di -Os; il lavoro è completato quando un singolo passaggio di ottimizzazione rimuove questi pattern di flusso di controllo morto senza richiedere esecuzioni ripetute di -Os.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
See attached flute.tar.gz
We start with an unoptimized flute.wasm file and run wasm-opt
% wasm-opt -g --enable-gc --enable-reference-types --enable-multivalue --enable-exception-handling --enable-nontrapping-float-to-int --enable-sign-ext --enable-bulk-memory --enable-threads '--no-inline=*<noInline>*' --traps-never-happen \
-Os \
flute.wasm \
-o flute.Os.wasm
This -Os leaves NOP blocks behind:
(func $_InterfaceType.toString ...
...
block $label0 (result i32)
local.get $var0
ref.cast $_InterfaceType
local.tee $var7
struct.get $_InterfaceType $classId
br $label0
end $label0
...
)
It also doesn't prune branches with unreachable (some variants of this):
(func $_FunctionType.toString
...
if (result (ref $JSStringImpl))
local.get $var6
unreachable
else
local.get $var6
block $label5 (result (ref $JSStringImpl))
local.get $var9
i32.const 0
global.get $"C8 DiagnosticLevel"
ref.null none
local.get $var9
struct.get $_Type $field0
i32.const 3066
i32.add
call_indirect (param (ref $#Top) i32 (ref $DiagnosticLevel) (ref null $TextTreeConfiguration)) (result (ref $JSStringImpl))
br $label5
end $label5
call $JSStringImpl.+
end
...
)
If we run another -Os pass then those issues disappear
% wasm-opt -g --enable-gc --enable-reference-types --enable-multivalue --enable-exception-handling --enable-nontrapping-float-to-int --enable-sign-ext --enable-bulk-memory --enable-threads '--no-inline=*<noInline>*' --traps-never-happen \
-Os \
flute.Os.wasm \
-o flute.Os.Os.wasm
From a users point of view, I wouldn't expect an -Os to leave these code patterns behind. We can of course run multiple -Os rounds, but that a) may do more work than needed and b) raises the question of how many -Os passes one may need to run to cleanup things left by previous -Os passes.
- Lingua principale
- WebAssembly
- Stelle
- 8.7k
- Fork
- 893
- Merge medio
- 1g 14h
- PR unite (30g)
- 77
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di WebAssembly/binaryen
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
WebAssembly/binaryen#9185 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
WebAssembly/binaryen#9135 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 Mezza giornata Idoneità per principianti 76/100
WebAssembly/binaryen#9018 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 58/100
WebAssembly/binaryen#9210 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
WebAssembly/binaryen#9186 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di WebAssembly/binaryen
Issue simili
-
I-prioritize needs-triage regression-from-stable-to-beta T-lang
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
rust-lang/rust#163830 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
rubys/roundhouse#444 ·
I maintainer di solito rispondono entro 1 giorno
-
crash llvm:codegen
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
llvm/llvm-project#229064 ·
I maintainer di solito rispondono entro 1 giorno
-
vxc prints a debug line '[flat-codegen] emitted module via the flat path' on every compileForse già presa @YodHeVauHe l’ha presa oggi. Apertadevex good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
kmmbvnr/rank#196 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno