2023-02-04 18:33:37 -06:00
|
|
|
// compile-flags: -C opt-level=3 -Z merge-functions=disabled
|
2022-03-03 01:02:03 -06:00
|
|
|
// only-x86_64
|
|
|
|
#![crate_type = "lib"]
|
2023-02-04 18:33:37 -06:00
|
|
|
#![feature(array_zip)]
|
2022-03-03 01:02:03 -06:00
|
|
|
|
|
|
|
// CHECK-LABEL: @auto_vectorize_direct
|
|
|
|
#[no_mangle]
|
|
|
|
pub fn auto_vectorize_direct(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
|
|
|
|
// CHECK: load <4 x float>
|
|
|
|
// CHECK: load <4 x float>
|
|
|
|
// CHECK: fadd <4 x float>
|
|
|
|
// CHECK: store <4 x float>
|
|
|
|
[
|
|
|
|
a[0] + b[0],
|
|
|
|
a[1] + b[1],
|
|
|
|
a[2] + b[2],
|
|
|
|
a[3] + b[3],
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
// CHECK-LABEL: @auto_vectorize_loop
|
2022-03-03 13:52:45 -06:00
|
|
|
#[no_mangle]
|
2022-03-03 01:02:03 -06:00
|
|
|
pub fn auto_vectorize_loop(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
|
|
|
|
// CHECK: load <4 x float>
|
|
|
|
// CHECK: load <4 x float>
|
|
|
|
// CHECK: fadd <4 x float>
|
|
|
|
// CHECK: store <4 x float>
|
|
|
|
let mut c = [0.0; 4];
|
|
|
|
for i in 0..4 {
|
|
|
|
c[i] = a[i] + b[i];
|
|
|
|
}
|
|
|
|
c
|
|
|
|
}
|
2023-02-04 18:33:37 -06:00
|
|
|
|
|
|
|
// CHECK-LABEL: @auto_vectorize_array_zip_map
|
|
|
|
#[no_mangle]
|
|
|
|
pub fn auto_vectorize_array_zip_map(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
|
|
|
|
// CHECK: load <4 x float>
|
|
|
|
// CHECK: load <4 x float>
|
|
|
|
// CHECK: fadd <4 x float>
|
|
|
|
// CHECK: store <4 x float>
|
|
|
|
a.zip(b).map(|(a, b)| a + b)
|
|
|
|
}
|