| # RUN: llc -o - -run-pass=x86-pseudo -verify-machineinstrs %s | FileCheck %s |
| |
| --- | |
| target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-apple-macosx11.0.0" |
| |
| declare i8* @objc_retainAutoreleasedReturnValue(i8*) |
| declare i8* @objc_unsafeClaimAutoreleasedReturnValue(i8*) |
| declare i8* @fn() |
| |
| define void @test_objc_retainAutoreleaseReturnedValue() { |
| ret void |
| } |
| |
| define void @test_objc_unsafeClaimAutoreleasedReturnValue() { |
| ret void |
| } |
| |
| define void @test_objc_unsafeClaimAutoreleasedReturnValue_2_args() { |
| ret void |
| } |
| |
| define void @test_ret_void() { |
| ret void |
| } |
| |
| ... |
| --- |
| # CHECK-LABEL: name: test_objc_retainAutoreleaseReturnedValue |
| # CHECK: bb.0 |
| # CHECK-NEXT: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: CFI_INSTRUCTION def_cfa_offset 16 |
| # CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax |
| # CHECK-NEXT: $rdi = MOV64rr $rax |
| # CHECK-NEXT: CALL64pcrel32 @objc_retainAutoreleasedReturnValue, csr_64, implicit $rsp, implicit $ssp, implicit-def $rax |
| # CHECK-NEXT: $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: RET64 |
| # |
| |
| name: test_objc_retainAutoreleaseReturnedValue |
| alignment: 16 |
| tracksRegLiveness: true |
| frameInfo: |
| stackSize: 8 |
| offsetAdjustment: -8 |
| maxAlignment: 1 |
| adjustsStack: true |
| hasCalls: true |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| bb.0 (%ir-block.0): |
| frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| CFI_INSTRUCTION def_cfa_offset 16 |
| CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax |
| $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| RET 0, $rax |
| |
| ... |
| --- |
| # CHECK-LABEL: name: test_objc_unsafeClaimAutoreleasedReturnValue |
| # CHECK: bb.0 |
| # CHECK-NEXT: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: CFI_INSTRUCTION def_cfa_offset 16 |
| # CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax |
| # CHECK-NEXT: $rdi = MOV64rr $rax |
| # CHECK-NEXT: CALL64pcrel32 @objc_unsafeClaimAutoreleasedReturnValue, csr_64, implicit $rsp, implicit $ssp, implicit-def $rax |
| # CHECK-NEXT: $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: RET64 |
| # |
| name: test_objc_unsafeClaimAutoreleasedReturnValue |
| alignment: 16 |
| tracksRegLiveness: true |
| frameInfo: |
| stackSize: 8 |
| offsetAdjustment: -8 |
| maxAlignment: 1 |
| adjustsStack: true |
| hasCalls: true |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| bb.0 (%ir-block.0): |
| frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| CFI_INSTRUCTION def_cfa_offset 16 |
| CALL64pcrel32_RVMARKER @objc_unsafeClaimAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax |
| $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| RET 0, $rax |
| |
| ... |
| --- |
| # CHECK-LABEL: name: test_objc_unsafeClaimAutoreleasedReturnValue_2_args |
| # CHECK: bb.0 |
| # CHECK: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: $rax = MOV64rr $rdi |
| # CHECK-NEXT: $rdi = MOV64rr killed $rdx |
| # CHECK-NEXT: $rdx = MOV64rr killed $rax |
| # CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rdi, implicit $rsi, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax |
| # CHECK-NEXT: $rdi = MOV64rr $rax |
| # CHECK-NEXT: CALL64pcrel32 @objc_retainAutoreleasedReturnValue, csr_64, implicit $rsp, implicit $ssp, implicit-def dead $rax |
| # CHECK-NEXT: $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: RET64 |
| # |
| name: test_objc_unsafeClaimAutoreleasedReturnValue_2_args |
| alignment: 16 |
| tracksRegLiveness: true |
| frameInfo: |
| stackSize: 8 |
| offsetAdjustment: -8 |
| maxAlignment: 1 |
| adjustsStack: true |
| hasCalls: true |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| bb.0 (%ir-block.0): |
| liveins: $rdi, $rdx, $rsi |
| |
| frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| $rax = MOV64rr $rdi |
| $rdi = MOV64rr killed $rdx |
| $rdx = MOV64rr killed $rax |
| CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit $rsi, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax |
| $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| RET 0, $rax |
| |
| ... |
| # CHECK-LABEL: name: test_ret_void |
| # CHECK: bb.0 |
| # CHECK-NEXT: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: CFI_INSTRUCTION def_cfa_offset 16 |
| # CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax |
| # CHECK-NEXT: $rdi = MOV64rr $rax |
| # CHECK-NEXT: CALL64pcrel32 @objc_retainAutoreleasedReturnValue, csr_64, implicit $rsp, implicit $ssp, implicit-def dead $rax |
| # CHECK-NEXT: $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| # CHECK-NEXT: RET64 |
| # |
| name: test_ret_void |
| alignment: 16 |
| tracksRegLiveness: true |
| frameInfo: |
| stackSize: 8 |
| offsetAdjustment: -8 |
| maxAlignment: 1 |
| adjustsStack: true |
| hasCalls: true |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| bb.0 (%ir-block.0): |
| frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp |
| CFI_INSTRUCTION def_cfa_offset 16 |
| CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax |
| $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp |
| RET 0 |