1# RUN: llc -mtriple=mipsel-unknown-linux-gnu -mattr=+micromips -mcpu=mips32r2 \
2# RUN:     -verify-machineinstrs -run-pass micromips-reduce-size \
3# RUN:      %s -o - | FileCheck %s
4
5--- |
6  define void @f1(i32* %adr, i32 %val) { ret void }
7  define void @f2(i32* %adr, i32 %val) { ret void }
8  define void @f3(i32* %adr, i32 %val) { ret void }
9  define void @f4(i32* %adr, i32 %val) { ret void }
10
11  declare i32* @f()
12
13  ; Function Attrs: nounwind
14  declare void @llvm.stackprotector(i8*, i8**)
15...
16---
17# CHECK-LABEL: name: f1
18# CHECK-NOT: SWP_MM
19# CHECK-NOT: LWP_MM
20name:            f1
21alignment:       4
22exposesReturnsTwice: false
23legalized:       false
24regBankSelected: false
25selected:        false
26tracksRegLiveness: true
27registers:
28liveins:
29  - { reg: '$a1', virtual-reg: '' }
30frameInfo:
31  isFrameAddressTaken: false
32  isReturnAddressTaken: false
33  hasStackMap:     false
34  hasPatchPoint:   false
35  stackSize:       24
36  offsetAdjustment: 0
37  maxAlignment:    4
38  adjustsStack:    true
39  hasCalls:        true
40  stackProtector:  ''
41  maxCallFrameSize: 16
42  hasOpaqueSPAdjustment: false
43  hasVAStart:      false
44  hasMustTailInVarArgFunc: false
45  savePoint:       ''
46  restorePoint:    ''
47fixedStack:
48stack:
49  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
50      stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true,
51      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
52  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
53      stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true,
54      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
55constants:
56body:             |
57  bb.0:
58    liveins: $a1, $ra, $s0
59
60    $sp = ADDiu $sp, -24
61    CFI_INSTRUCTION def_cfa_offset 24
62    SW killed $ra, $sp, 20 :: (store 4 into %stack.0)
63    SW killed $s0, $sp, 16 :: (store 4 into %stack.1)
64    CFI_INSTRUCTION offset $ra_64, -4
65    CFI_INSTRUCTION offset $s0_64, -8
66    $s0 = MOVE16_MM $a1
67    JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0
68    $v0 = MOVE16_MM killed $s0
69    $s0 = LW $sp, 16 :: (load 4 from %stack.1)
70    $ra = LW $sp, 20 :: (load 4 from %stack.0)
71    $sp = ADDiu $sp, 24
72    PseudoReturn undef $ra, implicit killed $v0
73
74...
75---
76# CHECK-LABEL: name: f2
77# CHECK-NOT: SWP_MM
78# CHECK-NOT: LWP_MM
79name:            f2
80alignment:       4
81exposesReturnsTwice: false
82legalized:       false
83regBankSelected: false
84selected:        false
85tracksRegLiveness: true
86registers:
87liveins:
88  - { reg: '$a1', virtual-reg: '' }
89frameInfo:
90  isFrameAddressTaken: false
91  isReturnAddressTaken: false
92  hasStackMap:     false
93  hasPatchPoint:   false
94  stackSize:       24
95  offsetAdjustment: 0
96  maxAlignment:    4
97  adjustsStack:    true
98  hasCalls:        true
99  stackProtector:  ''
100  maxCallFrameSize: 16
101  hasOpaqueSPAdjustment: false
102  hasVAStart:      false
103  hasMustTailInVarArgFunc: false
104  savePoint:       ''
105  restorePoint:    ''
106fixedStack:
107stack:
108  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
109      stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true,
110      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
111  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
112      stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true,
113      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
114constants:
115body:             |
116  bb.0:
117    liveins: $a1, $ra, $s0
118
119    $sp = ADDiu $sp, -24
120    CFI_INSTRUCTION def_cfa_offset 24
121    SW_MM killed $ra, $sp, 20 :: (store 4 into %stack.0)
122    SW_MM killed $s0, $sp, 16 :: (store 4 into %stack.1)
123    CFI_INSTRUCTION offset $ra_64, -4
124    CFI_INSTRUCTION offset $s0_64, -8
125    $s0 = MOVE16_MM $a1
126    JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0
127    $v0 = MOVE16_MM killed $s0
128    $s0 = LW_MM $sp, 16 :: (load 4 from %stack.1)
129    $ra = LW_MM $sp, 20 :: (load 4 from %stack.0)
130    $sp = ADDiu $sp, 24
131    PseudoReturn undef $ra, implicit killed $v0
132
133...
134---
135# CHECK-LABEL: name: f3
136# CHECK-NOT: SWP_MM
137# CHECK-NOT: LWP_MM
138name:            f3
139alignment:       4
140exposesReturnsTwice: false
141legalized:       false
142regBankSelected: false
143selected:        false
144tracksRegLiveness: true
145registers:
146liveins:
147  - { reg: '$a1', virtual-reg: '' }
148frameInfo:
149  isFrameAddressTaken: false
150  isReturnAddressTaken: false
151  hasStackMap:     false
152  hasPatchPoint:   false
153  stackSize:       24
154  offsetAdjustment: 0
155  maxAlignment:    4
156  adjustsStack:    true
157  hasCalls:        true
158  stackProtector:  ''
159  maxCallFrameSize: 16
160  hasOpaqueSPAdjustment: false
161  hasVAStart:      false
162  hasMustTailInVarArgFunc: false
163  savePoint:       ''
164  restorePoint:    ''
165fixedStack:
166stack:
167  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
168      stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true,
169      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
170  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
171      stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true,
172      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
173constants:
174body:             |
175  bb.0:
176    liveins: $a1, $ra, $s0
177
178    $sp = ADDiu $sp, -24
179    CFI_INSTRUCTION def_cfa_offset 24
180    SW_MM killed $ra, $sp, 20 :: (store 4 into %stack.0)
181    SW killed $s0, $sp, 16 :: (store 4 into %stack.1)
182    CFI_INSTRUCTION offset $ra_64, -4
183    CFI_INSTRUCTION offset $s0_64, -8
184    $s0 = MOVE16_MM $a1
185    JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0
186    $v0 = MOVE16_MM killed $s0
187    $s0 = LW_MM $sp, 16 :: (load 4 from %stack.1)
188    $ra = LW $sp, 20 :: (load 4 from %stack.0)
189    $sp = ADDiu $sp, 24
190    PseudoReturn undef $ra, implicit killed $v0
191
192...
193---
194# CHECK-LABEL: name: f4
195# CHECK-NOT: SWP_MM
196# CHECK-NOT: LWP_MM
197name:            f4
198alignment:       4
199exposesReturnsTwice: false
200legalized:       false
201regBankSelected: false
202selected:        false
203tracksRegLiveness: true
204registers:
205liveins:
206  - { reg: '$a1', virtual-reg: '' }
207frameInfo:
208  isFrameAddressTaken: false
209  isReturnAddressTaken: false
210  hasStackMap:     false
211  hasPatchPoint:   false
212  stackSize:       24
213  offsetAdjustment: 0
214  maxAlignment:    4
215  adjustsStack:    true
216  hasCalls:        true
217  stackProtector:  ''
218  maxCallFrameSize: 16
219  hasOpaqueSPAdjustment: false
220  hasVAStart:      false
221  hasMustTailInVarArgFunc: false
222  savePoint:       ''
223  restorePoint:    ''
224fixedStack:
225stack:
226  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
227      stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true,
228      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
229  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
230      stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true,
231      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
232constants:
233body:             |
234  bb.0:
235    liveins: $a1, $ra, $s0
236
237    $sp = ADDiu $sp, -24
238    CFI_INSTRUCTION def_cfa_offset 24
239    SW killed $ra, $sp, 20 :: (store 4 into %stack.0)
240    SW_MM killed $s0, $sp, 16 :: (store 4 into %stack.1)
241    CFI_INSTRUCTION offset $ra_64, -4
242    CFI_INSTRUCTION offset $s0_64, -8
243    $s0 = MOVE16_MM $a1
244    JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0
245    $v0 = MOVE16_MM killed $s0
246    $s0 = LW $sp, 16 :: (load 4 from %stack.1)
247    $ra = LW_MM $sp, 20 :: (load 4 from %stack.0)
248    $sp = ADDiu $sp, 24
249    PseudoReturn undef $ra, implicit killed $v0
250
251...
252
253