Tracking issue: undo `rustc_codegen_ssa` patching (aka `pqp_cg_ssa`).
Offen
Dieses Issue hat noch niemand übernommen.
tracking
- Vorherrschende Sprache
- Rust
- Sterne
- 3.4k
- Forks
- 126
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem Lesen von PR 170 und des dort beschriebenen Patchings von rustc_codegen_ssa und prüfe anschließend die aufgeführten Arbeiten zu #[repr(simd)], untypisierten lokalen Variablen von Funktionen, der Typinferenz für asm! und Handle-Variablen. Das Issue ist erst abgeschlossen, wenn geeignete Ersetzungen die Patching-Hacks von pqp_cg_ssa entfernen, aber es wird kein abgegrenzter Implementierungs- oder Testpfad festgelegt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- compilers
- Issue-Typ
- Refactoring
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 20/100