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

// REQUIRES: CODEGENERATOR=ARM

// 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 {{r7|fp}}, {{r7|fp}}
// sometimes:   .code 32
// CHECK:       @ InlineAsm End
// CHECK-NEXT:  bl _objc_retainAutoreleasedReturnValue
