1*26f6fbe2SDavid Green# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2*26f6fbe2SDavid Green# RUN: llc -run-pass=prologepilog %s -o - | FileCheck %s
3*26f6fbe2SDavid Green
4*26f6fbe2SDavid Green--- |
5*26f6fbe2SDavid Green  target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
6*26f6fbe2SDavid Green  target triple = "thumbv7m-none-eabi"
7*26f6fbe2SDavid Green
8*26f6fbe2SDavid Green  define i32 @testpos() {
9*26f6fbe2SDavid Green  entry:
10*26f6fbe2SDavid Green    %a = alloca i32, align 4
11*26f6fbe2SDavid Green    call void @other(i32* %a)
12*26f6fbe2SDavid Green    %b = load i32, i32* %a, align 4
13*26f6fbe2SDavid Green    ret i32 %b
14*26f6fbe2SDavid Green  }
15*26f6fbe2SDavid Green  define i32 @testneg4() {
16*26f6fbe2SDavid Green  entry:
17*26f6fbe2SDavid Green    %a = alloca i32, align 4
18*26f6fbe2SDavid Green    call void @other(i32* %a)
19*26f6fbe2SDavid Green    %b = load i32, i32* %a, align 4
20*26f6fbe2SDavid Green    ret i32 %b
21*26f6fbe2SDavid Green  }
22*26f6fbe2SDavid Green  define i32 @testneg8() {
23*26f6fbe2SDavid Green  entry:
24*26f6fbe2SDavid Green    %a = alloca i32, align 4
25*26f6fbe2SDavid Green    call void @other(i32* %a)
26*26f6fbe2SDavid Green    %b = load i32, i32* %a, align 4
27*26f6fbe2SDavid Green    ret i32 %b
28*26f6fbe2SDavid Green  }
29*26f6fbe2SDavid Green
30*26f6fbe2SDavid Green  declare void @other(i32*)
31*26f6fbe2SDavid Green
32*26f6fbe2SDavid Green...
33*26f6fbe2SDavid Green---
34*26f6fbe2SDavid Greenname:            testpos
35*26f6fbe2SDavid GreentracksRegLiveness: true
36*26f6fbe2SDavid GreenframeInfo:
37*26f6fbe2SDavid Green  isFrameAddressTaken: false
38*26f6fbe2SDavid Green  isReturnAddressTaken: false
39*26f6fbe2SDavid Green  hasStackMap:     false
40*26f6fbe2SDavid Green  hasPatchPoint:   false
41*26f6fbe2SDavid Green  stackSize:       0
42*26f6fbe2SDavid Green  offsetAdjustment: 0
43*26f6fbe2SDavid Green  maxAlignment:    4
44*26f6fbe2SDavid Green  adjustsStack:    true
45*26f6fbe2SDavid Green  hasCalls:        true
46*26f6fbe2SDavid Green  stackProtector:  ''
47*26f6fbe2SDavid Green  maxCallFrameSize: 0
48*26f6fbe2SDavid Green  cvBytesOfCalleeSavedRegisters: 0
49*26f6fbe2SDavid Green  hasOpaqueSPAdjustment: false
50*26f6fbe2SDavid Green  hasVAStart:      false
51*26f6fbe2SDavid Green  hasMustTailInVarArgFunc: false
52*26f6fbe2SDavid Green  hasTailCall:     false
53*26f6fbe2SDavid Green  localFrameSize:  4
54*26f6fbe2SDavid Green  savePoint:       ''
55*26f6fbe2SDavid Green  restorePoint:    ''
56*26f6fbe2SDavid Greenstack:
57*26f6fbe2SDavid Green  - { id: 0, name: a, type: default, offset: 0, size: 4, alignment: 4,
58*26f6fbe2SDavid Green      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
59*26f6fbe2SDavid Green      local-offset: -4, debug-info-variable: '', debug-info-expression: '',
60*26f6fbe2SDavid Green      debug-info-location: '' }
61*26f6fbe2SDavid Greenbody:             |
62*26f6fbe2SDavid Green  bb.0.entry:
63*26f6fbe2SDavid Green    ; CHECK-LABEL: name: testpos
64*26f6fbe2SDavid Green    ; CHECK: liveins: $r7, $lr
65*26f6fbe2SDavid Green    ; CHECK-NEXT: {{  $}}
66*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r7, killed $lr
67*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
68*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
69*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
70*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-setup tSUBspi $sp, 2, 14 /* CC::al */, $noreg
71*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
72*26f6fbe2SDavid Green    ; CHECK-NEXT: renamable $r0 = t2ADDri $sp, 4, 14 /* CC::al */, $noreg, $noreg
73*26f6fbe2SDavid Green    ; CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @other, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp
74*26f6fbe2SDavid Green    ; CHECK-NEXT: renamable $r0 = t2LDRi12 $sp, 8, 14 /* CC::al */, $noreg :: (dereferenceable load (s32) from %ir.a)
75*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-destroy tADDspi $sp, 2, 14 /* CC::al */, $noreg
76*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r7, def $pc, implicit $r0
77*26f6fbe2SDavid Green    ADJCALLSTACKDOWN 0, 0, 14 /* CC::al */, $noreg, implicit-def dead $sp, implicit $sp
78*26f6fbe2SDavid Green    renamable $r0 = t2ADDri %stack.0.a, 0, 14 /* CC::al */, $noreg, $noreg
79*26f6fbe2SDavid Green    tBL 14 /* CC::al */, $noreg, @other, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp
80*26f6fbe2SDavid Green    ADJCALLSTACKUP 0, -1, 14 /* CC::al */, $noreg, implicit-def dead $sp, implicit $sp
81*26f6fbe2SDavid Green    renamable $r0 = t2LDRi12 %stack.0.a, 4, 14 /* CC::al */, $noreg :: (dereferenceable load (s32) from %ir.a)
82*26f6fbe2SDavid Green    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
83*26f6fbe2SDavid Green
84*26f6fbe2SDavid Green...
85*26f6fbe2SDavid Green---
86*26f6fbe2SDavid Greenname:            testneg4
87*26f6fbe2SDavid GreentracksRegLiveness: true
88*26f6fbe2SDavid GreenframeInfo:
89*26f6fbe2SDavid Green  isFrameAddressTaken: false
90*26f6fbe2SDavid Green  isReturnAddressTaken: false
91*26f6fbe2SDavid Green  hasStackMap:     false
92*26f6fbe2SDavid Green  hasPatchPoint:   false
93*26f6fbe2SDavid Green  stackSize:       0
94*26f6fbe2SDavid Green  offsetAdjustment: 0
95*26f6fbe2SDavid Green  maxAlignment:    4
96*26f6fbe2SDavid Green  adjustsStack:    true
97*26f6fbe2SDavid Green  hasCalls:        true
98*26f6fbe2SDavid Green  stackProtector:  ''
99*26f6fbe2SDavid Green  maxCallFrameSize: 0
100*26f6fbe2SDavid Green  cvBytesOfCalleeSavedRegisters: 0
101*26f6fbe2SDavid Green  hasOpaqueSPAdjustment: false
102*26f6fbe2SDavid Green  hasVAStart:      false
103*26f6fbe2SDavid Green  hasMustTailInVarArgFunc: false
104*26f6fbe2SDavid Green  hasTailCall:     false
105*26f6fbe2SDavid Green  localFrameSize:  4
106*26f6fbe2SDavid Green  savePoint:       ''
107*26f6fbe2SDavid Green  restorePoint:    ''
108*26f6fbe2SDavid Greenstack:
109*26f6fbe2SDavid Green  - { id: 0, name: a, type: default, offset: 0, size: 4, alignment: 4,
110*26f6fbe2SDavid Green      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
111*26f6fbe2SDavid Green      local-offset: -4, debug-info-variable: '', debug-info-expression: '',
112*26f6fbe2SDavid Green      debug-info-location: '' }
113*26f6fbe2SDavid Greenbody:             |
114*26f6fbe2SDavid Green  bb.0.entry:
115*26f6fbe2SDavid Green    ; CHECK-LABEL: name: testneg4
116*26f6fbe2SDavid Green    ; CHECK: liveins: $r7, $lr
117*26f6fbe2SDavid Green    ; CHECK-NEXT: {{  $}}
118*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r7, killed $lr
119*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
120*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
121*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
122*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-setup tSUBspi $sp, 2, 14 /* CC::al */, $noreg
123*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
124*26f6fbe2SDavid Green    ; CHECK-NEXT: renamable $r0 = t2ADDri $sp, 4, 14 /* CC::al */, $noreg, $noreg
125*26f6fbe2SDavid Green    ; CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @other, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp
126*26f6fbe2SDavid Green    ; CHECK-NEXT: renamable $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg :: (dereferenceable load (s32) from %ir.a)
127*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-destroy tADDspi $sp, 2, 14 /* CC::al */, $noreg
128*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r7, def $pc, implicit $r0
129*26f6fbe2SDavid Green    ADJCALLSTACKDOWN 0, 0, 14 /* CC::al */, $noreg, implicit-def dead $sp, implicit $sp
130*26f6fbe2SDavid Green    renamable $r0 = t2ADDri %stack.0.a, 0, 14 /* CC::al */, $noreg, $noreg
131*26f6fbe2SDavid Green    tBL 14 /* CC::al */, $noreg, @other, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp
132*26f6fbe2SDavid Green    ADJCALLSTACKUP 0, -1, 14 /* CC::al */, $noreg, implicit-def dead $sp, implicit $sp
133*26f6fbe2SDavid Green    renamable $r0 = t2LDRi8 %stack.0.a, -4, 14 /* CC::al */, $noreg :: (dereferenceable load (s32) from %ir.a)
134*26f6fbe2SDavid Green    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
135*26f6fbe2SDavid Green
136*26f6fbe2SDavid Green...
137*26f6fbe2SDavid Green---
138*26f6fbe2SDavid Greenname:            testneg8
139*26f6fbe2SDavid GreentracksRegLiveness: true
140*26f6fbe2SDavid GreenframeInfo:
141*26f6fbe2SDavid Green  isFrameAddressTaken: false
142*26f6fbe2SDavid Green  isReturnAddressTaken: false
143*26f6fbe2SDavid Green  hasStackMap:     false
144*26f6fbe2SDavid Green  hasPatchPoint:   false
145*26f6fbe2SDavid Green  stackSize:       0
146*26f6fbe2SDavid Green  offsetAdjustment: 0
147*26f6fbe2SDavid Green  maxAlignment:    4
148*26f6fbe2SDavid Green  adjustsStack:    true
149*26f6fbe2SDavid Green  hasCalls:        true
150*26f6fbe2SDavid Green  stackProtector:  ''
151*26f6fbe2SDavid Green  maxCallFrameSize: 0
152*26f6fbe2SDavid Green  cvBytesOfCalleeSavedRegisters: 0
153*26f6fbe2SDavid Green  hasOpaqueSPAdjustment: false
154*26f6fbe2SDavid Green  hasVAStart:      false
155*26f6fbe2SDavid Green  hasMustTailInVarArgFunc: false
156*26f6fbe2SDavid Green  hasTailCall:     false
157*26f6fbe2SDavid Green  localFrameSize:  4
158*26f6fbe2SDavid Green  savePoint:       ''
159*26f6fbe2SDavid Green  restorePoint:    ''
160*26f6fbe2SDavid Greenstack:
161*26f6fbe2SDavid Green  - { id: 0, name: a, type: default, offset: 0, size: 4, alignment: 4,
162*26f6fbe2SDavid Green      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
163*26f6fbe2SDavid Green      local-offset: -4, debug-info-variable: '', debug-info-expression: '',
164*26f6fbe2SDavid Green      debug-info-location: '' }
165*26f6fbe2SDavid Greenbody:             |
166*26f6fbe2SDavid Green  bb.0.entry:
167*26f6fbe2SDavid Green    ; CHECK-LABEL: name: testneg8
168*26f6fbe2SDavid Green    ; CHECK: liveins: $r7, $lr
169*26f6fbe2SDavid Green    ; CHECK-NEXT: {{  $}}
170*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r7, killed $lr
171*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
172*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
173*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
174*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-setup tSUBspi $sp, 2, 14 /* CC::al */, $noreg
175*26f6fbe2SDavid Green    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
176*26f6fbe2SDavid Green    ; CHECK-NEXT: renamable $r0 = t2ADDri $sp, 4, 14 /* CC::al */, $noreg, $noreg
177*26f6fbe2SDavid Green    ; CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @other, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp
178*26f6fbe2SDavid Green    ; CHECK-NEXT: renamable $r0 = t2LDRi8 $sp, -4, 14 /* CC::al */, $noreg :: (dereferenceable load (s32) from %ir.a)
179*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-destroy tADDspi $sp, 2, 14 /* CC::al */, $noreg
180*26f6fbe2SDavid Green    ; CHECK-NEXT: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r7, def $pc, implicit $r0
181*26f6fbe2SDavid Green    ADJCALLSTACKDOWN 0, 0, 14 /* CC::al */, $noreg, implicit-def dead $sp, implicit $sp
182*26f6fbe2SDavid Green    renamable $r0 = t2ADDri %stack.0.a, 0, 14 /* CC::al */, $noreg, $noreg
183*26f6fbe2SDavid Green    tBL 14 /* CC::al */, $noreg, @other, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit $r0, implicit-def $sp
184*26f6fbe2SDavid Green    ADJCALLSTACKUP 0, -1, 14 /* CC::al */, $noreg, implicit-def dead $sp, implicit $sp
185*26f6fbe2SDavid Green    renamable $r0 = t2LDRi8 %stack.0.a, -8, 14 /* CC::al */, $noreg :: (dereferenceable load (s32) from %ir.a)
186*26f6fbe2SDavid Green    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
187*26f6fbe2SDavid Green
188*26f6fbe2SDavid Green...
189*26f6fbe2SDavid Green
190