// 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<T1>(_ 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*, %swift.type*{{.*}}, %swift.type*{{.*}} %T1)
// CHECK:   call void @swift_beginAccess
// CHECK: ret void
public func readAccess<T1>(_ 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*)
// 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)
}
