blob: f251ee07fd56f664b850bbc75de9af94534fe3c3 [file] [log] [blame]
// RUN: %target-swift-frontend -parse-as-library -enable-spec-devirt -O -emit-sil %s | %FileCheck %s
// REQUIRES: swift_stdlib_no_asserts,optimized_stdlib,CPU=x86_64
// Test inline cache with a global class. Make sure the retain|release pair
// for the fast path is removed in the loop.
open class A
{
open func f(_ a: Int) -> Int
{
return a + 1
}
}
var x = 0
public var a = A()
public func testit() {
// CHECK-LABEL: sil @{{.*}}testityyF
// CHECK: bb0:
// CHECK-NOT: {{.*(retain|release).*}}
// CHECK: bb1{{.*}}:
// CHECK-NOT: {{.*(retain|release).*}}
// CHECK: return
// CHECK: bb2{{.*}}:
// CHECK-NOT: {{.*(retain|release|apply).*}}
// CHECK: br bb1
// CHECK: bb3{{.*}}:
// CHECK-NEXT: class_method
// CHECK-NEXT: strong_retain
// CHECK-NEXT: apply
// CHECK-NEXT: strong_release
// CHECK-NEXT: br bb1
x = a.f(x)
}