1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=thumbv8.1m.main -run-pass=arm-low-overhead-loops %s -o - --verify-machineinstrs | FileCheck %s 3 4--- | 5 define dso_local arm_aapcscc void @test1(i32* nocapture %arg, i32* nocapture readonly %arg1, i32* nocapture readonly %arg2, i32 %arg3) { 6 bb: 7 %tmp = icmp eq i32 %arg3, 0 8 br i1 %tmp, label %bb27, label %bb4 9 10 bb4: ; preds = %bb 11 %tmp5 = add i32 %arg3, -1 12 %tmp6 = and i32 %arg3, 3 13 %tmp7 = icmp ult i32 %tmp5, 3 14 %tmp8 = add i32 %arg3, -4 15 %tmp9 = sub i32 %tmp8, %tmp6 16 %tmp10 = lshr i32 %tmp9, 2 17 %tmp11 = add nuw nsw i32 %tmp10, 1 18 br i1 %tmp7, label %bb13, label %bb12 19 20 bb12: ; preds = %bb4 21 %start = call i32 @llvm.start.loop.iterations.i32(i32 %tmp11) 22 br label %bb28 23 24 bb13: ; preds = %bb28, %bb4 25 %tmp14 = phi i32 [ 0, %bb4 ], [ %tmp54, %bb28 ] 26 %exit.count = phi i32 [ 0, %bb4 ], [ %loop.dec, %bb28 ] 27 %tmp15 = icmp eq i32 %tmp6, 0 28 br i1 %tmp15, label %bb27, label %bb16 29 30 bb16: ; preds = %bb13 31 %tmp17 = getelementptr inbounds i32, i32* %arg1, i32 %tmp14 32 %tmp18 = load i32, i32* %tmp17, align 4 33 %tmp19 = getelementptr inbounds i32, i32* %arg2, i32 %tmp14 34 %tmp20 = load i32, i32* %tmp19, align 4 35 %tmp21 = xor i32 %tmp20, %tmp18 36 %tmp22 = getelementptr inbounds i32, i32* %arg, i32 %tmp14 37 %tmp23 = load i32, i32* %tmp22, align 4 38 %tmp24 = add nsw i32 %tmp23, %tmp21 39 store i32 %tmp24, i32* %tmp22, align 4 40 %tmp25 = add nuw i32 %tmp14, 1 41 %tmp26 = icmp eq i32 %tmp6, 1 42 br i1 %tmp26, label %bb27, label %bb57 43 44 bb27: ; preds = %bb68, %bb57, %bb16, %bb13, %bb 45 ret void 46 47 bb28: ; preds = %bb28, %bb12 48 %lsr.iv15 = phi i32 [ %lsr.iv.next16, %bb28 ], [ %start, %bb12 ] 49 %lsr.iv = phi i32 [ %lsr.iv.next, %bb28 ], [ 0, %bb12 ] 50 %tmp29 = phi i32 [ 0, %bb12 ], [ %tmp54, %bb28 ] 51 %0 = bitcast i32* %arg1 to i8* 52 %1 = bitcast i32* %arg2 to i8* 53 %2 = bitcast i32* %arg to i8* 54 %uglygep14 = getelementptr i8, i8* %0, i32 %lsr.iv 55 %uglygep1415 = bitcast i8* %uglygep14 to i32* 56 %scevgep617 = bitcast i32* %uglygep1415 to i32* 57 %tmp34 = load i32, i32* %scevgep617, align 4 58 %uglygep8 = getelementptr i8, i8* %1, i32 %lsr.iv 59 %uglygep89 = bitcast i8* %uglygep8 to i32* 60 %scevgep418 = bitcast i32* %uglygep89 to i32* 61 %tmp35 = load i32, i32* %scevgep418, align 4 62 %tmp36 = xor i32 %tmp35, %tmp34 63 %uglygep2 = getelementptr i8, i8* %2, i32 %lsr.iv 64 %uglygep23 = bitcast i8* %uglygep2 to i32* 65 %scevgep219 = bitcast i32* %uglygep23 to i32* 66 %tmp37 = load i32, i32* %scevgep219, align 4 67 %tmp38 = add nsw i32 %tmp37, %tmp36 68 store i32 %tmp38, i32* %scevgep219, align 4 69 %uglygep33 = getelementptr i8, i8* %0, i32 %lsr.iv 70 %uglygep3334 = bitcast i8* %uglygep33 to i32* 71 %scevgep14 = getelementptr i32, i32* %uglygep3334, i32 1 72 %tmp39 = load i32, i32* %scevgep14, align 4 73 %uglygep27 = getelementptr i8, i8* %1, i32 %lsr.iv 74 %uglygep2728 = bitcast i8* %uglygep27 to i32* 75 %scevgep11 = getelementptr i32, i32* %uglygep2728, i32 1 76 %tmp40 = load i32, i32* %scevgep11, align 4 77 %tmp41 = xor i32 %tmp40, %tmp39 78 %uglygep20 = getelementptr i8, i8* %2, i32 %lsr.iv 79 %uglygep2021 = bitcast i8* %uglygep20 to i32* 80 %scevgep9 = getelementptr i32, i32* %uglygep2021, i32 1 81 %tmp42 = load i32, i32* %scevgep9, align 4 82 %tmp43 = add nsw i32 %tmp42, %tmp41 83 store i32 %tmp43, i32* %scevgep9, align 4 84 %uglygep30 = getelementptr i8, i8* %0, i32 %lsr.iv 85 %uglygep3031 = bitcast i8* %uglygep30 to i32* 86 %scevgep12 = getelementptr i32, i32* %uglygep3031, i32 2 87 %tmp44 = load i32, i32* %scevgep12, align 4 88 %uglygep24 = getelementptr i8, i8* %1, i32 %lsr.iv 89 %uglygep2425 = bitcast i8* %uglygep24 to i32* 90 %scevgep10 = getelementptr i32, i32* %uglygep2425, i32 2 91 %tmp45 = load i32, i32* %scevgep10, align 4 92 %tmp46 = xor i32 %tmp45, %tmp44 93 %uglygep17 = getelementptr i8, i8* %2, i32 %lsr.iv 94 %uglygep1718 = bitcast i8* %uglygep17 to i32* 95 %scevgep8 = getelementptr i32, i32* %uglygep1718, i32 2 96 %tmp47 = load i32, i32* %scevgep8, align 4 97 %tmp48 = add nsw i32 %tmp47, %tmp46 98 store i32 %tmp48, i32* %scevgep8, align 4 99 %uglygep11 = getelementptr i8, i8* %0, i32 %lsr.iv 100 %uglygep1112 = bitcast i8* %uglygep11 to i32* 101 %scevgep5 = getelementptr i32, i32* %uglygep1112, i32 3 102 %tmp49 = load i32, i32* %scevgep5, align 4 103 %uglygep5 = getelementptr i8, i8* %1, i32 %lsr.iv 104 %uglygep56 = bitcast i8* %uglygep5 to i32* 105 %scevgep3 = getelementptr i32, i32* %uglygep56, i32 3 106 %tmp50 = load i32, i32* %scevgep3, align 4 107 %tmp51 = xor i32 %tmp50, %tmp49 108 %uglygep = getelementptr i8, i8* %2, i32 %lsr.iv 109 %uglygep1 = bitcast i8* %uglygep to i32* 110 %scevgep1 = getelementptr i32, i32* %uglygep1, i32 3 111 %tmp52 = load i32, i32* %scevgep1, align 4 112 %tmp53 = add nsw i32 %tmp52, %tmp51 113 store i32 %tmp53, i32* %scevgep1, align 4 114 %tmp54 = add nuw i32 %tmp29, 4 115 %lsr.iv.next = add i32 %lsr.iv, 16 116 %loop.dec = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %lsr.iv15, i32 1) 117 %tmp56 = icmp ne i32 %loop.dec, 0 118 %lsr.iv.next16 = add nsw i32 %lsr.iv15, -1 119 br i1 %tmp56, label %bb28, label %bb13 120 121 bb57: ; preds = %bb16 122 %tmp58 = getelementptr inbounds i32, i32* %arg1, i32 %tmp25 123 %tmp59 = load i32, i32* %tmp58, align 4 124 %tmp60 = getelementptr inbounds i32, i32* %arg2, i32 %tmp25 125 %tmp61 = load i32, i32* %tmp60, align 4 126 %tmp62 = xor i32 %tmp61, %tmp59 127 %tmp63 = getelementptr inbounds i32, i32* %arg, i32 %tmp25 128 %tmp64 = load i32, i32* %tmp63, align 4 129 %tmp65 = add nsw i32 %tmp64, %tmp62 130 store i32 %tmp65, i32* %tmp63, align 4 131 %tmp66 = add nuw i32 %tmp14, 2 132 %tmp67 = icmp eq i32 %tmp6, 2 133 br i1 %tmp67, label %bb27, label %bb68 134 135 bb68: ; preds = %bb57 136 %tmp69 = getelementptr inbounds i32, i32* %arg1, i32 %tmp66 137 %tmp70 = load i32, i32* %tmp69, align 4 138 %tmp71 = getelementptr inbounds i32, i32* %arg2, i32 %tmp66 139 %tmp72 = load i32, i32* %tmp71, align 4 140 %tmp73 = xor i32 %tmp72, %tmp70 141 %tmp74 = getelementptr inbounds i32, i32* %arg, i32 %tmp66 142 %tmp75 = load i32, i32* %tmp74, align 4 143 %tmp76 = add nsw i32 %tmp75, %tmp73 144 store i32 %tmp76, i32* %tmp74, align 4 145 br label %bb27 146 } 147 148 declare i32 @llvm.start.loop.iterations.i32(i32) 149 declare i32 @llvm.loop.decrement.reg.i32.i32.i32(i32, i32) 150 151... 152--- 153name: test1 154alignment: 2 155exposesReturnsTwice: false 156legalized: false 157regBankSelected: false 158selected: false 159failedISel: false 160tracksRegLiveness: true 161hasWinCFI: false 162registers: [] 163liveins: 164 - { reg: '$r0', virtual-reg: '' } 165 - { reg: '$r1', virtual-reg: '' } 166 - { reg: '$r2', virtual-reg: '' } 167 - { reg: '$r3', virtual-reg: '' } 168frameInfo: 169 isFrameAddressTaken: false 170 isReturnAddressTaken: false 171 hasStackMap: false 172 hasPatchPoint: false 173 stackSize: 40 174 offsetAdjustment: 0 175 maxAlignment: 4 176 adjustsStack: false 177 hasCalls: false 178 stackProtector: '' 179 maxCallFrameSize: 0 180 cvBytesOfCalleeSavedRegisters: 0 181 hasOpaqueSPAdjustment: false 182 hasVAStart: false 183 hasMustTailInVarArgFunc: false 184 localFrameSize: 0 185 savePoint: '' 186 restorePoint: '' 187fixedStack: [] 188stack: 189 - { id: 0, name: '', type: spill-slot, offset: -40, size: 4, alignment: 4, 190 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 191 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 192 - { id: 1, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 193 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false, 194 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 195 - { id: 2, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 196 stack-id: default, callee-saved-register: '$r11', callee-saved-restored: true, 197 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 198 - { id: 3, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4, 199 stack-id: default, callee-saved-register: '$r10', callee-saved-restored: true, 200 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 201 - { id: 4, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4, 202 stack-id: default, callee-saved-register: '$r9', callee-saved-restored: true, 203 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 204 - { id: 5, name: '', type: spill-slot, offset: -20, size: 4, alignment: 4, 205 stack-id: default, callee-saved-register: '$r8', callee-saved-restored: true, 206 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 207 - { id: 6, name: '', type: spill-slot, offset: -24, size: 4, alignment: 4, 208 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true, 209 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 210 - { id: 7, name: '', type: spill-slot, offset: -28, size: 4, alignment: 4, 211 stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true, 212 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 213 - { id: 8, name: '', type: spill-slot, offset: -32, size: 4, alignment: 4, 214 stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true, 215 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 216 - { id: 9, name: '', type: spill-slot, offset: -36, size: 4, alignment: 4, 217 stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true, 218 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 219callSites: [] 220constants: [] 221machineFunctionInfo: {} 222body: | 223 ; CHECK-LABEL: name: test1 224 ; CHECK: bb.0.bb: 225 ; CHECK: successors: %bb.8(0x30000000), %bb.1(0x50000000) 226 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 227 ; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr 228 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 36 229 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 230 ; CHECK: frame-setup CFI_INSTRUCTION offset $r11, -8 231 ; CHECK: frame-setup CFI_INSTRUCTION offset $r10, -12 232 ; CHECK: frame-setup CFI_INSTRUCTION offset $r9, -16 233 ; CHECK: frame-setup CFI_INSTRUCTION offset $r8, -20 234 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -24 235 ; CHECK: frame-setup CFI_INSTRUCTION offset $r6, -28 236 ; CHECK: frame-setup CFI_INSTRUCTION offset $r5, -32 237 ; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -36 238 ; CHECK: $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg 239 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 40 240 ; CHECK: tCMPi8 renamable $r3, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 241 ; CHECK: tBcc %bb.8, 0 /* CC::eq */, killed $cpsr 242 ; CHECK: bb.1.bb4: 243 ; CHECK: successors: %bb.2(0x40000000), %bb.3(0x40000000) 244 ; CHECK: liveins: $r0, $r1, $r2, $r3 245 ; CHECK: renamable $r4, dead $cpsr = tSUBi3 renamable $r3, 1, 14 /* CC::al */, $noreg 246 ; CHECK: renamable $r7 = t2ANDri renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg 247 ; CHECK: tCMPi8 killed renamable $r4, 3, 14 /* CC::al */, $noreg, implicit-def $cpsr 248 ; CHECK: tSTRspi killed renamable $r7, $sp, 0, 14 /* CC::al */, $noreg :: (store 4 into %stack.0) 249 ; CHECK: tBcc %bb.3, 2 /* CC::hs */, killed $cpsr 250 ; CHECK: bb.2: 251 ; CHECK: successors: %bb.5(0x80000000) 252 ; CHECK: liveins: $r0, $r1, $r2 253 ; CHECK: renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg 254 ; CHECK: tB %bb.5, 14 /* CC::al */, $noreg 255 ; CHECK: bb.3.bb12: 256 ; CHECK: successors: %bb.4(0x80000000) 257 ; CHECK: liveins: $r0, $r1, $r2, $r3 258 ; CHECK: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg 259 ; CHECK: renamable $r4, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg 260 ; CHECK: renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14 /* CC::al */, $noreg 261 ; CHECK: renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg 262 ; CHECK: renamable $r3 = nuw nsw t2ADDrs killed renamable $r4, killed renamable $r3, 19, 14 /* CC::al */, $noreg, $noreg 263 ; CHECK: $r12 = tMOVr killed $r3, 14 /* CC::al */, $noreg 264 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 265 ; CHECK: bb.4.bb28: 266 ; CHECK: successors: %bb.4(0x7c000000), %bb.5(0x04000000) 267 ; CHECK: liveins: $r0, $r1, $r2, $r3, $r8, $r12 268 ; CHECK: renamable $r5 = tLDRr renamable $r1, $r3, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep617) 269 ; CHECK: renamable $r7, dead $cpsr = tADDrr renamable $r2, renamable $r3, 14 /* CC::al */, $noreg 270 ; CHECK: renamable $r6 = tLDRr renamable $r2, $r3, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep418) 271 ; CHECK: $lr = tMOVr killed $r12, 14 /* CC::al */, $noreg 272 ; CHECK: renamable $r8 = nuw t2ADDri killed renamable $r8, 4, 14 /* CC::al */, $noreg, $noreg 273 ; CHECK: renamable $r5, dead $cpsr = tEOR killed renamable $r5, killed renamable $r6, 14 /* CC::al */, $noreg 274 ; CHECK: renamable $r6 = tLDRr renamable $r0, $r3, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep219) 275 ; CHECK: $lr = t2SUBri killed renamable $lr, 1, 14 /* CC::al */, $noreg, $noreg 276 ; CHECK: $r12 = tMOVr $lr, 14 /* CC::al */, $noreg 277 ; CHECK: renamable $r5 = nsw tADDhirr killed renamable $r5, killed renamable $r6, 14 /* CC::al */, $noreg 278 ; CHECK: tSTRr killed renamable $r5, renamable $r0, $r3, 14 /* CC::al */, $noreg :: (store 4 into %ir.scevgep219) 279 ; CHECK: renamable $r5, dead $cpsr = tADDrr renamable $r1, renamable $r3, 14 /* CC::al */, $noreg 280 ; CHECK: renamable $r4 = tLDRi renamable $r7, 1, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep11) 281 ; CHECK: renamable $r6 = tLDRi renamable $r5, 1, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep14) 282 ; CHECK: renamable $r9 = t2EORrr killed renamable $r4, killed renamable $r6, 14 /* CC::al */, $noreg, $noreg 283 ; CHECK: renamable $r6, dead $cpsr = tADDrr renamable $r0, renamable $r3, 14 /* CC::al */, $noreg 284 ; CHECK: $r11 = t2ADDri $r6, 4, 14 /* CC::al */, $noreg, $noreg 285 ; CHECK: renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 16, 14 /* CC::al */, $noreg 286 ; CHECK: t2LDMIA killed $r11, 14 /* CC::al */, $noreg, def $r4, def $r10, def $r11 :: (load 4 from %ir.scevgep9), (load 4 from %ir.scevgep8), (load 4 from %ir.scevgep1) 287 ; CHECK: renamable $r4 = nsw tADDhirr killed renamable $r4, killed renamable $r9, 14 /* CC::al */, $noreg 288 ; CHECK: tSTRi killed renamable $r4, renamable $r6, 1, 14 /* CC::al */, $noreg :: (store 4 into %ir.scevgep9) 289 ; CHECK: renamable $r9 = t2LDRi12 renamable $r5, 8, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep12) 290 ; CHECK: renamable $r4 = tLDRi renamable $r7, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep10) 291 ; CHECK: renamable $r4 = t2EORrr killed renamable $r4, killed renamable $r9, 14 /* CC::al */, $noreg, $noreg 292 ; CHECK: renamable $r4 = nsw tADDhirr killed renamable $r4, killed renamable $r10, 14 /* CC::al */, $noreg 293 ; CHECK: tSTRi killed renamable $r4, renamable $r6, 2, 14 /* CC::al */, $noreg :: (store 4 into %ir.scevgep8) 294 ; CHECK: renamable $r4 = tLDRi killed renamable $r5, 3, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep5) 295 ; CHECK: renamable $r5 = tLDRi killed renamable $r7, 3, 14 /* CC::al */, $noreg :: (load 4 from %ir.scevgep3) 296 ; CHECK: renamable $r4, dead $cpsr = tEOR killed renamable $r4, killed renamable $r5, 14 /* CC::al */, $noreg 297 ; CHECK: renamable $r4 = nsw tADDhirr killed renamable $r4, killed renamable $r11, 14 /* CC::al */, $noreg 298 ; CHECK: tSTRi killed renamable $r4, killed renamable $r6, 3, 14 /* CC::al */, $noreg :: (store 4 into %ir.scevgep1) 299 ; CHECK: t2CMPri killed renamable $lr, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 300 ; CHECK: tBcc %bb.4, 1 /* CC::ne */, killed $cpsr 301 ; CHECK: tB %bb.5, 14 /* CC::al */, $noreg 302 ; CHECK: bb.5.bb13: 303 ; CHECK: successors: %bb.8(0x30000000), %bb.6(0x50000000) 304 ; CHECK: liveins: $r0, $r1, $r2, $r8 305 ; CHECK: renamable $r5 = tLDRspi $sp, 0, 14 /* CC::al */, $noreg :: (load 4 from %stack.0) 306 ; CHECK: tCBZ $r5, %bb.8 307 ; CHECK: bb.6.bb16: 308 ; CHECK: successors: %bb.8(0x40000000), %bb.7(0x40000000) 309 ; CHECK: liveins: $r0, $r1, $r2, $r5, $r8 310 ; CHECK: renamable $lr = t2LDRs renamable $r1, renamable $r8, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp17) 311 ; CHECK: tCMPi8 renamable $r5, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 312 ; CHECK: renamable $r3 = t2LDRs renamable $r2, renamable $r8, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp19) 313 ; CHECK: renamable $lr = t2EORrr killed renamable $lr, killed renamable $r3, 14 /* CC::al */, $noreg, $noreg 314 ; CHECK: renamable $r3 = t2LDRs renamable $r0, renamable $r8, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp22) 315 ; CHECK: renamable $r3 = nsw tADDhirr killed renamable $r3, killed renamable $lr, 14 /* CC::al */, $noreg 316 ; CHECK: t2STRs killed renamable $r3, renamable $r0, renamable $r8, 2, 14 /* CC::al */, $noreg :: (store 4 into %ir.tmp22) 317 ; CHECK: tBcc %bb.8, 0 /* CC::eq */, killed $cpsr 318 ; CHECK: bb.7.bb57: 319 ; CHECK: successors: %bb.8(0x40000000), %bb.9(0x40000000) 320 ; CHECK: liveins: $r0, $r1, $r2, $r5, $r8 321 ; CHECK: renamable $r3 = nuw t2ADDri renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg 322 ; CHECK: tCMPi8 killed renamable $r5, 2, 14 /* CC::al */, $noreg, implicit-def $cpsr 323 ; CHECK: renamable $r7 = t2LDRs renamable $r1, renamable $r3, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp58) 324 ; CHECK: renamable $r6 = t2LDRs renamable $r2, renamable $r3, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp60) 325 ; CHECK: renamable $r7 = t2EORrr killed renamable $r7, killed renamable $r6, 14 /* CC::al */, $noreg, $noreg 326 ; CHECK: renamable $r6 = t2LDRs renamable $r0, renamable $r3, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp63) 327 ; CHECK: renamable $r7 = nsw tADDhirr killed renamable $r7, killed renamable $r6, 14 /* CC::al */, $noreg 328 ; CHECK: t2STRs killed renamable $r7, renamable $r0, killed renamable $r3, 2, 14 /* CC::al */, $noreg :: (store 4 into %ir.tmp63) 329 ; CHECK: tBcc %bb.9, 1 /* CC::ne */, killed $cpsr 330 ; CHECK: bb.8.bb27: 331 ; CHECK: $sp = tADDspi $sp, 1, 14 /* CC::al */, $noreg 332 ; CHECK: $sp = t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $r11, def $pc 333 ; CHECK: bb.9.bb68: 334 ; CHECK: liveins: $r0, $r1, $r2, $r8 335 ; CHECK: renamable $r3 = nuw t2ADDri killed renamable $r8, 2, 14 /* CC::al */, $noreg, $noreg 336 ; CHECK: renamable $r1 = t2LDRs killed renamable $r1, renamable $r3, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp69) 337 ; CHECK: renamable $r2 = t2LDRs killed renamable $r2, renamable $r3, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp71) 338 ; CHECK: renamable $r1, dead $cpsr = tEOR killed renamable $r1, killed renamable $r2, 14 /* CC::al */, $noreg 339 ; CHECK: renamable $r2 = t2LDRs renamable $r0, renamable $r3, 2, 14 /* CC::al */, $noreg :: (load 4 from %ir.tmp74) 340 ; CHECK: renamable $r1 = nsw tADDhirr killed renamable $r1, killed renamable $r2, 14 /* CC::al */, $noreg 341 ; CHECK: t2STRs killed renamable $r1, killed renamable $r0, killed renamable $r3, 2, 14 /* CC::al */, $noreg :: (store 4 into %ir.tmp74) 342 ; CHECK: $sp = tADDspi $sp, 1, 14 /* CC::al */, $noreg 343 ; CHECK: $sp = t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $r11, def $pc 344 bb.0.bb: 345 successors: %bb.8(0x30000000), %bb.1(0x50000000) 346 liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $lr 347 348 $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr 349 frame-setup CFI_INSTRUCTION def_cfa_offset 36 350 frame-setup CFI_INSTRUCTION offset $lr, -4 351 frame-setup CFI_INSTRUCTION offset $r11, -8 352 frame-setup CFI_INSTRUCTION offset $r10, -12 353 frame-setup CFI_INSTRUCTION offset $r9, -16 354 frame-setup CFI_INSTRUCTION offset $r8, -20 355 frame-setup CFI_INSTRUCTION offset $r7, -24 356 frame-setup CFI_INSTRUCTION offset $r6, -28 357 frame-setup CFI_INSTRUCTION offset $r5, -32 358 frame-setup CFI_INSTRUCTION offset $r4, -36 359 $sp = frame-setup tSUBspi $sp, 1, 14, $noreg 360 frame-setup CFI_INSTRUCTION def_cfa_offset 40 361 tCMPi8 renamable $r3, 0, 14, $noreg, implicit-def $cpsr 362 tBcc %bb.8, 0, killed $cpsr 363 364 bb.1.bb4: 365 successors: %bb.2(0x40000000), %bb.3(0x40000000) 366 liveins: $r0, $r1, $r2, $r3 367 368 renamable $r4, dead $cpsr = tSUBi3 renamable $r3, 1, 14, $noreg 369 renamable $r7 = t2ANDri renamable $r3, 3, 14, $noreg, $noreg 370 tCMPi8 killed renamable $r4, 3, 14, $noreg, implicit-def $cpsr 371 tSTRspi killed renamable $r7, $sp, 0, 14, $noreg :: (store 4 into %stack.0) 372 tBcc %bb.3, 2, killed $cpsr 373 374 bb.2: 375 successors: %bb.5(0x80000000) 376 liveins: $r0, $r1, $r2 377 378 renamable $r8 = t2MOVi 0, 14, $noreg, $noreg 379 tB %bb.5, 14, $noreg 380 381 bb.3.bb12: 382 successors: %bb.4(0x80000000) 383 liveins: $r0, $r1, $r2, $r3 384 385 renamable $r3 = t2BICri killed renamable $r3, 3, 14, $noreg, $noreg 386 renamable $r4, dead $cpsr = tMOVi8 1, 14, $noreg 387 renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14, $noreg 388 renamable $r8 = t2MOVi 0, 14, $noreg, $noreg 389 renamable $r3 = nuw nsw t2ADDrs killed renamable $r4, killed renamable $r3, 19, 14, $noreg, $noreg 390 $lr = t2DoLoopStart renamable $r3 391 $r12 = tMOVr killed $r3, 14, $noreg 392 renamable $r3, dead $cpsr = tMOVi8 0, 14, $noreg 393 394 bb.4.bb28: 395 successors: %bb.4(0x7c000000), %bb.5(0x04000000) 396 liveins: $r0, $r1, $r2, $r3, $r8, $r12 397 398 renamable $r5 = tLDRr renamable $r1, $r3, 14, $noreg :: (load 4 from %ir.scevgep617) 399 renamable $r7, dead $cpsr = tADDrr renamable $r2, renamable $r3, 14, $noreg 400 renamable $r6 = tLDRr renamable $r2, $r3, 14, $noreg :: (load 4 from %ir.scevgep418) 401 $lr = tMOVr $r12, 14, $noreg 402 renamable $r8 = nuw t2ADDri killed renamable $r8, 4, 14, $noreg, $noreg 403 renamable $r5, dead $cpsr = tEOR killed renamable $r5, killed renamable $r6, 14, $noreg 404 renamable $r6 = tLDRr renamable $r0, $r3, 14, $noreg :: (load 4 from %ir.scevgep219) 405 renamable $lr = t2LoopDec killed renamable $lr, 1 406 $r12 = tMOVr $lr, 14, $noreg 407 renamable $r5 = nsw tADDhirr killed renamable $r5, killed renamable $r6, 14, $noreg 408 tSTRr killed renamable $r5, renamable $r0, $r3, 14, $noreg :: (store 4 into %ir.scevgep219) 409 renamable $r5, dead $cpsr = tADDrr renamable $r1, renamable $r3, 14, $noreg 410 renamable $r4 = tLDRi renamable $r7, 1, 14, $noreg :: (load 4 from %ir.scevgep11) 411 renamable $r6 = tLDRi renamable $r5, 1, 14, $noreg :: (load 4 from %ir.scevgep14) 412 renamable $r9 = t2EORrr killed renamable $r4, killed renamable $r6, 14, $noreg, $noreg 413 renamable $r6, dead $cpsr = tADDrr renamable $r0, renamable $r3, 14, $noreg 414 $r11 = t2ADDri $r6, 4, 14, $noreg, $noreg 415 renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 16, 14, $noreg 416 t2LDMIA killed $r11, 14, $noreg, def $r4, def $r10, def $r11 :: (load 4 from %ir.scevgep9), (load 4 from %ir.scevgep8), (load 4 from %ir.scevgep1) 417 renamable $r4 = nsw tADDhirr killed renamable $r4, killed renamable $r9, 14, $noreg 418 tSTRi killed renamable $r4, renamable $r6, 1, 14, $noreg :: (store 4 into %ir.scevgep9) 419 renamable $r9 = t2LDRi12 renamable $r5, 8, 14, $noreg :: (load 4 from %ir.scevgep12) 420 renamable $r4 = tLDRi renamable $r7, 2, 14, $noreg :: (load 4 from %ir.scevgep10) 421 renamable $r4 = t2EORrr killed renamable $r4, killed renamable $r9, 14, $noreg, $noreg 422 renamable $r4 = nsw tADDhirr killed renamable $r4, killed renamable $r10, 14, $noreg 423 tSTRi killed renamable $r4, renamable $r6, 2, 14, $noreg :: (store 4 into %ir.scevgep8) 424 renamable $r4 = tLDRi killed renamable $r5, 3, 14, $noreg :: (load 4 from %ir.scevgep5) 425 renamable $r5 = tLDRi killed renamable $r7, 3, 14, $noreg :: (load 4 from %ir.scevgep3) 426 renamable $r4, dead $cpsr = tEOR killed renamable $r4, killed renamable $r5, 14, $noreg 427 renamable $r4 = nsw tADDhirr killed renamable $r4, killed renamable $r11, 14, $noreg 428 tSTRi killed renamable $r4, killed renamable $r6, 3, 14, $noreg :: (store 4 into %ir.scevgep1) 429 t2LoopEnd killed renamable $lr, %bb.4, implicit-def dead $cpsr 430 tB %bb.5, 14, $noreg 431 432 bb.5.bb13: 433 successors: %bb.8(0x30000000), %bb.6(0x50000000) 434 liveins: $r0, $r1, $r2, $r8 435 436 renamable $r5 = tLDRspi $sp, 0, 14, $noreg :: (load 4 from %stack.0) 437 tCBZ $r5, %bb.8 438 439 bb.6.bb16: 440 successors: %bb.8(0x40000000), %bb.7(0x40000000) 441 liveins: $r0, $r1, $r2, $r5, $r8 442 443 renamable $lr = t2LDRs renamable $r1, renamable $r8, 2, 14, $noreg :: (load 4 from %ir.tmp17) 444 tCMPi8 renamable $r5, 1, 14, $noreg, implicit-def $cpsr 445 renamable $r3 = t2LDRs renamable $r2, renamable $r8, 2, 14, $noreg :: (load 4 from %ir.tmp19) 446 renamable $lr = t2EORrr killed renamable $lr, killed renamable $r3, 14, $noreg, $noreg 447 renamable $r3 = t2LDRs renamable $r0, renamable $r8, 2, 14, $noreg :: (load 4 from %ir.tmp22) 448 renamable $r3 = nsw tADDhirr killed renamable $r3, killed renamable $lr, 14, $noreg 449 t2STRs killed renamable $r3, renamable $r0, renamable $r8, 2, 14, $noreg :: (store 4 into %ir.tmp22) 450 tBcc %bb.8, 0, killed $cpsr 451 452 bb.7.bb57: 453 successors: %bb.8(0x40000000), %bb.9(0x40000000) 454 liveins: $r0, $r1, $r2, $r5, $r8 455 456 renamable $r3 = nuw t2ADDri renamable $r8, 1, 14, $noreg, $noreg 457 tCMPi8 killed renamable $r5, 2, 14, $noreg, implicit-def $cpsr 458 renamable $r7 = t2LDRs renamable $r1, renamable $r3, 2, 14, $noreg :: (load 4 from %ir.tmp58) 459 renamable $r6 = t2LDRs renamable $r2, renamable $r3, 2, 14, $noreg :: (load 4 from %ir.tmp60) 460 renamable $r7 = t2EORrr killed renamable $r7, killed renamable $r6, 14, $noreg, $noreg 461 renamable $r6 = t2LDRs renamable $r0, renamable $r3, 2, 14, $noreg :: (load 4 from %ir.tmp63) 462 renamable $r7 = nsw tADDhirr killed renamable $r7, killed renamable $r6, 14, $noreg 463 t2STRs killed renamable $r7, renamable $r0, killed renamable $r3, 2, 14, $noreg :: (store 4 into %ir.tmp63) 464 tBcc %bb.9, 1, killed $cpsr 465 466 bb.8.bb27: 467 $sp = tADDspi $sp, 1, 14, $noreg 468 $sp = t2LDMIA_RET $sp, 14, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $r11, def $pc 469 470 bb.9.bb68: 471 liveins: $r0, $r1, $r2, $r8 472 473 renamable $r3 = nuw t2ADDri killed renamable $r8, 2, 14, $noreg, $noreg 474 renamable $r1 = t2LDRs killed renamable $r1, renamable $r3, 2, 14, $noreg :: (load 4 from %ir.tmp69) 475 renamable $r2 = t2LDRs killed renamable $r2, renamable $r3, 2, 14, $noreg :: (load 4 from %ir.tmp71) 476 renamable $r1, dead $cpsr = tEOR killed renamable $r1, killed renamable $r2, 14, $noreg 477 renamable $r2 = t2LDRs renamable $r0, renamable $r3, 2, 14, $noreg :: (load 4 from %ir.tmp74) 478 renamable $r1 = nsw tADDhirr killed renamable $r1, killed renamable $r2, 14, $noreg 479 t2STRs killed renamable $r1, killed renamable $r0, killed renamable $r3, 2, 14, $noreg :: (store 4 into %ir.tmp74) 480 $sp = tADDspi $sp, 1, 14, $noreg 481 $sp = t2LDMIA_RET $sp, 14, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $r11, def $pc 482 483... 484