LICM pass stopped working
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
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- typescript, wasm
- Área
- compilers
Línea de trabajo
Comienza con el ejemplo mínimo de un bucle en TypeScript y compara su salida WAT sin optimizar y optimizada. Después, inspecciona el paso LICM y los cambios referenciados en #4059, #4077 y #4076. Se considera terminado cuando el load se eleva de forma segura antes del bucle y la salida optimizada coincide con el comportamiento WAT esperado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
After some of this changes: #4059 or #4077 or #4076
LICM pass stopped working.
Here minimal example:
export function loop1(n: i32, ptr: usize): void {
let acc = 0;
for (let i = 0; i < n; i++) {
acc += load<i32>(ptr);
}
}
Unoptimized version (original):
(module
(type $i32_i32_=>_none (func (param i32 i32)))
(memory $0 0)
(export "loop1" (func $loop-test/loop1))
(export "memory" (memory $0))
(func $loop-test/loop1 (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
i32.const 0
local.set $2
i32.const 0
local.set $3
loop $for-loop|0
local.get $3
local.get $0
i32.lt_s
local.set $4
local.get $4
if
local.get $2
local.get $1
i32.load
i32.add
local.set $2
local.get $3
i32.const 1
i32.add
local.set $3
br $for-loop|0
end
end
)
)
Optimized:
(module
(type $i32_i32_=>_none (func (param i32 i32)))
(memory $0 0)
(export "loop1" (func $loop-test/loop1))
(export "memory" (memory $0))
(func $loop-test/loop1 (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
loop $for-loop|0
local.get $0
local.get $2
i32.gt_s
if
local.get $1
i32.load
local.get $3
i32.add
local.set $3
local.get $2
i32.const 1
i32.add
local.set $2
br $for-loop|0
end
end
)
)
Expected:
(module
(type $i32_i32_=>_none (func (param i32 i32)))
(memory $0 0)
(export "loop1" (func $module/loop1))
(export "memory" (memory $0))
(func $module/loop1 (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
local.get $1
i32.load
local.set $1
loop $for-loop|0
local.get $0
local.get $2
i32.gt_s
if
local.get $1
local.get $3
i32.add
local.set $3
local.get $2
i32.const 1
i32.add
local.set $2
br $for-loop|0
end
end
)
)
- Lenguaje dominante
- WebAssembly
- Estrellas
- 8.7k
- Forks
- 893
- Merge medio
- 1 d 15 h
- PR fusionados (30 d)
- 79
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
-
TupleOptimization: tuple swap is miscompiledPosiblemente ocupada @tlively la tomó hace 1 día. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
WebAssembly/binaryen#9210 · 1 asignado ·
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
-
area:prove bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Chelis-Lang/chelis#3317 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/TypeScript#64661 ·
Los mantenedores suelen responder en 1 día
-
good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Sim20004/teapot-lang#248 ·