1 // compile-flags: -C no-prepopulate-passes
5 #![feature(repr_simd, platform_intrinsics)]
6 #![allow(non_camel_case_types)]
9 #[derive(Copy, Clone, PartialEq, Debug)]
10 pub struct f32x2(pub f32, pub f32);
13 #[derive(Copy, Clone, PartialEq, Debug)]
14 pub struct f32x4(pub f32, pub f32, pub f32, pub f32);
17 #[derive(Copy, Clone, PartialEq, Debug)]
18 pub struct f32x8(pub f32, pub f32, pub f32, pub f32,
19 pub f32, pub f32, pub f32, pub f32);
22 #[derive(Copy, Clone, PartialEq, Debug)]
23 pub struct f32x16(pub f32, pub f32, pub f32, pub f32,
24 pub f32, pub f32, pub f32, pub f32,
25 pub f32, pub f32, pub f32, pub f32,
26 pub f32, pub f32, pub f32, pub f32);
28 extern "platform-intrinsic" {
29 fn simd_ceil<T>(x: T) -> T;
32 // CHECK-LABEL: @ceil_32x2
34 pub unsafe fn ceil_32x2(a: f32x2) -> f32x2 {
35 // CHECK: call <2 x float> @llvm.ceil.v2f32
39 // CHECK-LABEL: @ceil_32x4
41 pub unsafe fn ceil_32x4(a: f32x4) -> f32x4 {
42 // CHECK: call <4 x float> @llvm.ceil.v4f32
46 // CHECK-LABEL: @ceil_32x8
48 pub unsafe fn ceil_32x8(a: f32x8) -> f32x8 {
49 // CHECK: call <8 x float> @llvm.ceil.v8f32
53 // CHECK-LABEL: @ceil_32x16
55 pub unsafe fn ceil_32x16(a: f32x16) -> f32x16 {
56 // CHECK: call <16 x float> @llvm.ceil.v16f32
61 #[derive(Copy, Clone, PartialEq, Debug)]
62 pub struct f64x2(pub f64, pub f64);
65 #[derive(Copy, Clone, PartialEq, Debug)]
66 pub struct f64x4(pub f64, pub f64, pub f64, pub f64);
69 #[derive(Copy, Clone, PartialEq, Debug)]
70 pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
71 pub f64, pub f64, pub f64, pub f64);
73 // CHECK-LABEL: @ceil_64x4
75 pub unsafe fn ceil_64x4(a: f64x4) -> f64x4 {
76 // CHECK: call <4 x double> @llvm.ceil.v4f64
80 // CHECK-LABEL: @ceil_64x2
82 pub unsafe fn ceil_64x2(a: f64x2) -> f64x2 {
83 // CHECK: call <2 x double> @llvm.ceil.v2f64
87 // CHECK-LABEL: @ceil_64x8
89 pub unsafe fn ceil_64x8(a: f64x8) -> f64x8 {
90 // CHECK: call <8 x double> @llvm.ceil.v8f64