   for _ in 0..<(N * 100) {
     for element in mockFloat64s {
       let f = Double(identity(element))
+      blackHole(f)
+    }
+  }
+}
+
+@inline(__always)
+func convert<
+  T: BinaryFloatingPoint, U: BinaryFloatingPoint
+>(exactly value: T, to: U.Type) -> U? {
+  U(exactly: value)
+}
+
+@inline(never)
+public func run_ConvertFloatingPoint_MockFloat64Exactly(_ N: Int) {
+  for _ in 0..<(N * 100) {
+    for element in mockFloat64s {
+      let f = convert(exactly: identity(element), to: Double.self)
       blackHole(f)
     }
   }


let mockFloat64s = doubles.map { MockFloat64($0) }

@inline(__always)
func convert<
  T: BinaryFloatingPoint, U: BinaryFloatingPoint
>(_ value: T, to: U.Type) -> U {
  U(value)
}

// See also: test/SILOptimizer/floating_point_conversion.swift

@inline(never)

  BenchmarkInfo(
    name: "ConvertFloatingPoint.MockFloat64ToDouble",
    runFunction: run_ConvertFloatingPoint_MockFloat64ToDouble,
    tags: [.validation, .api],
    setUpFunction: { blackHole(mockFloat64s) }),
  BenchmarkInfo(
    name: "ConvertFloatingPoint.MockFloat64Exactly",
    runFunction: run_ConvertFloatingPoint_MockFloat64Exactly,
    tags: [.validation, .api],
    setUpFunction: { blackHole(mockFloat64s) }),
  BenchmarkInfo(
