@@ -18,6 +18,16 @@ 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) } ) ,
26
+ BenchmarkInfo (
27
+ name: " ConvertFloatingPoint.MockFloat64Exactly2 " ,
28
+ runFunction: run_ConvertFloatingPoint_MockFloat64Exactly2,
29
+ tags: [ . validation, . api] ,
30
+ setUpFunction: { blackHole ( mockFloat64s) } ) ,
21
31
BenchmarkInfo (
22
32
name: " ConvertFloatingPoint.MockFloat64ToInt64 " ,
23
33
runFunction: run_ConvertFloatingPoint_MockFloat64ToInt64,
@@ -130,6 +140,11 @@ struct MockFloat64: MockBinaryFloatingPoint {
130
140
init ( _ _value: Double ) { self . _value = _value }
131
141
}
132
142
143
+ struct MockFloat32 : MockBinaryFloatingPoint {
144
+ var _value : Float
145
+ init ( _ _value: Float ) { self . _value = _value }
146
+ }
147
+
133
148
let doubles = [
134
149
1.8547832857295 , 26.321549267719135 , 98.9544480962058 , 73.70286973782363 ,
135
150
82.04918555938816 , 76.38902969312758 , 46.35647857011161 , 64.0821426030317 ,
@@ -147,20 +162,40 @@ let doubles = [
147
162
148
163
let mockFloat64s = doubles. map { MockFloat64 ( $0) }
149
164
165
+ // See also: test/SILOptimizer/floating_point_conversion.swift
166
+
167
+ @inline ( never)
168
+ public func run_ConvertFloatingPoint_MockFloat64ToDouble( _ N: Int ) {
169
+ for _ in 0 ..< ( N * 100 ) {
170
+ for element in mockFloat64s {
171
+ let f = Double ( identity ( element) )
172
+ blackHole ( f)
173
+ }
174
+ }
175
+ }
176
+
150
177
@inline ( __always)
151
178
func convert<
152
179
T: BinaryFloatingPoint , U: BinaryFloatingPoint
153
- > ( _ value: T , to: U . Type ) -> U {
154
- U ( value)
180
+ > ( exactly value: T , to: U . Type ) -> U ? {
181
+ U ( exactly : value)
155
182
}
156
183
157
- // See also: test/SILOptimizer/floating_point_conversion.swift
184
+ @inline ( never)
185
+ public func run_ConvertFloatingPoint_MockFloat64Exactly( _ N: Int ) {
186
+ for _ in 0 ..< ( N * 25 ) {
187
+ for element in mockFloat64s {
188
+ let f = convert ( exactly: identity ( element) , to: Double . self)
189
+ blackHole ( f)
190
+ }
191
+ }
192
+ }
158
193
159
194
@inline ( never)
160
- public func run_ConvertFloatingPoint_MockFloat64ToDouble ( _ N: Int ) {
161
- for _ in 0 ..< ( N * 100 ) {
195
+ public func run_ConvertFloatingPoint_MockFloat64Exactly2 ( _ N: Int ) {
196
+ for _ in 0 ..< ( N * 25 ) {
162
197
for element in mockFloat64s {
163
- let f = Double ( identity ( element) )
198
+ let f = convert ( exactly : identity ( element) , to : MockFloat32 . self )
164
199
blackHole ( f)
165
200
}
166
201
}
0 commit comments