1- // Test black_box intrinsic
21// build-pass
32// compile-flags: -C llvm-args=--disassemble-fn=black_box::disassemble
4-
5- #![ allow( internal_features) ]
6- #![ feature( core_intrinsics) ]
73#![ no_std]
84
95use core:: hint:: black_box;
106use spirv_std:: spirv;
117
8+ // Minimal kernel that writes the disassembly function result to a buffer
129#[ spirv( compute( threads( 1 ) ) ) ]
1310pub fn main ( #[ spirv( descriptor_set = 0 , binding = 0 , storage_buffer) ] out : & mut [ u32 ] ) {
14- let result = disassemble ( ) ;
15- for i in 0 ..result . len ( ) {
16- out[ i] = result [ i] ;
11+ let r = disassemble ( ) ;
12+ for i in 0 ..r . len ( ) {
13+ out[ i] = r [ i] ;
1714 }
1815}
1916
17+ #[ inline( never) ]
2018pub fn disassemble ( ) -> [ u32 ; 12 ] {
21- // Test with various types
2219 let x = 42i32 ;
20+ // Immediate: integer scalar passes through unchanged
2321 let y = black_box ( x) ;
2422
2523 let a = 3.14f32 ;
24+ // Immediate: float scalar passes through unchanged
2625 let b = black_box ( a) ;
2726
28- let v = [ 1 , 2 , 3 , 4 ] ;
27+ let v = [ 1u32 , 2 , 3 , 4 ] ;
28+ // Ref: non-immediate aggregate is loaded from memory
2929 let w = black_box ( v) ;
3030
31- // Test in expressions
31+ // Immediate: constants are immediates
3232 let result = black_box ( 10 ) + black_box ( 20 ) ;
3333
34- // Test with references
3534 let data = 100u32 ;
35+ // Immediate (pointer): reference value is an immediate scalar pointer
3636 let ref_data = black_box ( & data) ;
3737
38- let ref_slice = black_box ( v. as_slice ( ) ) ;
38+ // Pair: two-element tuple packs into a single SSA aggregate
39+ let pair = ( 5u32 , 6u32 ) ;
40+ let pair_bb = black_box ( pair) ;
41+ let pair_sum = pair_bb. 0 + pair_bb. 1 ;
42+
43+ // ZeroSized: unit type becomes `undef` of the right type
44+ let _z = black_box ( ( ) ) ;
3945
4046 [
4147 y as u32 ,
@@ -46,9 +52,9 @@ pub fn disassemble() -> [u32; 12] {
4652 w[ 3 ] ,
4753 result,
4854 * ref_data,
49- ref_slice [ 0 ] ,
50- ref_slice [ 1 ] ,
51- ref_slice [ 2 ] ,
52- ref_slice [ 3 ] ,
55+ pair_sum ,
56+ 0 ,
57+ 0 ,
58+ 0 ,
5359 ]
5460}
0 commit comments