bytecodealliance / bytecodealliance/regalloc2

Rematerialization

Aperta
#8 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Rust
Stelle
265
Fork
53
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

As an alternative to spilling and reloading, a vreg value can sometimes be recomputed from other available values. There are two ways this can be supported in regalloc2:

## Simple rematerialization

Supporting rematerialization for constants, including runtime constants which only depend on pinned registers (e.g. VMContext), is relatively straightforward. The client needs to track rematerialization metadata for each `VReg`, after which we can elide spills for this vreg (unless there is a stack use) and replace reloads with rematerializations.

```rust
trait Function {
fn can_rematerialize(&self, vreg: VReg) -> bool;
}

enum Edit {
/// The code sequence for rematerialization is only allowed to
/// use `dest` and the dedicated scratch register.
Rematerialize {
vreg: VReg,
// This is not an Allocation because rematerializing
// into a stack slot doesn't make sense.
dest: PReg,
}
}
```

## Complex rematerialization

Rematerialization involving values in other vregs is more complex and probably not worth the effort of implementing. It has been done before as part of a [research project on V8](https://csit.am/2015/proceedings/PDC/PDC5.pdf) but AFAIK this has not made it into the main V8 codebase.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia tracciando il Function trait e l’Edit enum descritti nell’issue, insieme alla gestione esistente di VReg, PReg, spill e reload. Determina se l’ambito della semplice rimaterializzazione delle costanti può essere progettato senza supportare la rimaterializzazione complessa; il lavoro sarebbe considerato completo quando includesse l’interfaccia dei metadati, le modifiche di rimaterializzazione e la copertura del comportamento di spill e reload.

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

Valutazione

Stack tecnologico
rust
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
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.