array memset testing
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- rust
- Ambito
- compilers, testing-qa
Direzione di ricerca
Inizia in crates/rustc_codegen_spirv/src/builder/builder_methods.rs e rivedi gli helper di memset e i percorsi di riempimento degli array. Adatta i casi di test di PR #586 per coprire il riempimento degli array tramite memset per u64, i64 e u32, quindi controlla il disassemblato generato. Il lavoro è completo quando i test rilevano le mutazioni descritte nell’issue, senza lacune di compiletest o difftest.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
UPDATED: I tried a few mutations in PR which do not trigger any CI failures on my personal fork: https://github.com/brody2consult/rust-gpu/pull/2
diff --git a/crates/rustc_codegen_spirv/src/builder/builder_methods.rs b/crates/rustc_codegen_spirv/src/builder/builder_methods.rs
index d86db1cbd0..c2143f4436 100644
--- a/crates/rustc_codegen_spirv/src/builder/builder_methods.rs
+++ b/crates/rustc_codegen_spirv/src/builder/builder_methods.rs
@@ -290,22 +290,15 @@ macro_rules! simple_uni_op {
}
fn memset_fill_u16(b: u8) -> u16 {
- b as u16 | ((b as u16) << 8)
+ 0xbad_u16 | ((b as u16) << 10)
}
fn memset_fill_u32(b: u8) -> u32 {
- b as u32 | ((b as u32) << 8) | ((b as u32) << 16) | ((b as u32) << 24)
+ 0xbad_u32 | ((b as u32) << 20)
}
fn memset_fill_u64(b: u8) -> u64 {
- b as u64
- | ((b as u64) << 8)
- | ((b as u64) << 16)
- | ((b as u64) << 24)
- | ((b as u64) << 32)
- | ((b as u64) << 40)
- | ((b as u64) << 48)
- | ((b as u64) << 56)
+ 0xbad_u64 | ((b as u64) << 30)
}
fn memset_dynamic_scalar(
@@ -384,9 +377,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
32 => self
.constant_u32(self.span(), memset_fill_u32(fill_byte))
.def(self),
- 64 => self
- .constant_u64(self.span(), memset_fill_u64(fill_byte))
- .def(self),
_ => self.fatal(format!(
"memset on integer width {width} not implemented yet"
)),
@@ -2911,7 +2901,7 @@ impl<'a, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'tcx> {
};
let elem_ty_spv = self.lookup_type(elem_ty);
let pat = match self.builder.lookup_const_scalar(fill_byte) {
- Some(fill_byte) => self.memset_const_pattern(&elem_ty_spv, fill_byte as u8),
+ Some(_) => self.memset_const_pattern(&elem_ty_spv, 123),
None => self.memset_dynamic_pattern(&elem_ty_spv, fill_byte.def(self)),
}
.with_type(elem_ty);
and some more that do not trigger any compiletest failures or difftest failures in my personal workarea:
diff --git a/crates/rustc_codegen_spirv/src/builder/builder_methods.rs b/crates/rustc_codegen_spirv/src/builder/builder_methods.rs
index d86db1cbd0..b6a867933f 100644
--- a/crates/rustc_codegen_spirv/src/builder/builder_methods.rs
+++ b/crates/rustc_codegen_spirv/src/builder/builder_methods.rs
@@ -290,21 +290,16 @@ macro_rules! simple_uni_op {
}
fn memset_fill_u16(b: u8) -> u16 {
- b as u16 | ((b as u16) << 8)
+ b as u16
}
fn memset_fill_u32(b: u8) -> u32 {
- b as u32 | ((b as u32) << 8) | ((b as u32) << 16) | ((b as u32) << 24)
+ b as u32
}
fn memset_fill_u64(b: u8) -> u64 {
b as u64
| ((b as u64) << 8)
- | ((b as u64) << 16)
- | ((b as u64) << 24)
- | ((b as u64) << 32)
- | ((b as u64) << 40)
- | ((b as u64) << 48)
| ((b as u64) << 56)
}
I discovered this while investigating possible testing for a more general solution to #594.
I suspect the test cases from PR #586 may be able to help avoid this issue if we can adapt these to test memset array fill for u64, i64, u32, etc & check the disassembly. This could give me some more confidence in case we would ever want to refactor some of this memset-related code (someday).
- Lingua principale
- Rust
- Stelle
- 3.4k
- Fork
- 126
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
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.
Altre issue di Rust-GPU/rust-gpu
-
enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
-
glam v0.33.6 breaks `Vec3A` Apertabug
-
enhancement
Rust-GPU/rust-gpu#643 · 3 commenti · 1 reazione · 1 assegnatario ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
Tutte le issue di Rust-GPU/rust-gpu
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
agentic-workflows
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
web-infra-dev/rspack#15847 ·