bytecodealliance / bytecodealliance/regalloc2
Rematerialization
- 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