]> git.lizzy.rs Git - rust.git/blob - tests/codegen/simd-intrinsic/simd-intrinsic-transmute-array.rs
Rollup merge of #105172 - alexs-sh:issue-98861-fix-next, r=scottmcm
[rust.git] / tests / codegen / simd-intrinsic / simd-intrinsic-transmute-array.rs
1 //
2 // compile-flags: -C no-prepopulate-passes
3
4 #![crate_type = "lib"]
5
6 #![allow(non_camel_case_types)]
7 #![feature(repr_simd, platform_intrinsics, min_const_generics)]
8
9 #[repr(simd)]
10 #[derive(Copy, Clone)]
11 pub struct S<const N: usize>([f32; N]);
12
13 #[repr(simd)]
14 #[derive(Copy, Clone)]
15 pub struct T([f32; 4]);
16
17 #[repr(simd)]
18 #[derive(Copy, Clone)]
19 pub struct U(f32, f32, f32, f32);
20
21 // CHECK-LABEL: @build_array_s
22 #[no_mangle]
23 pub fn build_array_s(x: [f32; 4]) -> S<4> {
24     // CHECK: call void @llvm.memcpy.{{.+}}({{.*}}, i{{[0-9]+}} 16, i1 false)
25     // CHECK: call void @llvm.memcpy.{{.+}}({{.*}}, i{{[0-9]+}} 16, i1 false)
26     S::<4>(x)
27 }
28
29 // CHECK-LABEL: @build_array_t
30 #[no_mangle]
31 pub fn build_array_t(x: [f32; 4]) -> T {
32     // CHECK: call void @llvm.memcpy.{{.+}}({{.*}}, i{{[0-9]+}} 16, i1 false)
33     // CHECK: call void @llvm.memcpy.{{.+}}({{.*}}, i{{[0-9]+}} 16, i1 false)
34     T(x)
35 }
36
37 // CHECK-LABEL: @build_array_u
38 #[no_mangle]
39 pub fn build_array_u(x: [f32; 4]) -> U {
40     // CHECK: call void @llvm.memcpy.{{.+}}({{.*}}, i{{[0-9]+}} 16, i1 false)
41     // CHECK: call void @llvm.memcpy.{{.+}}({{.*}}, i{{[0-9]+}} 16, i1 false)
42     unsafe { std::mem::transmute(x) }
43 }