1
1
// only-wasm32
2
2
// compile-flags: -C target-feature=-nontrapping-fptoint
3
+ // min-llvm-version: 12.0
3
4
#![ crate_type = "lib" ]
4
5
5
6
// CHECK-LABEL: @cast_f64_i64
6
7
#[ no_mangle]
7
8
pub fn cast_f64_i64 ( a : f64 ) -> i64 {
8
9
// CHECK-NOT: fptosi double {{.*}} to i64
9
10
// CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
10
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
11
+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i64.f64 {{.*}}
11
12
a as _
12
13
}
13
14
@@ -16,7 +17,7 @@ pub fn cast_f64_i64(a: f64) -> i64 {
16
17
pub fn cast_f64_i32 ( a : f64 ) -> i32 {
17
18
// CHECK-NOT: fptosi double {{.*}} to i32
18
19
// CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
19
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
20
+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i32.f64 {{.*}}
20
21
a as _
21
22
}
22
23
@@ -25,7 +26,7 @@ pub fn cast_f64_i32(a: f64) -> i32 {
25
26
pub fn cast_f32_i64 ( a : f32 ) -> i64 {
26
27
// CHECK-NOT: fptosi float {{.*}} to i64
27
28
// CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
28
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
29
+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i64.f32 {{.*}}
29
30
a as _
30
31
}
31
32
@@ -34,7 +35,7 @@ pub fn cast_f32_i64(a: f32) -> i64 {
34
35
pub fn cast_f32_i32 ( a : f32 ) -> i32 {
35
36
// CHECK-NOT: fptosi float {{.*}} to i32
36
37
// CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
37
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
38
+ // CHECK: {{.*}} call {{.*}} @llvm.fptosi.sat.i32.f32 {{.*}}
38
39
a as _
39
40
}
40
41
@@ -43,7 +44,7 @@ pub fn cast_f32_i32(a: f32) -> i32 {
43
44
pub fn cast_f64_u64 ( a : f64 ) -> u64 {
44
45
// CHECK-NOT: fptoui double {{.*}} to i64
45
46
// CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
46
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
47
+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i64.f64 {{.*}}
47
48
a as _
48
49
}
49
50
@@ -52,7 +53,7 @@ pub fn cast_f64_u64(a: f64) -> u64 {
52
53
pub fn cast_f64_u32 ( a : f64 ) -> u32 {
53
54
// CHECK-NOT: fptoui double {{.*}} to i32
54
55
// CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
55
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
56
+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i32.f64 {{.*}}
56
57
a as _
57
58
}
58
59
@@ -61,7 +62,7 @@ pub fn cast_f64_u32(a: f64) -> u32 {
61
62
pub fn cast_f32_u64 ( a : f32 ) -> u64 {
62
63
// CHECK-NOT: fptoui float {{.*}} to i64
63
64
// CHECK-NOT: select i1 {{.*}}, i64 {{.*}}, i64 {{.*}}
64
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
65
+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i64.f32 {{.*}}
65
66
a as _
66
67
}
67
68
@@ -70,16 +71,16 @@ pub fn cast_f32_u64(a: f32) -> u64 {
70
71
pub fn cast_f32_u32 ( a : f32 ) -> u32 {
71
72
// CHECK-NOT: fptoui float {{.*}} to i32
72
73
// CHECK-NOT: select i1 {{.*}}, i32 {{.*}}, i32 {{.*}}
73
- // CHECK: {{.*}} call {{.*}} @llvm.wasm.trunc. {{.*}}
74
+ // CHECK: {{.*}} call {{.*}} @llvm.fptoui.sat.i32.f32 {{.*}}
74
75
a as _
75
76
}
76
77
77
78
// CHECK-LABEL: @cast_f32_u8
78
79
#[ no_mangle]
79
80
pub 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 {{.*}}
83
84
a as _
84
85
}
85
86
0 commit comments