• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // compile-flags: -C opt-level=3 -Z merge-functions=disabled
2 // only-x86_64
3 #![crate_type = "lib"]
4 
5 // CHECK-LABEL: @auto_vectorize_direct
6 #[no_mangle]
auto_vectorize_direct(a: [f32; 4], b: [f32; 4]) -> [f32; 4]7 pub fn auto_vectorize_direct(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
8 // CHECK: load <4 x float>
9 // CHECK: load <4 x float>
10 // CHECK: fadd <4 x float>
11 // CHECK: store <4 x float>
12     [
13         a[0] + b[0],
14         a[1] + b[1],
15         a[2] + b[2],
16         a[3] + b[3],
17     ]
18 }
19 
20 // CHECK-LABEL: @auto_vectorize_loop
21 #[no_mangle]
auto_vectorize_loop(a: [f32; 4], b: [f32; 4]) -> [f32; 4]22 pub fn auto_vectorize_loop(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
23 // CHECK: load <4 x float>
24 // CHECK: load <4 x float>
25 // CHECK: fadd <4 x float>
26 // CHECK: store <4 x float>
27     let mut c = [0.0; 4];
28     for i in 0..4 {
29         c[i] = a[i] + b[i];
30     }
31     c
32 }
33 
34 // CHECK-LABEL: @auto_vectorize_array_from_fn
35 #[no_mangle]
auto_vectorize_array_from_fn(a: [f32; 4], b: [f32; 4]) -> [f32; 4]36 pub fn auto_vectorize_array_from_fn(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
37 // CHECK: load <4 x float>
38 // CHECK: load <4 x float>
39 // CHECK: fadd <4 x float>
40 // CHECK: store <4 x float>
41     std::array::from_fn(|i| a[i] + b[i])
42 }
43