@@ -18,6 +18,11 @@ public let FloatingPointConversion = [
18
18
runFunction: run_ConvertFloatingPoint_MockFloat64ToDouble,
19
19
tags: [ . validation, . api] ,
20
20
setUpFunction: { blackHole ( mockFloat64s) } ) ,
21
+ BenchmarkInfo (
22
+ name: " ConvertFloatingPoint.MockFloat64Exactly " ,
23
+ runFunction: run_ConvertFloatingPoint_MockFloat64Exactly,
24
+ tags: [ . validation, . api] ,
25
+ setUpFunction: { blackHole ( mockFloat64s) } ) ,
21
26
BenchmarkInfo (
22
27
name: " ConvertFloatingPoint.MockFloat64ToInt64 " ,
23
28
runFunction: run_ConvertFloatingPoint_MockFloat64ToInt64,
@@ -147,20 +152,30 @@ let doubles = [
147
152
148
153
let mockFloat64s = doubles. map { MockFloat64 ( $0) }
149
154
155
+ // See also: test/SILOptimizer/floating_point_conversion.swift
156
+
157
+ @inline ( never)
158
+ public func run_ConvertFloatingPoint_MockFloat64ToDouble( _ N: Int ) {
159
+ for _ in 0 ..< ( N * 100 ) {
160
+ for element in mockFloat64s {
161
+ let f = Double ( identity ( element) )
162
+ blackHole ( f)
163
+ }
164
+ }
165
+ }
166
+
150
167
@inline ( __always)
151
168
func convert<
152
169
T: BinaryFloatingPoint , U: BinaryFloatingPoint
153
- > ( _ value: T , to: U . Type ) -> U {
154
- U ( value)
170
+ > ( exactly value: T , to: U . Type ) -> U ? {
171
+ U ( exactly : value)
155
172
}
156
173
157
- // See also: test/SILOptimizer/floating_point_conversion.swift
158
-
159
174
@inline ( never)
160
- public func run_ConvertFloatingPoint_MockFloat64ToDouble ( _ N: Int ) {
175
+ public func run_ConvertFloatingPoint_MockFloat64Exactly ( _ N: Int ) {
161
176
for _ in 0 ..< ( N * 100 ) {
162
177
for element in mockFloat64s {
163
- let f = Double ( identity ( element) )
178
+ let f = convert ( exactly : identity ( element) , to : Double . self )
164
179
blackHole ( f)
165
180
}
166
181
}
0 commit comments