emscripten-core / emscripten-core/emscripten

"WebAssembly Fix Irreducible Control Flow" pass causes OOM on a huge function

Aperta
#12,992 7 commenti 0 reazioni 0 assegnatari Vedi su GitHub
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.