| // 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 : @owned $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 : @owned $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 |
| |