Tracking issue: undo `rustc_codegen_ssa` patching (aka `pqp_cg_ssa`).
Personne n'a encore pris cette issue.
- Langage dominant
- Rust
- Étoiles
- 3.4k
- Forks
- 126
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par lire PR 170 et examiner le patching de rustc_codegen_ssa qui y est décrit, puis passez en revue les travaux listés autour de #[repr(simd)], des variables locales de fonction non typées, de l’inférence de type de asm! et des variables handle. L’issue ne sera complète que lorsque des remplacements légitimes supprimeront les hacks de patching de pqp_cg_ssa, mais elle n’identifie pas de voie d’implémentation ou de test délimitée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rust
- Domaine
- compilers
- Type d'issue
- Refactorisation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 20/100