Tracking issue: undo `rustc_codegen_ssa` patching (aka `pqp_cg_ssa`).
Nessuno ha ancora preso questa issue.
- Lingua principale
- Rust
- Stelle
- 3.4k
- Fork
- 126
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
PR that introduced rustc_codegen_ssa patching (aka pqp_cg_ssa):
- https://github.com/Rust-GPU/rust-gpu/pull/170
(its description goes into much more detail)
Legitimate solutions are needed, to replace the patching "hack"arounds:
- (easy?) transition away from
#[repr(simd)]for SPIR-V vector types- easy version: use
#[spirv(vector)]as a replacement- worst part is
glamwould need to depend onspirv-std-macros - however, it does unlock
glamusing#[spirv(matrix)], too!
- worst part is
- hard version: actually rely on
core::simd::Simd<T, N>glamalready has some features for this but only for some types
(and largely as an optimization, i.e. accelerating operations)glamneeds to cast&Simd<T, 2>to&struct { x: T, y: T }
(with#[repr(C)]on the latterstruct, this is 100% defined)- without some hacky special-cases,
qptrmay be required for this
- easy version: use
- (hard) support untyped function-local variables (
allocain LLVM terms)- see https://github.com/rust-lang/rust/pull/122053
(instead of a type, creating a variable now takes only size & alignment) - (note: experimental
qptrbranches can handle some of this already) - typed variables are currently relied on for:
- regular data type accesses (turning offsets into field accesses)
- would be subsumed by
qptr(which infers typed memory in general) - might be fixable pre-
qptrby collecting types from accesses
(however, typed GEPs have been replaced with raw byte offsets by now, so this would observe N disjoint leaves, no "fieldNof structS", and borderline reimplement theqptrtype recovery algorithm)
- would be subsumed by
- inline
asm!typeof*/type inference- sadly needed because we can't use normal value
in/outinasm!(without being limited to no generics, no vectors, etc.) and have to resort to passing&Tfor inputs and&MaybeUninit<T>for outputs - or rather,*mut Tfrom the latter) - thankfully,
rustc_codegen_ssadoes pass the Rust type of each input, so this has a relatively simple fix (just need to open a PR for it)
- sadly needed because we can't use normal value
- variables containing handles (e.g.
Images), not data- also needs to allow (for
asm!) e.g.MaybeUninit<SomeHandle>
(newtype unpacking of this is messy due toMaybeUninit<T>containingManuallyDrop<T>, more than anything else, but now that typed GEP is gone, we can more aggressively unpack newtypes and disallowrustc_codegen_ssagivingstructfield constant indices, only at most dynamic array indices) - even
qptrwouldn't accept the size & alignment form for handles - thankfully, handle types being opaque means these variables will always be accessed with the same type, so "infer type from accesses" would work here
- ideal solution looks more like wasm
externref, i.e.!Pointeein e.g.:
https://github.com/rust-lang/rfcs/pull/3729
- also needs to allow (for
- see https://github.com/rust-lang/rust/pull/122053
Guida per i contributori
Apri la guida per i contributori
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.
Direzione di ricerca
Inizia leggendo PR 170 e il patching di rustc_codegen_ssa descritto lì, quindi esamina il lavoro elencato relativo a #[repr(simd)], alle variabili locali di funzione non tipizzate, all’inferenza dei tipi di asm! e alle variabili handle. L’issue è completa solo quando sostituzioni legittime rimuovono gli hack di patching di pqp_cg_ssa, ma non identifica un percorso di implementazione o di test circoscritto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- compilers
- Tipo di issue
- Refactoring
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 20/100