1# RUN: llc -o - -run-pass=x86-pseudo -verify-machineinstrs %s | FileCheck %s 2 3--- | 4 target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 5 target triple = "x86_64-apple-macosx11.0.0" 6 7 declare ptr @objc_retainAutoreleasedReturnValue(ptr) 8 declare ptr @objc_unsafeClaimAutoreleasedReturnValue(ptr) 9 declare ptr @fn() 10 11 define void @test_objc_retainAutoreleaseReturnedValue() { 12 ret void 13 } 14 15 define void @test_objc_unsafeClaimAutoreleasedReturnValue() { 16 ret void 17 } 18 19 define void @test_objc_unsafeClaimAutoreleasedReturnValue_2_args() { 20 ret void 21 } 22 23 define void @test_ret_void() { 24 ret void 25 } 26 27... 28--- 29# CHECK-LABEL: name: test_objc_retainAutoreleaseReturnedValue 30# CHECK: bb.0 31# CHECK-NEXT: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 32# CHECK-NEXT: CFI_INSTRUCTION def_cfa_offset 16 33# CHECK-NEXT: BUNDLE 34# CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 35# CHECK-NEXT: $rdi = MOV64rr internal $rax 36# CHECK-NEXT: CALL64pcrel32 @objc_retainAutoreleasedReturnValue, csr_64, implicit internal $rsp, implicit internal $ssp, implicit-def $rax 37# CHECK-NEXT: } 38# CHECK-NEXT: $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp 39# CHECK-NEXT: RET64 40# 41 42name: test_objc_retainAutoreleaseReturnedValue 43alignment: 16 44tracksRegLiveness: true 45frameInfo: 46 stackSize: 8 47 offsetAdjustment: -8 48 maxAlignment: 1 49 adjustsStack: true 50 hasCalls: true 51 maxCallFrameSize: 0 52machineFunctionInfo: {} 53body: | 54 bb.0 (%ir-block.0): 55 frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 56 CFI_INSTRUCTION def_cfa_offset 16 57 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 58 $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp 59 RET 0, $rax 60 61... 62--- 63# CHECK-LABEL: name: test_objc_unsafeClaimAutoreleasedReturnValue 64# CHECK: bb.0 65# CHECK-NEXT: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 66# CHECK-NEXT: CFI_INSTRUCTION def_cfa_offset 16 67# CHECK-NEXT: BUNDLE 68# CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 69# CHECK-NEXT: $rdi = MOV64rr internal $rax 70# CHECK-NEXT: CALL64pcrel32 @objc_unsafeClaimAutoreleasedReturnValue, csr_64, implicit internal $rsp, implicit internal $ssp, implicit-def $rax 71# CHECK-NEXT: } 72# CHECK-NEXT: $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp 73# CHECK-NEXT: RET64 74# 75name: test_objc_unsafeClaimAutoreleasedReturnValue 76alignment: 16 77tracksRegLiveness: true 78frameInfo: 79 stackSize: 8 80 offsetAdjustment: -8 81 maxAlignment: 1 82 adjustsStack: true 83 hasCalls: true 84 maxCallFrameSize: 0 85machineFunctionInfo: {} 86body: | 87 bb.0 (%ir-block.0): 88 frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 89 CFI_INSTRUCTION def_cfa_offset 16 90 CALL64pcrel32_RVMARKER @objc_unsafeClaimAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 91 $rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp 92 RET 0, $rax 93 94... 95--- 96# CHECK-LABEL: name: test_objc_unsafeClaimAutoreleasedReturnValue_2_args 97# CHECK: bb.0 98# CHECK: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 99# CHECK-NEXT: $rax = MOV64rr $rdi 100# CHECK-NEXT: $rdi = MOV64rr killed $rdx 101# CHECK-NEXT: $rdx = MOV64rr killed $rax 102# CHECK-NEXT: BUNDLE 103# 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 104# CHECK-NEXT: $rdi = MOV64rr internal $rax 105# CHECK-NEXT: CALL64pcrel32 @objc_retainAutoreleasedReturnValue, csr_64, implicit internal $rsp, implicit internal $ssp, implicit-def dead $rax 106# CHECK-NEXT: } 107# CHECK-NEXT: $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp 108# CHECK-NEXT: RET64 109# 110name: test_objc_unsafeClaimAutoreleasedReturnValue_2_args 111alignment: 16 112tracksRegLiveness: true 113frameInfo: 114 stackSize: 8 115 offsetAdjustment: -8 116 maxAlignment: 1 117 adjustsStack: true 118 hasCalls: true 119 maxCallFrameSize: 0 120machineFunctionInfo: {} 121body: | 122 bb.0 (%ir-block.0): 123 liveins: $rdi, $rdx, $rsi 124 125 frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 126 $rax = MOV64rr $rdi 127 $rdi = MOV64rr killed $rdx 128 $rdx = MOV64rr killed $rax 129 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 130 $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp 131 RET 0, $rax 132 133... 134# CHECK-LABEL: name: test_ret_void 135# CHECK: bb.0 136# CHECK-NEXT: frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 137# CHECK-NEXT: CFI_INSTRUCTION def_cfa_offset 16 138# CHECK-NEXT: BUNDLE 139# CHECK-NEXT: CALL64pcrel32 @fn, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 140# CHECK-NEXT: $rdi = MOV64rr internal $rax 141# CHECK-NEXT: CALL64pcrel32 @objc_retainAutoreleasedReturnValue, csr_64, implicit internal $rsp, implicit internal $ssp, implicit-def dead $rax 142# CHECK-NEXT: } 143# CHECK-NEXT: $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp 144# CHECK-NEXT: RET64 145# 146name: test_ret_void 147alignment: 16 148tracksRegLiveness: true 149frameInfo: 150 stackSize: 8 151 offsetAdjustment: -8 152 maxAlignment: 1 153 adjustsStack: true 154 hasCalls: true 155 maxCallFrameSize: 0 156machineFunctionInfo: {} 157body: | 158 bb.0 (%ir-block.0): 159 frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp 160 CFI_INSTRUCTION def_cfa_offset 16 161 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @fn, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 162 $rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp 163 RET 0 164