File tree 2 files changed +66
-0
lines changed
2 files changed +66
-0
lines changed Original file line number Diff line number Diff line change
1
+ // verify that simd mask reductions do not introduce additional bit shift operations
2
+
3
+ // assembly-output: emit-asm
4
+ // compile-flags: --crate-type=lib -O --target aarch64-unknown-linux-gnu
5
+ // needs-llvm-components: aarch64
6
+ // only-aarch64
7
+ // only-linux
8
+
9
+ #![ feature( repr_simd, platform_intrinsics) ]
10
+ #![ allow( non_camel_case_types) ]
11
+
12
+ #[ repr( simd) ]
13
+ #[ derive( Copy , Clone ) ]
14
+ pub struct mask8x16 ( [ i8 ; 16 ] ) ;
15
+
16
+ extern "platform-intrinsic" {
17
+ fn simd_reduce_all < T > ( x : T ) -> bool ;
18
+ fn simd_reduce_any < T > ( x : T ) -> bool ;
19
+ }
20
+
21
+ // CHECK-LABEL: mask_reduce_all:
22
+ #[ no_mangle]
23
+ pub unsafe fn mask_reduce_all ( m : mask8x16 ) -> bool {
24
+ // CHECK: umaxv
25
+ simd_reduce_all ( m)
26
+ }
27
+
28
+ // CHECK-LABEL: mask_reduce_any:
29
+ #[ no_mangle]
30
+ pub unsafe fn mask_reduce_any ( m : mask8x16 ) -> bool {
31
+ // CHECK: umaxv
32
+ simd_reduce_any ( m)
33
+ }
Original file line number Diff line number Diff line change
1
+ // verify that simd mask reductions do not introduce additional bit shift operations
2
+
3
+ // assembly-output: emit-asm
4
+ // compile-flags: --crate-type=lib -O -C llvm-args=-x86-asm-syntax=intel
5
+ // only-x86_64
6
+
7
+ #![ feature( repr_simd, platform_intrinsics) ]
8
+ #![ allow( non_camel_case_types) ]
9
+
10
+ #[ repr( simd) ]
11
+ #[ derive( Copy , Clone ) ]
12
+ pub struct mask8x16 ( [ i8 ; 16 ] ) ;
13
+
14
+ extern "platform-intrinsic" {
15
+ fn simd_reduce_all < T > ( x : T ) -> bool ;
16
+ fn simd_reduce_any < T > ( x : T ) -> bool ;
17
+ }
18
+
19
+ // CHECK-LABEL: mask_reduce_all:
20
+ #[ no_mangle]
21
+ pub unsafe fn mask_reduce_all ( m : mask8x16 ) -> bool {
22
+ // CHECK-NOT: psllw
23
+ // CHECK: pmovmskb
24
+ simd_reduce_all ( m)
25
+ }
26
+
27
+ // CHECK-LABEL: mask_reduce_any:
28
+ #[ no_mangle]
29
+ pub unsafe fn mask_reduce_any ( m : mask8x16 ) -> bool {
30
+ // CHECK-NOT: psllw
31
+ // CHECK: pmovmskb
32
+ simd_reduce_any ( m)
33
+ }
You can’t perform that action at this time.
0 commit comments