emscripten-core / emscripten-core/emscripten
"WebAssembly Fix Irreducible Control Flow" pass causes OOM on a huge function
- Lingua principale
- C++
- Stelle
- 27.6k
- Fork
- 3.6k
- Merge medio
- 1g 14h
- PR unite (30g)
- 125
Descrizione
Emscripten 2.0.6 consumes 10GiB of memory and is OOM-killed when compiling a source file with a huge function in it.
For ease of reproduction I am including LLVM IR of the source file: [disasm.ll](https://gist.githubusercontent.com/mejedi/f863ece38189ad9026c4096c8e98918a/raw/e14887805de6c6fbfacb5e2e4864e88244483666/disasm.ll)
`em++ -c disasm.ll -mllvm -debug-pass=Executions`
The last line printed:
`[2020-12-08 19:16:08.463129734] 0x2d4fc70 Executing Pass 'WebAssembly Fix Irreducible Control Flow' on Function '_ZNK5clang6interp8Function4dumpERN4llvm11raw_ostreamE'`
The footprint of clang process starts slowly growing. After exceeding 10GiB, it is OOM killed.
FYI: the source code is `clang/lib/AST/Interp/Disasm.cpp` from llvm project, tagged `llvmorg-11.0.0`.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia riproducendo il problema con l’input disasm.ll fornito usando `em++ -c disasm.ll -mllvm -debug-pass=Executions`, quindi esamina il pass `WebAssembly Fix Irreducible Control Flow` e il codice sorgente segnalato `clang/lib/AST/Interp/Disasm.cpp`. Il lavoro è completato quando l’enorme funzione fornita non porta più il compilatore a usare una quantità eccessiva di memoria o a essere terminato da un OOM kill.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- cpp, wasm
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100