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