2 // compile-flags: -C target-feature=-nontrapping-fptoint
5 // CHECK-LABEL: @cast_f64_i64
7 pub fn cast_f64_i64(a: f64) -> i64 {
8 // CHECK-NOT: fptosi double {{.*}} to i64
9 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
10 // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i64.f64{{.*}}
14 // CHECK-LABEL: @cast_f64_i32
16 pub fn cast_f64_i32(a: f64) -> i32 {
17 // CHECK-NOT: fptosi double {{.*}} to i32
18 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
19 // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i32.f64{{.*}}
23 // CHECK-LABEL: @cast_f32_i64
25 pub fn cast_f32_i64(a: f32) -> i64 {
26 // CHECK-NOT: fptosi float {{.*}} to i64
27 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
28 // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i64.f32{{.*}}
32 // CHECK-LABEL: @cast_f32_i32
34 pub fn cast_f32_i32(a: f32) -> i32 {
35 // CHECK-NOT: fptosi float {{.*}} to i32
36 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
37 // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i32.f32{{.*}}
41 // CHECK-LABEL: @cast_f64_u64
43 pub fn cast_f64_u64(a: f64) -> u64 {
44 // CHECK-NOT: fptoui double {{.*}} to i64
45 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
46 // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i64.f64{{.*}}
50 // CHECK-LABEL: @cast_f64_u32
52 pub fn cast_f64_u32(a: f64) -> u32 {
53 // CHECK-NOT: fptoui double {{.*}} to i32
54 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
55 // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i32.f64{{.*}}
59 // CHECK-LABEL: @cast_f32_u64
61 pub fn cast_f32_u64(a: f32) -> u64 {
62 // CHECK-NOT: fptoui float {{.*}} to i64
63 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
64 // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i64.f32{{.*}}
68 // CHECK-LABEL: @cast_f32_u32
70 pub fn cast_f32_u32(a: f32) -> u32 {
71 // CHECK-NOT: fptoui float {{.*}} to i32
72 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
73 // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i32.f32{{.*}}
77 // CHECK-LABEL: @cast_f32_u8
79 pub fn cast_f32_u8(a: f32) -> u8 {
80 // CHECK-NOT: fptoui float {{.*}} to i8
81 // CHECK-NOT: select i1 {{.*}}, i8 {{.*}}, i8 {{.*}}
82 // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i8.f32{{.*}}
86 // CHECK-LABEL: @cast_unchecked_f64_i64
88 pub unsafe fn cast_unchecked_f64_i64(a: f64) -> i64 {
89 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.signed.{{.*}}
90 // CHECK-NEXT: ret i64 {{.*}}
94 // CHECK-LABEL: @cast_unchecked_f64_i32
96 pub unsafe fn cast_unchecked_f64_i32(a: f64) -> i32 {
97 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.signed.{{.*}}
98 // CHECK-NEXT: ret i32 {{.*}}
102 // CHECK-LABEL: @cast_unchecked_f32_i64
104 pub unsafe fn cast_unchecked_f32_i64(a: f32) -> i64 {
105 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.signed.{{.*}}
106 // CHECK-NEXT: ret i64 {{.*}}
110 // CHECK-LABEL: @cast_unchecked_f32_i32
112 pub unsafe fn cast_unchecked_f32_i32(a: f32) -> i32 {
113 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.signed.{{.*}}
114 // CHECK-NEXT: ret i32 {{.*}}
118 // CHECK-LABEL: @cast_unchecked_f64_u64
120 pub unsafe fn cast_unchecked_f64_u64(a: f64) -> u64 {
121 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.unsigned.{{.*}}
122 // CHECK-NEXT: ret i64 {{.*}}
126 // CHECK-LABEL: @cast_unchecked_f64_u32
128 pub unsafe fn cast_unchecked_f64_u32(a: f64) -> u32 {
129 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.unsigned.{{.*}}
130 // CHECK-NEXT: ret i32 {{.*}}
134 // CHECK-LABEL: @cast_unchecked_f32_u64
136 pub unsafe fn cast_unchecked_f32_u64(a: f32) -> u64 {
137 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.unsigned.{{.*}}
138 // CHECK-NEXT: ret i64 {{.*}}
142 // CHECK-LABEL: @cast_unchecked_f32_u32
144 pub unsafe fn cast_unchecked_f32_u32(a: f32) -> u32 {
145 // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc.unsigned.{{.*}}
146 // CHECK-NEXT: ret i32 {{.*}}
150 // CHECK-LABEL: @cast_unchecked_f32_u8
152 pub unsafe fn cast_unchecked_f32_u8(a: f32) -> u8 {
153 // CHECK-NOT: {{.*}} call {{.*}} @llvm.wasm.trunc.{{.*}}
154 // CHECK: fptoui float {{.*}} to i8
155 // CHECK-NEXT: ret i8 {{.*}}