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