mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 09:26:11 +01:00
72800d3b89
Except for `simd-intrinsic/`, which has a lot of files containing multiple types like `u8x64` which really are better when hand-formatted. There is a surprising amount of two-space indenting in this directory. Non-trivial changes: - `rustfmt::skip` needed in `debug-column.rs` to preserve meaning of the test. - `rustfmt::skip` used in a few places where hand-formatting read more nicely: `enum/enum-match.rs` - Line number adjustments needed for the expected output of `debug-column.rs` and `coroutine-debug.rs`.
38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
//@ compile-flags: -C opt-level=3 -Z merge-functions=disabled
|
|
//@ only-x86_64
|
|
#![crate_type = "lib"]
|
|
|
|
// 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
|
|
#[no_mangle]
|
|
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
|
|
}
|
|
|
|
// CHECK-LABEL: @auto_vectorize_array_from_fn
|
|
#[no_mangle]
|
|
pub fn auto_vectorize_array_from_fn(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>
|
|
std::array::from_fn(|i| a[i] + b[i])
|
|
}
|