Recognize table initialization code in start function and be able to devirtualize based on it

Aperta
#8,869 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
42/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
wasm

Direzione di ricerca

Inizia tracciando come Binaryen gestisce table.fill, start-function initialization code ed element segments, quindi confrontalo con il comportamento esistente di devirtualization e table-load folding. Definisci la semantica di opt-in flag e verifica che le initialized regions riconosciute siano trattate come immutable element-section regions senza modificare le unrecognized tables.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Producers of wasm code prefer small binary size and may use table.fill instructions to initialize parts of a table (or other constructs, like a loop of increasing indices to initialize i31ref table) instead of emitting large element segments.

It would be nice if binaryen offered a flag (e.g. --trust-table-init-code or something like that) that would make it recognize this pattern and treat it as iff the regions were initialized in element sections and therefore be immutable and allow devirtualization / loads of the table to be folded away.

It could be an opt-in flag.

(In some sense an export of a table - e.g. in multi module scenarios - is in similar situation. One may want with a wasm-merge+wasm-opt+wasm-split the ability to devirtualize -- and would have an assumption that the exported table isn't used by 3rd party modules)

Lingua principale
WebAssembly
Stelle
8.6k
Fork
885
Merge medio
2g 1h
PR unite (30g)
70

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di WebAssembly/binaryen

Tutte le issue di WebAssembly/binaryen

Issue simili

Altre issue su Compilers

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.