11// only-wasm32
22// compile-flags: -C target-feature=-nontrapping-fptoint
3+ // min-llvm-version: 12.0
34#![ crate_type = "lib" ]
45
56// CHECK-LABEL: @cast_f64_i64
67#[ no_mangle]
78pub fn cast_f64_i64 ( a : f64 ) -> i64 {
89 // CHECK-NOT: fptosi double {{.*}} to i64
910 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
10- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
11+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i64.f64 {{.*}}
1112 a as _
1213}
1314
@@ -16,7 +17,7 @@ pub fn cast_f64_i64(a: f64) -> i64 {
1617pub fn cast_f64_i32 ( a : f64 ) -> i32 {
1718 // CHECK-NOT: fptosi double {{.*}} to i32
1819 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
19- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
20+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i32.f64 {{.*}}
2021 a as _
2122}
2223
@@ -25,7 +26,7 @@ pub fn cast_f64_i32(a: f64) -> i32 {
2526pub fn cast_f32_i64 ( a : f32 ) -> i64 {
2627 // CHECK-NOT: fptosi float {{.*}} to i64
2728 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
28- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
29+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i64.f32 {{.*}}
2930 a as _
3031}
3132
@@ -34,7 +35,7 @@ pub fn cast_f32_i64(a: f32) -> i64 {
3435pub fn cast_f32_i32 ( a : f32 ) -> i32 {
3536 // CHECK-NOT: fptosi float {{.*}} to i32
3637 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
37- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
38+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i32.f32 {{.*}}
3839 a as _
3940}
4041
@@ -43,7 +44,7 @@ pub fn cast_f32_i32(a: f32) -> i32 {
4344pub fn cast_f64_u64 ( a : f64 ) -> u64 {
4445 // CHECK-NOT: fptoui double {{.*}} to i64
4546 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
46- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
47+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i64.f64 {{.*}}
4748 a as _
4849}
4950
@@ -52,7 +53,7 @@ pub fn cast_f64_u64(a: f64) -> u64 {
5253pub fn cast_f64_u32 ( a : f64 ) -> u32 {
5354 // CHECK-NOT: fptoui double {{.*}} to i32
5455 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
55- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
56+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i32.f64 {{.*}}
5657 a as _
5758}
5859
@@ -61,7 +62,7 @@ pub fn cast_f64_u32(a: f64) -> u32 {
6162pub fn cast_f32_u64 ( a : f32 ) -> u64 {
6263 // CHECK-NOT: fptoui float {{.*}} to i64
6364 // CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
64- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
65+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i64.f32 {{.*}}
6566 a as _
6667}
6768
@@ -70,16 +71,16 @@ pub fn cast_f32_u64(a: f32) -> u64 {
7071pub fn cast_f32_u32 ( a : f32 ) -> u32 {
7172 // CHECK-NOT: fptoui float {{.*}} to i32
7273 // CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
73- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
74+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i32.f32 {{.*}}
7475 a as _
7576}
7677
7778// CHECK-LABEL: @cast_f32_u8
7879#[ no_mangle]
7980pub fn cast_f32_u8 ( a : f32 ) -> u8 {
80- // CHECK-NOT: {{.*}} call {{.*}} @llvm.wasm.trunc.{{.*}}
81- // CHECK: fptoui float {{.*}} to i8
82- // CHECK-NEXT: select i1 {{.*}}, i8 {{.*}}, i8 {{.*}}
81+ // CHECK-NOT: fptoui float {{.*}} to i8
82+ // CHECK-NOT: select i1 {{.*}}, i8 {{.*}}, i8 {{.*}}
83+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i8.f32 {{.*}}
8384 a as _
8485}
8586
0 commit comments