// RUN: %target-swift-frontend -swift-version 4 -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s | %FileCheck %s // // Check that the -O pipeline always preserves the runtime calls for Builtin access markers and that the KeyPath implementation is fully inlined. @_silgen_name("marker1") func marker1() -> () @_silgen_name("marker2") func marker2() -> () @_silgen_name("marker3") func marker3() -> () // IR-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity11beginAccessyyBp_BpxmtlF"(i8*, i8*, %swift.type*{{.*}}, %swift.type*{{.*}} %T1) // IR: call void @swift_beginAccess // IR-NEXT: ret void public func beginAccess(_ address: Builtin.RawPointer, _ scratch: Builtin.RawPointer, _ ty1: T1.Type) { marker1() Builtin.beginUnpairedModifyAccess(address, scratch, ty1); } // CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity9endAccessyyBpF"(i8*{{.*}}) // CHECK: call void @swift_endAccess // CHECK-NEXT: ret void public func endAccess(_ address: Builtin.RawPointer) { marker2() Builtin.endUnpairedAccess(address) } // CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity10readAccessyyBp_xmtlF"(i8* %0, %swift.type*{{.*}}, %swift.type*{{.*}} %T1) // CHECK: call void @swift_beginAccess // CHECK: ret void public func readAccess(_ address: Builtin.RawPointer, _ ty1: T1.Type) { marker3() Builtin.performInstantaneousReadAccess(address, ty1); } // Make sure testAccess properly inlines in our functions. // // CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity10testAccessyyBpF"(i8* %0) // CHECK: call swiftcc void @marker1 // CHECK: call void @swift_beginAccess // CHECK: call swiftcc void @marker2 // CHECK: call void @swift_endAccess // CHECK: call swiftcc void @marker3 // CHECK: call void @swift_beginAccess // CHECK: ret void public func testAccess(_ k1: Builtin.RawPointer) { beginAccess(k1, k1, Builtin.RawPointer.self) endAccess(k1) readAccess(k1, Builtin.RawPointer.self) }