blob: d835c98a714e4bceee2a1463da847c3425a400f9 [file] [log] [blame]
// RUN: %target-swift-frontend -parse-as-library -O -emit-sil %s | %FileCheck %s
// REQUIRES: swift_stdlib_no_asserts,optimized_stdlib,CPU=x86_64
// This is an end-to-end test to ensure that the optimizer can propagate
// resilient enum cases (FloatingPointRoundingRule) and produces optimal
// code for Float.rounded().
// CHECK-LABEL: sil @{{.*}}propagate_roundingmode
// CHECK: bb0:
// CHECK-NEXT: %0 = integer_literal {{.*}}, 0
// CHECK-NEXT: %1 = struct $Int (%0 {{.*}})
// CHECK-NEXT: return %1
public func propagate_roundingmode() -> Int {
let rm = FloatingPointRoundingRule.toNearestOrEven
switch rm {
case .toNearestOrAwayFromZero:
return 1
default:
return 0
}
}
// CHECK-LABEL: sil @{{.*}}round_floating_point
// CHECK: bb0({{.*}}):
// CHECK: [[R:%[0-9]+]] = builtin "int_round{{.*}}"
// CHECK: [[F:%[0-9]+]] = struct $Float ([[R]]
// CHECK: return [[F]]
public func round_floating_point(_ x: Float) -> Float {
return x.rounded()
}