// RUN: %swift -gnone -O -target arm64-apple-ios7 -emit-assembly %s -o - | %FileCheck %s

// REQUIRES: CODEGENERATOR=AArch64

// rdar://17999904

// No i386 test right now because we don't actually have a formal pattern there.

import Builtin

class C {}

sil_vtable C {}

sil @_TFC21autorelease_optimized1Cd : $@convention(method) (@owned C) -> @owned Builtin.NativeObject {
bb0(%0 : $C):
  %1 = unchecked_ref_cast %0 : $C to $Builtin.NativeObject // user: %2
  return %1 : $Builtin.NativeObject              // id: %2
}

sil public_external @foo : $@convention(thin) (@owned C) -> @autoreleased C
sil public_external @bar : $@convention(thin) (@owned C) -> ()

sil @baz : $@convention(thin) (@owned C) -> () {
bb0(%0 : $C):
  %1 = function_ref @foo : $@convention(thin) (@owned C) -> @autoreleased C
  %2 = apply %1(%0) : $@convention(thin) (@owned C) -> @autoreleased C

  // This call is just so that we won't tail-call
  // objc_retainAutoreleasedReturnValue, which complicates the test.
  %3 = function_ref @bar : $@convention(thin) (@owned C) -> ()
  apply %3(%2) : $@convention(thin) (@owned C) -> ()
  %5 = tuple ()
  return %5 : $()
}

// CHECK:       bl _foo
// CHECK-NEXT:  ; InlineAsm Start
// CHECK-NEXT:  mov {{x29|fp}}, {{x29|fp}}
// CHECK-NEXT:  ; InlineAsm End
// CHECK-NEXT:  bl _objc_retainAutoreleasedReturnValue

