33 lines
954 B
Rust
33 lines
954 B
Rust
//@ compile-flags: -Copt-level=3
|
|
#![crate_type = "lib"]
|
|
#![no_std]
|
|
#![feature(repr_simd, core_intrinsics)]
|
|
use core::intrinsics::simd::simd_splat;
|
|
|
|
#[path = "../../auxiliary/minisimd.rs"]
|
|
mod minisimd;
|
|
use minisimd::*;
|
|
|
|
// Test that `simd_splat` produces the canonical LLVM splat sequence.
|
|
|
|
#[no_mangle]
|
|
unsafe fn int(x: u16) -> u16x2 {
|
|
// CHECK-LABEL: int
|
|
// CHECK: start:
|
|
// CHECK-NEXT: %0 = insertelement <2 x i16> poison, i16 %x, i64 0
|
|
// CHECK-NEXT: %1 = shufflevector <2 x i16> %0, <2 x i16> poison, <2 x i32> zeroinitializer
|
|
// CHECK-NEXT: store
|
|
// CHECK-NEXT: ret
|
|
simd_splat(x)
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe fn float(x: f32) -> f32x4 {
|
|
// CHECK-LABEL: float
|
|
// CHECK: start:
|
|
// CHECK-NEXT: %0 = insertelement <4 x float> poison, float %x, i64 0
|
|
// CHECK-NEXT: %1 = shufflevector <4 x float> %0, <4 x float> poison, <4 x i32> zeroinitializer
|
|
// CHECK-NEXT: store
|
|
// CHECK-NEXT: ret
|
|
simd_splat(x)
|
|
}
|