Fix is_val_statically_known
for floats · rust-lang/rust@9bc7cea (original) (raw)
1
1
`//@ compile-flags: --crate-type=lib -Zmerge-functions=disabled -O
`
2
2
``
3
3
`#![feature(core_intrinsics)]
`
``
4
`+
#![feature(f16, f128)]
`
4
5
``
5
6
`use std::intrinsics::is_val_statically_known;
`
6
7
``
`@@ -49,7 +50,7 @@ pub fn _bool_false(b: bool) -> i32 {
`
49
50
``
50
51
`#[inline]
`
51
52
`pub fn _iref(a: &u8) -> i32 {
`
52
``
`-
if unsafe { is_val_statically_known(a) } { 5 } else { 4 }
`
``
53
`+
if is_val_statically_known(a) { 5 } else { 4 }
`
53
54
`}
`
54
55
``
55
56
`// CHECK-LABEL: @_iref_borrow(
`
`@@ -68,7 +69,7 @@ pub fn _iref_arg(a: &u8) -> i32 {
`
68
69
``
69
70
`#[inline]
`
70
71
`pub fn _slice_ref(a: &[u8]) -> i32 {
`
71
``
`-
if unsafe { is_val_statically_known(a) } { 7 } else { 6 }
`
``
72
`+
if is_val_statically_known(a) { 7 } else { 6 }
`
72
73
`}
`
73
74
``
74
75
`// CHECK-LABEL: @_slice_ref_borrow(
`
`@@ -84,3 +85,79 @@ pub fn _slice_ref_arg(a: &[u8]) -> i32 {
`
84
85
`// CHECK: ret i32 6
`
85
86
`_slice_ref(a)
`
86
87
`}
`
``
88
+
``
89
`+
#[inline]
`
``
90
`+
pub fn _f16(a: f16) -> i32 {
`
``
91
`+
if is_val_statically_known(a) { 1 } else { 0 }
`
``
92
`+
}
`
``
93
+
``
94
`+
// CHECK-LABEL: @_f16_true(
`
``
95
`+
#[no_mangle]
`
``
96
`+
pub fn _f16_true() -> i32 {
`
``
97
`+
// CHECK: ret i32 1
`
``
98
`+
_f16(1.0)
`
``
99
`+
}
`
``
100
+
``
101
`+
// CHECK-LABEL: @_f16_false(
`
``
102
`+
#[no_mangle]
`
``
103
`+
pub fn _f16_false(a: f16) -> i32 {
`
``
104
`+
// CHECK: ret i32 0
`
``
105
`+
_f16(a)
`
``
106
`+
}
`
``
107
+
``
108
`+
#[inline]
`
``
109
`+
pub fn _f32(a: f32) -> i32 {
`
``
110
`+
if is_val_statically_known(a) { 1 } else { 0 }
`
``
111
`+
}
`
``
112
+
``
113
`+
// CHECK-LABEL: @_f32_true(
`
``
114
`+
#[no_mangle]
`
``
115
`+
pub fn _f32_true() -> i32 {
`
``
116
`+
// CHECK: ret i32 1
`
``
117
`+
_f32(1.0)
`
``
118
`+
}
`
``
119
+
``
120
`+
// CHECK-LABEL: @_f32_false(
`
``
121
`+
#[no_mangle]
`
``
122
`+
pub fn _f32_false(a: f32) -> i32 {
`
``
123
`+
// CHECK: ret i32 0
`
``
124
`+
_f32(a)
`
``
125
`+
}
`
``
126
+
``
127
`+
#[inline]
`
``
128
`+
pub fn _f64(a: f64) -> i32 {
`
``
129
`+
if is_val_statically_known(a) { 1 } else { 0 }
`
``
130
`+
}
`
``
131
+
``
132
`+
// CHECK-LABEL: @_f64_true(
`
``
133
`+
#[no_mangle]
`
``
134
`+
pub fn _f64_true() -> i32 {
`
``
135
`+
// CHECK: ret i32 1
`
``
136
`+
_f64(1.0)
`
``
137
`+
}
`
``
138
+
``
139
`+
// CHECK-LABEL: @_f64_false(
`
``
140
`+
#[no_mangle]
`
``
141
`+
pub fn _f64_false(a: f64) -> i32 {
`
``
142
`+
// CHECK: ret i32 0
`
``
143
`+
_f64(a)
`
``
144
`+
}
`
``
145
+
``
146
`+
#[inline]
`
``
147
`+
pub fn _f128(a: f128) -> i32 {
`
``
148
`+
if is_val_statically_known(a) { 1 } else { 0 }
`
``
149
`+
}
`
``
150
+
``
151
`+
// CHECK-LABEL: @_f128_true(
`
``
152
`+
#[no_mangle]
`
``
153
`+
pub fn _f128_true() -> i32 {
`
``
154
`+
// CHECK: ret i32 1
`
``
155
`+
_f128(1.0)
`
``
156
`+
}
`
``
157
+
``
158
`+
// CHECK-LABEL: @_f128_false(
`
``
159
`+
#[no_mangle]
`
``
160
`+
pub fn _f128_false(a: f128) -> i32 {
`
``
161
`+
// CHECK: ret i32 0
`
``
162
`+
_f128(a)
`
``
163
`+
}
`