1*40614e1cSOliver Stannard# RUN: llc -run-pass=prologepilog %s -o - | FileCheck %s 2*40614e1cSOliver Stannard# Tests to check that CPSR is saved and restored if live when we emit tMOVi32imm 3*40614e1cSOliver Stannard# to resolve a frame offset. 4*40614e1cSOliver Stannard 5*40614e1cSOliver Stannard--- | 6*40614e1cSOliver Stannard target triple = "thumbv6m-arm-none-eabi" 7*40614e1cSOliver Stannard 8*40614e1cSOliver Stannard define void @test_def_in_block(i32 %x) #0 { 9*40614e1cSOliver Stannard entry: 10*40614e1cSOliver Stannard %var = alloca i32, align 4 11*40614e1cSOliver Stannard %dummy = alloca [2048 x i8], align 1 12*40614e1cSOliver Stannard %cmp = icmp eq i32 %x, 0 13*40614e1cSOliver Stannard store i32 %x, ptr %var, align 4 14*40614e1cSOliver Stannard br i1 %cmp, label %if.then, label %if.end 15*40614e1cSOliver Stannard 16*40614e1cSOliver Stannard if.then: 17*40614e1cSOliver Stannard br label %if.end 18*40614e1cSOliver Stannard 19*40614e1cSOliver Stannard if.end: 20*40614e1cSOliver Stannard ret void 21*40614e1cSOliver Stannard } 22*40614e1cSOliver Stannard 23*40614e1cSOliver Stannard define void @test_live_in(i32 %x) #0 { 24*40614e1cSOliver Stannard entry: 25*40614e1cSOliver Stannard %var = alloca i32, align 4 26*40614e1cSOliver Stannard %dummy = alloca [2048 x i8], align 1 27*40614e1cSOliver Stannard %cmp = icmp eq i32 %x, 0 28*40614e1cSOliver Stannard br i1 %cmp, label %if.then, label %if.end 29*40614e1cSOliver Stannard 30*40614e1cSOliver Stannard if.then: 31*40614e1cSOliver Stannard store i32 %x, ptr %var, align 4 32*40614e1cSOliver Stannard %cmp1 = icmp slt i32 %x, 0 33*40614e1cSOliver Stannard br i1 %cmp1, label %if.then2, label %if.end 34*40614e1cSOliver Stannard 35*40614e1cSOliver Stannard if.then2: 36*40614e1cSOliver Stannard br label %if.end 37*40614e1cSOliver Stannard 38*40614e1cSOliver Stannard if.end: 39*40614e1cSOliver Stannard ret void 40*40614e1cSOliver Stannard } 41*40614e1cSOliver Stannard 42*40614e1cSOliver Stannard define void @test_live_out(i32 %x) #0 { 43*40614e1cSOliver Stannard entry: 44*40614e1cSOliver Stannard %var = alloca i32, align 4 45*40614e1cSOliver Stannard %dummy = alloca [2048 x i8], align 1 46*40614e1cSOliver Stannard %cmp = icmp eq i32 %x, 0 47*40614e1cSOliver Stannard store i32 %x, ptr %var, align 4 48*40614e1cSOliver Stannard br label %if.then 49*40614e1cSOliver Stannard 50*40614e1cSOliver Stannard if.then: 51*40614e1cSOliver Stannard br i1 %cmp, label %if.then2, label %if.end 52*40614e1cSOliver Stannard 53*40614e1cSOliver Stannard if.then2: 54*40614e1cSOliver Stannard br label %if.end 55*40614e1cSOliver Stannard 56*40614e1cSOliver Stannard if.end: 57*40614e1cSOliver Stannard ret void 58*40614e1cSOliver Stannard } 59*40614e1cSOliver Stannard 60*40614e1cSOliver Stannard define void @test_live_out_def_after_mov(i32 %x) #0 { 61*40614e1cSOliver Stannard entry: 62*40614e1cSOliver Stannard %var = alloca i32, align 4 63*40614e1cSOliver Stannard %dummy = alloca [2048 x i8], align 1 64*40614e1cSOliver Stannard store i32 %x, ptr %var, align 4 65*40614e1cSOliver Stannard %cmp = icmp eq i32 %x, 0 66*40614e1cSOliver Stannard br label %if.then 67*40614e1cSOliver Stannard 68*40614e1cSOliver Stannard if.then: 69*40614e1cSOliver Stannard br i1 %cmp, label %if.then2, label %if.end 70*40614e1cSOliver Stannard 71*40614e1cSOliver Stannard if.then2: 72*40614e1cSOliver Stannard br label %if.end 73*40614e1cSOliver Stannard 74*40614e1cSOliver Stannard if.end: 75*40614e1cSOliver Stannard ret void 76*40614e1cSOliver Stannard } 77*40614e1cSOliver Stannard 78*40614e1cSOliver Stannard attributes #0 = { "target-features"="+execute-only" } 79*40614e1cSOliver Stannard... 80*40614e1cSOliver Stannard--- 81*40614e1cSOliver Stannardname: test_def_in_block 82*40614e1cSOliver Stannardalignment: 2 83*40614e1cSOliver StannardexposesReturnsTwice: false 84*40614e1cSOliver Stannardlegalized: false 85*40614e1cSOliver StannardregBankSelected: false 86*40614e1cSOliver Stannardselected: false 87*40614e1cSOliver StannardfailedISel: false 88*40614e1cSOliver StannardtracksRegLiveness: true 89*40614e1cSOliver StannardhasWinCFI: false 90*40614e1cSOliver StannardcallsEHReturn: false 91*40614e1cSOliver StannardcallsUnwindInit: false 92*40614e1cSOliver StannardhasEHCatchret: false 93*40614e1cSOliver StannardhasEHScopes: false 94*40614e1cSOliver StannardhasEHFunclets: false 95*40614e1cSOliver StannardisOutlined: false 96*40614e1cSOliver StannarddebugInstrRef: false 97*40614e1cSOliver StannardfailsVerification: false 98*40614e1cSOliver StannardtracksDebugUserValues: false 99*40614e1cSOliver Stannardregisters: [] 100*40614e1cSOliver Stannardliveins: 101*40614e1cSOliver Stannard - { reg: '$r0', virtual-reg: '' } 102*40614e1cSOliver StannardframeInfo: 103*40614e1cSOliver Stannard isFrameAddressTaken: false 104*40614e1cSOliver Stannard isReturnAddressTaken: false 105*40614e1cSOliver Stannard hasStackMap: false 106*40614e1cSOliver Stannard hasPatchPoint: false 107*40614e1cSOliver Stannard stackSize: 0 108*40614e1cSOliver Stannard offsetAdjustment: 0 109*40614e1cSOliver Stannard maxAlignment: 4 110*40614e1cSOliver Stannard adjustsStack: false 111*40614e1cSOliver Stannard hasCalls: false 112*40614e1cSOliver Stannard stackProtector: '' 113*40614e1cSOliver Stannard functionContext: '' 114*40614e1cSOliver Stannard maxCallFrameSize: 0 115*40614e1cSOliver Stannard cvBytesOfCalleeSavedRegisters: 0 116*40614e1cSOliver Stannard hasOpaqueSPAdjustment: false 117*40614e1cSOliver Stannard hasVAStart: false 118*40614e1cSOliver Stannard hasMustTailInVarArgFunc: false 119*40614e1cSOliver Stannard hasTailCall: false 120*40614e1cSOliver Stannard localFrameSize: 2052 121*40614e1cSOliver Stannard savePoint: '' 122*40614e1cSOliver Stannard restorePoint: '' 123*40614e1cSOliver StannardfixedStack: [] 124*40614e1cSOliver Stannardstack: 125*40614e1cSOliver Stannard - { id: 0, name: var, type: default, offset: 0, size: 4, alignment: 4, 126*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 127*40614e1cSOliver Stannard local-offset: -4, debug-info-variable: '', debug-info-expression: '', 128*40614e1cSOliver Stannard debug-info-location: '' } 129*40614e1cSOliver Stannard - { id: 1, name: dummy, type: default, offset: 0, size: 2048, alignment: 1, 130*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 131*40614e1cSOliver Stannard local-offset: -2052, debug-info-variable: '', debug-info-expression: '', 132*40614e1cSOliver Stannard debug-info-location: '' } 133*40614e1cSOliver Stannardentry_values: [] 134*40614e1cSOliver StannardcallSites: [] 135*40614e1cSOliver StannarddebugValueSubstitutions: [] 136*40614e1cSOliver Stannardconstants: [] 137*40614e1cSOliver StannardmachineFunctionInfo: {} 138*40614e1cSOliver Stannardbody: | 139*40614e1cSOliver Stannard bb.0.entry: 140*40614e1cSOliver Stannard successors: %bb.1(0x40000000), %bb.2(0x40000000) 141*40614e1cSOliver Stannard liveins: $r0 142*40614e1cSOliver Stannard 143*40614e1cSOliver Stannard ; CHECK-LABEL: name: test_def_in_block 144*40614e1cSOliver Stannard ; CHECK-LABEL: bb.0.entry: 145*40614e1cSOliver Stannard ; CHECK: tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 146*40614e1cSOliver Stannard ; CHECK-NEXT: $r2 = t2MRS_M 2048, 14 /* CC::al */, $noreg, implicit $cpsr 147*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tMOVi32imm 2048, implicit-def $cpsr 148*40614e1cSOliver Stannard ; CHECK-NEXT: t2MSR_M 2048, killed $r2, 14 /* CC::al */, $noreg, implicit-def $cpsr 149*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tADDhirr $r1, killed $sp, 14 /* CC::al */, $noreg 150*40614e1cSOliver Stannard ; CHECK-NEXT: tSTRi renamable $r0, killed $r1, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 151*40614e1cSOliver Stannard 152*40614e1cSOliver Stannard tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 153*40614e1cSOliver Stannard tSTRspi renamable $r0, %stack.0.var, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 154*40614e1cSOliver Stannard tBcc %bb.1, 1 /* CC::ne */, killed $cpsr 155*40614e1cSOliver Stannard tB %bb.2, 14 /* CC::al */, $noreg 156*40614e1cSOliver Stannard 157*40614e1cSOliver Stannard bb.1.if.then: 158*40614e1cSOliver Stannard successors: %bb.2(0x80000000) 159*40614e1cSOliver Stannard 160*40614e1cSOliver Stannard tB %bb.2, 14 /* CC::al */, $noreg 161*40614e1cSOliver Stannard 162*40614e1cSOliver Stannard bb.2.if.end: 163*40614e1cSOliver Stannard tBX_RET 14 /* CC::al */, $noreg 164*40614e1cSOliver Stannard 165*40614e1cSOliver Stannard... 166*40614e1cSOliver Stannard--- 167*40614e1cSOliver Stannardname: test_live_in 168*40614e1cSOliver Stannardalignment: 2 169*40614e1cSOliver StannardexposesReturnsTwice: false 170*40614e1cSOliver Stannardlegalized: false 171*40614e1cSOliver StannardregBankSelected: false 172*40614e1cSOliver Stannardselected: false 173*40614e1cSOliver StannardfailedISel: false 174*40614e1cSOliver StannardtracksRegLiveness: true 175*40614e1cSOliver StannardhasWinCFI: false 176*40614e1cSOliver StannardcallsEHReturn: false 177*40614e1cSOliver StannardcallsUnwindInit: false 178*40614e1cSOliver StannardhasEHCatchret: false 179*40614e1cSOliver StannardhasEHScopes: false 180*40614e1cSOliver StannardhasEHFunclets: false 181*40614e1cSOliver StannardisOutlined: false 182*40614e1cSOliver StannarddebugInstrRef: false 183*40614e1cSOliver StannardfailsVerification: false 184*40614e1cSOliver StannardtracksDebugUserValues: false 185*40614e1cSOliver Stannardregisters: [] 186*40614e1cSOliver Stannardliveins: 187*40614e1cSOliver Stannard - { reg: '$r0', virtual-reg: '' } 188*40614e1cSOliver StannardframeInfo: 189*40614e1cSOliver Stannard isFrameAddressTaken: false 190*40614e1cSOliver Stannard isReturnAddressTaken: false 191*40614e1cSOliver Stannard hasStackMap: false 192*40614e1cSOliver Stannard hasPatchPoint: false 193*40614e1cSOliver Stannard stackSize: 0 194*40614e1cSOliver Stannard offsetAdjustment: 0 195*40614e1cSOliver Stannard maxAlignment: 4 196*40614e1cSOliver Stannard adjustsStack: false 197*40614e1cSOliver Stannard hasCalls: false 198*40614e1cSOliver Stannard stackProtector: '' 199*40614e1cSOliver Stannard functionContext: '' 200*40614e1cSOliver Stannard maxCallFrameSize: 0 201*40614e1cSOliver Stannard cvBytesOfCalleeSavedRegisters: 0 202*40614e1cSOliver Stannard hasOpaqueSPAdjustment: false 203*40614e1cSOliver Stannard hasVAStart: false 204*40614e1cSOliver Stannard hasMustTailInVarArgFunc: false 205*40614e1cSOliver Stannard hasTailCall: false 206*40614e1cSOliver Stannard localFrameSize: 2052 207*40614e1cSOliver Stannard savePoint: '' 208*40614e1cSOliver Stannard restorePoint: '' 209*40614e1cSOliver StannardfixedStack: [] 210*40614e1cSOliver Stannardstack: 211*40614e1cSOliver Stannard - { id: 0, name: var, type: default, offset: 0, size: 4, alignment: 4, 212*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 213*40614e1cSOliver Stannard local-offset: -4, debug-info-variable: '', debug-info-expression: '', 214*40614e1cSOliver Stannard debug-info-location: '' } 215*40614e1cSOliver Stannard - { id: 1, name: dummy, type: default, offset: 0, size: 2048, alignment: 1, 216*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 217*40614e1cSOliver Stannard local-offset: -2052, debug-info-variable: '', debug-info-expression: '', 218*40614e1cSOliver Stannard debug-info-location: '' } 219*40614e1cSOliver Stannardentry_values: [] 220*40614e1cSOliver StannardcallSites: [] 221*40614e1cSOliver StannarddebugValueSubstitutions: [] 222*40614e1cSOliver Stannardconstants: [] 223*40614e1cSOliver StannardmachineFunctionInfo: {} 224*40614e1cSOliver Stannardbody: | 225*40614e1cSOliver Stannard bb.0.entry: 226*40614e1cSOliver Stannard successors: %bb.1(0x40000000), %bb.3(0x40000000) 227*40614e1cSOliver Stannard liveins: $r0 228*40614e1cSOliver Stannard 229*40614e1cSOliver Stannard tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 230*40614e1cSOliver Stannard tBcc %bb.3, 1 /* CC::ne */, $cpsr 231*40614e1cSOliver Stannard tB %bb.1, 14 /* CC::al */, $noreg 232*40614e1cSOliver Stannard 233*40614e1cSOliver Stannard bb.1.if.then: 234*40614e1cSOliver Stannard successors: %bb.2(0x40000000), %bb.3(0x40000000) 235*40614e1cSOliver Stannard liveins: $r0, $cpsr 236*40614e1cSOliver Stannard 237*40614e1cSOliver Stannard ; CHECK-LABEL: name: test_live_in 238*40614e1cSOliver Stannard ; CHECK-LABEL: bb.1.if.then: 239*40614e1cSOliver Stannard ; CHECK: $r2 = t2MRS_M 2048, 14 /* CC::al */, $noreg, implicit $cpsr 240*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tMOVi32imm 2048, implicit-def $cpsr 241*40614e1cSOliver Stannard ; CHECK-NEXT: t2MSR_M 2048, killed $r2, 14 /* CC::al */, $noreg, implicit-def $cpsr 242*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tADDhirr $r1, killed $sp, 14 /* CC::al */, $noreg 243*40614e1cSOliver Stannard ; CHECK-NEXT: tSTRi renamable $r0, killed $r1, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 244*40614e1cSOliver Stannard 245*40614e1cSOliver Stannard tSTRspi renamable $r0, %stack.0.var, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 246*40614e1cSOliver Stannard tBcc %bb.3, 5 /* CC::pl */, killed $cpsr 247*40614e1cSOliver Stannard tB %bb.2, 14 /* CC::al */, $noreg 248*40614e1cSOliver Stannard 249*40614e1cSOliver Stannard bb.2.if.then2: 250*40614e1cSOliver Stannard successors: %bb.3(0x80000000) 251*40614e1cSOliver Stannard 252*40614e1cSOliver Stannard tB %bb.3, 14 /* CC::al */, $noreg 253*40614e1cSOliver Stannard 254*40614e1cSOliver Stannard bb.3.if.end: 255*40614e1cSOliver Stannard tBX_RET 14 /* CC::al */, $noreg 256*40614e1cSOliver Stannard 257*40614e1cSOliver Stannard... 258*40614e1cSOliver Stannard--- 259*40614e1cSOliver Stannardname: test_live_out 260*40614e1cSOliver Stannardalignment: 2 261*40614e1cSOliver StannardexposesReturnsTwice: false 262*40614e1cSOliver Stannardlegalized: false 263*40614e1cSOliver StannardregBankSelected: false 264*40614e1cSOliver Stannardselected: false 265*40614e1cSOliver StannardfailedISel: false 266*40614e1cSOliver StannardtracksRegLiveness: true 267*40614e1cSOliver StannardhasWinCFI: false 268*40614e1cSOliver StannardcallsEHReturn: false 269*40614e1cSOliver StannardcallsUnwindInit: false 270*40614e1cSOliver StannardhasEHCatchret: false 271*40614e1cSOliver StannardhasEHScopes: false 272*40614e1cSOliver StannardhasEHFunclets: false 273*40614e1cSOliver StannardisOutlined: false 274*40614e1cSOliver StannarddebugInstrRef: false 275*40614e1cSOliver StannardfailsVerification: false 276*40614e1cSOliver StannardtracksDebugUserValues: false 277*40614e1cSOliver Stannardregisters: [] 278*40614e1cSOliver Stannardliveins: 279*40614e1cSOliver Stannard - { reg: '$r0', virtual-reg: '' } 280*40614e1cSOliver StannardframeInfo: 281*40614e1cSOliver Stannard isFrameAddressTaken: false 282*40614e1cSOliver Stannard isReturnAddressTaken: false 283*40614e1cSOliver Stannard hasStackMap: false 284*40614e1cSOliver Stannard hasPatchPoint: false 285*40614e1cSOliver Stannard stackSize: 0 286*40614e1cSOliver Stannard offsetAdjustment: 0 287*40614e1cSOliver Stannard maxAlignment: 4 288*40614e1cSOliver Stannard adjustsStack: false 289*40614e1cSOliver Stannard hasCalls: false 290*40614e1cSOliver Stannard stackProtector: '' 291*40614e1cSOliver Stannard functionContext: '' 292*40614e1cSOliver Stannard maxCallFrameSize: 0 293*40614e1cSOliver Stannard cvBytesOfCalleeSavedRegisters: 0 294*40614e1cSOliver Stannard hasOpaqueSPAdjustment: false 295*40614e1cSOliver Stannard hasVAStart: false 296*40614e1cSOliver Stannard hasMustTailInVarArgFunc: false 297*40614e1cSOliver Stannard hasTailCall: false 298*40614e1cSOliver Stannard localFrameSize: 2052 299*40614e1cSOliver Stannard savePoint: '' 300*40614e1cSOliver Stannard restorePoint: '' 301*40614e1cSOliver StannardfixedStack: [] 302*40614e1cSOliver Stannardstack: 303*40614e1cSOliver Stannard - { id: 0, name: var, type: default, offset: 0, size: 4, alignment: 4, 304*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 305*40614e1cSOliver Stannard local-offset: -4, debug-info-variable: '', debug-info-expression: '', 306*40614e1cSOliver Stannard debug-info-location: '' } 307*40614e1cSOliver Stannard - { id: 1, name: dummy, type: default, offset: 0, size: 2048, alignment: 1, 308*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 309*40614e1cSOliver Stannard local-offset: -2052, debug-info-variable: '', debug-info-expression: '', 310*40614e1cSOliver Stannard debug-info-location: '' } 311*40614e1cSOliver Stannardentry_values: [] 312*40614e1cSOliver StannardcallSites: [] 313*40614e1cSOliver StannarddebugValueSubstitutions: [] 314*40614e1cSOliver Stannardconstants: [] 315*40614e1cSOliver StannardmachineFunctionInfo: {} 316*40614e1cSOliver Stannardbody: | 317*40614e1cSOliver Stannard bb.0.entry: 318*40614e1cSOliver Stannard successors: %bb.1(0x40000000) 319*40614e1cSOliver Stannard liveins: $r0 320*40614e1cSOliver Stannard 321*40614e1cSOliver Stannard ; CHECK-LABEL: name: test_live_out 322*40614e1cSOliver Stannard ; CHECK-LABEL: bb.0.entry: 323*40614e1cSOliver Stannard ; CHECK: tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 324*40614e1cSOliver Stannard ; CHECK-NEXT: $r2 = t2MRS_M 2048, 14 /* CC::al */, $noreg, implicit $cpsr 325*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tMOVi32imm 2048, implicit-def $cpsr 326*40614e1cSOliver Stannard ; CHECK-NEXT: t2MSR_M 2048, killed $r2, 14 /* CC::al */, $noreg, implicit-def $cpsr 327*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tADDhirr $r1, killed $sp, 14 /* CC::al */, $noreg 328*40614e1cSOliver Stannard ; CHECK-NEXT: tSTRi renamable $r0, killed $r1, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 329*40614e1cSOliver Stannard 330*40614e1cSOliver Stannard tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 331*40614e1cSOliver Stannard tSTRspi renamable $r0, %stack.0.var, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 332*40614e1cSOliver Stannard tB %bb.1, 14 /* CC::al */, $noreg 333*40614e1cSOliver Stannard 334*40614e1cSOliver Stannard bb.1.if.then: 335*40614e1cSOliver Stannard successors: %bb.2(0x40000000), %bb.3(0x40000000) 336*40614e1cSOliver Stannard liveins: $cpsr 337*40614e1cSOliver Stannard 338*40614e1cSOliver Stannard tBcc %bb.3, 5 /* CC::pl */, killed $cpsr 339*40614e1cSOliver Stannard tB %bb.2, 14 /* CC::al */, $noreg 340*40614e1cSOliver Stannard 341*40614e1cSOliver Stannard bb.2.if.then2: 342*40614e1cSOliver Stannard successors: %bb.3(0x80000000) 343*40614e1cSOliver Stannard 344*40614e1cSOliver Stannard tB %bb.3, 14 /* CC::al */, $noreg 345*40614e1cSOliver Stannard 346*40614e1cSOliver Stannard bb.3.if.end: 347*40614e1cSOliver Stannard tBX_RET 14 /* CC::al */, $noreg 348*40614e1cSOliver Stannard 349*40614e1cSOliver Stannard... 350*40614e1cSOliver Stannard--- 351*40614e1cSOliver Stannardname: test_live_out_def_after_mov 352*40614e1cSOliver Stannardalignment: 2 353*40614e1cSOliver StannardexposesReturnsTwice: false 354*40614e1cSOliver Stannardlegalized: false 355*40614e1cSOliver StannardregBankSelected: false 356*40614e1cSOliver Stannardselected: false 357*40614e1cSOliver StannardfailedISel: false 358*40614e1cSOliver StannardtracksRegLiveness: true 359*40614e1cSOliver StannardhasWinCFI: false 360*40614e1cSOliver StannardcallsEHReturn: false 361*40614e1cSOliver StannardcallsUnwindInit: false 362*40614e1cSOliver StannardhasEHCatchret: false 363*40614e1cSOliver StannardhasEHScopes: false 364*40614e1cSOliver StannardhasEHFunclets: false 365*40614e1cSOliver StannardisOutlined: false 366*40614e1cSOliver StannarddebugInstrRef: false 367*40614e1cSOliver StannardfailsVerification: false 368*40614e1cSOliver StannardtracksDebugUserValues: false 369*40614e1cSOliver Stannardregisters: [] 370*40614e1cSOliver Stannardliveins: 371*40614e1cSOliver Stannard - { reg: '$r0', virtual-reg: '' } 372*40614e1cSOliver StannardframeInfo: 373*40614e1cSOliver Stannard isFrameAddressTaken: false 374*40614e1cSOliver Stannard isReturnAddressTaken: false 375*40614e1cSOliver Stannard hasStackMap: false 376*40614e1cSOliver Stannard hasPatchPoint: false 377*40614e1cSOliver Stannard stackSize: 0 378*40614e1cSOliver Stannard offsetAdjustment: 0 379*40614e1cSOliver Stannard maxAlignment: 4 380*40614e1cSOliver Stannard adjustsStack: false 381*40614e1cSOliver Stannard hasCalls: false 382*40614e1cSOliver Stannard stackProtector: '' 383*40614e1cSOliver Stannard functionContext: '' 384*40614e1cSOliver Stannard maxCallFrameSize: 0 385*40614e1cSOliver Stannard cvBytesOfCalleeSavedRegisters: 0 386*40614e1cSOliver Stannard hasOpaqueSPAdjustment: false 387*40614e1cSOliver Stannard hasVAStart: false 388*40614e1cSOliver Stannard hasMustTailInVarArgFunc: false 389*40614e1cSOliver Stannard hasTailCall: false 390*40614e1cSOliver Stannard localFrameSize: 2052 391*40614e1cSOliver Stannard savePoint: '' 392*40614e1cSOliver Stannard restorePoint: '' 393*40614e1cSOliver StannardfixedStack: [] 394*40614e1cSOliver Stannardstack: 395*40614e1cSOliver Stannard - { id: 0, name: var, type: default, offset: 0, size: 4, alignment: 4, 396*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 397*40614e1cSOliver Stannard local-offset: -4, debug-info-variable: '', debug-info-expression: '', 398*40614e1cSOliver Stannard debug-info-location: '' } 399*40614e1cSOliver Stannard - { id: 1, name: dummy, type: default, offset: 0, size: 2048, alignment: 1, 400*40614e1cSOliver Stannard stack-id: default, callee-saved-register: '', callee-saved-restored: true, 401*40614e1cSOliver Stannard local-offset: -2052, debug-info-variable: '', debug-info-expression: '', 402*40614e1cSOliver Stannard debug-info-location: '' } 403*40614e1cSOliver Stannardentry_values: [] 404*40614e1cSOliver StannardcallSites: [] 405*40614e1cSOliver StannarddebugValueSubstitutions: [] 406*40614e1cSOliver Stannardconstants: [] 407*40614e1cSOliver StannardmachineFunctionInfo: {} 408*40614e1cSOliver Stannardbody: | 409*40614e1cSOliver Stannard bb.0.entry: 410*40614e1cSOliver Stannard successors: %bb.1(0x40000000) 411*40614e1cSOliver Stannard liveins: $r0 412*40614e1cSOliver Stannard 413*40614e1cSOliver Stannard ; Here the live-out cpsr is defined after the tMOVi32imm, so cpsr doesn't 414*40614e1cSOliver Stannard ; need to be saved. 415*40614e1cSOliver Stannard ; CHECK-LABEL: name: test_live_out 416*40614e1cSOliver Stannard ; CHECK-LABEL: bb.0.entry: 417*40614e1cSOliver Stannard ; CHECK: $r1 = tMOVi32imm 2048, implicit-def $cpsr 418*40614e1cSOliver Stannard ; CHECK-NEXT: $r1 = tADDhirr $r1, killed $sp, 14 /* CC::al */, $noreg 419*40614e1cSOliver Stannard ; CHECK-NEXT: tSTRi renamable $r0, killed $r1, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 420*40614e1cSOliver Stannard ; CHECK-NEXT: tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 421*40614e1cSOliver Stannard 422*40614e1cSOliver Stannard tSTRspi renamable $r0, %stack.0.var, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.var) 423*40614e1cSOliver Stannard tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 424*40614e1cSOliver Stannard tB %bb.1, 14 /* CC::al */, $noreg 425*40614e1cSOliver Stannard 426*40614e1cSOliver Stannard bb.1.if.then: 427*40614e1cSOliver Stannard successors: %bb.2(0x40000000), %bb.3(0x40000000) 428*40614e1cSOliver Stannard liveins: $cpsr 429*40614e1cSOliver Stannard 430*40614e1cSOliver Stannard tBcc %bb.3, 5 /* CC::pl */, killed $cpsr 431*40614e1cSOliver Stannard tB %bb.2, 14 /* CC::al */, $noreg 432*40614e1cSOliver Stannard 433*40614e1cSOliver Stannard bb.2.if.then2: 434*40614e1cSOliver Stannard successors: %bb.3(0x80000000) 435*40614e1cSOliver Stannard 436*40614e1cSOliver Stannard tB %bb.3, 14 /* CC::al */, $noreg 437*40614e1cSOliver Stannard 438*40614e1cSOliver Stannard bb.3.if.end: 439*40614e1cSOliver Stannard tBX_RET 14 /* CC::al */, $noreg 440*40614e1cSOliver Stannard 441*40614e1cSOliver Stannard... 442