xref: /llvm-project/llvm/test/CodeGen/X86/expand-call-rvmarker.mir (revision 60442f0d442723a487528bdd8b48b24657a025e8)
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