Running `wasm-opt` with `-Os` leaves NOP / dead control flow behind
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- wasm
- Área
- compilers
Línea de trabajo
Empieza reproduciendo el informe con el archivo flute.wasm adjunto y el comando wasm-opt mostrado; después, inspecciona la primera salida de -Os en busca de los bloques NOP y las ramas inalcanzables mostrados en el issue. Compárala con una segunda pasada de -Os; se considera terminado cuando una sola pasada de optimización elimina estos patrones de flujo de control muerto sin requerir ejecuciones repetidas de -Os.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- WebAssembly
- Estrellas
- 8.7k
- Forks
- 893
- Merge medio
- 1 d 11 h
- PR fusionados (30 d)
- 74
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de WebAssembly/binaryen
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
WebAssembly/binaryen#9185 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
WebAssembly/binaryen#9135 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 Medio día Aptitud para principiantes 76/100
WebAssembly/binaryen#9018 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
WebAssembly/binaryen#9210 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
WebAssembly/binaryen#9186 ·
Los mantenedores suelen responder en 1 día
Todos los issues de WebAssembly/binaryen
Issues similares
-
vxc prints a debug line '[flat-codegen] emitted module via the flat path' on every compilePosiblemente ocupada @YodHeVauHe la tomó hoy. Abiertodevex good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
kmmbvnr/rank#196 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
SciML/ModelingToolkit.jl#5255 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
NVIDIA/cuda-quantum#5539 ·
Los mantenedores suelen responder en 1 día
-
triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
NVIDIA/cuda-python#3015 · 2 comentarios ·
Los mantenedores suelen responder en 1 día