Add volatile flag to MemFlags
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia in codegen/ir/memflags.rs, dove è definito MemFlags e si possono esaminare gli helper esistenti per i flag. Aggiungi il caso dell’enum Volatile e i tre metodi richiesti, quindi verifica che lo stato volatile possa essere creato, interrogato e aggiornato come descritto; l’esempio mem2reg della issue fornisce il caso d’uso previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Add Volatile flag to MemFlags.
Benefit
When some optimization pass knows about load/store type (is it volatile or not?) then it's possible to do a lot of optimizations. One of it is memory to register promotion. I tried to implement mem2reg pass there cranelift-mem2reg and this pass works but in some cases it fails e.g this simple C code:
// compiled with rcc
typedef struct Foo {
int x;
int y;
} Foo;
int main() {
Foo foo;
foo.y = 42;
}
Message: definition error: Compilation error: Verifier errors
note: while compiling function u0:0() -> i32 system_v {
ss0 = explicit_slot 8
block0:
v1 = iconst.i64 4
v2 = iadd.i64 v0, v1
v3 = iconst.i32 42
store v3, v2
v4 = iconst.i32 0
return v4
}
All loads and stores might be marked as volatile and mem2reg will not optimize struct Foo into registers.
Volatile flag also can help in SRoA when it's possible to replace allocation on stack with single 32 or 64 bit register.
Implementation
Just add additional enum case in codegen/ir/memflags.rs and add 3 simple functions to MemFlags: volatile() -> Self,is_volatile() -> bool, set_volatile(&mut self).
Alternatives
I do not see any alternatives.
UPD: This might be useful for this issue: Support volatile store/loads
- Lingua principale
- Rust
- Stelle
- 18.7k
- Fork
- 1.8k
- Merge medio
- 1g 13h
- PR unite (30g)
- 143
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bytecodealliance/wasmtime
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
bytecodealliance/wasmtime#14433 ·
I maintainer di solito rispondono entro 1 giorno
-
wasm-proposal:gc wasm-proposal:stack-switching
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
bytecodealliance/wasmtime#14239 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
cranelift
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
bytecodealliance/wasmtime#14200 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
bug wasm-proposal:exceptions wasmtime:debugging
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
bytecodealliance/wasmtime#14102 ·
I maintainer di solito rispondono entro 1 giorno
-
wasm-proposal:gc
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
bytecodealliance/wasmtime#13808 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di bytecodealliance/wasmtime
Issue simili
-
area:casework bug criticality:p3 triage:needs-implementation
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
registrystack/registry-stack#1623 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
DioxusLabs/anyrender#98 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
leptos-rs/leptos#4885 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
longbridge/gpui-kit#3276 ·
I maintainer di solito rispondono entro 1 giorno