1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve -run-pass=arm-block-placement -verify-machineinstrs %s -o - | FileCheck %s 3--- | 4 5 ; Checks that Predecessor gets moved (to before the LoopExit) if it contains a backward WLS. 6 define void @backwards_branch(i32 %N, i32* nocapture %a, i32* nocapture readonly %b) { 7 entry: 8 unreachable 9 } 10 11 ; Checks that Predecessor (containing a backwards WLS) does not get moved to before the loopExit if it is the entry block. 12 define void @backwards_branch_entry_block(i32 %N, i32* nocapture %a, i32* nocapture readonly %b) { 13 entry: 14 unreachable 15 } 16 17 ; Checks that Predecessor (to which a forward WLS exists) is not moved if moving it would cause the WLS to become backwards branching. 18 define void @backwards_branch_backwards_wls(i32 %N, i32 %M, i32* nocapture %a, i32* nocapture %b, i32* nocapture %c) { 19 entry: 20 unreachable 21 } 22 23 ; Checks that a MachineFunction is unaffected if it doesn't contain any WLS (pseudo) instruction. 24 define void @no_predecessor(i32 %N, i32 %M, i32* nocapture %a, i32* nocapture %b, i32* nocapture %c) { 25 entry: 26 unreachable 27 } 28 29 ; Within a nested (Both the WLS and loopExit are at depth=3 here) loop, checks that Predecessor 30 ; gets moved (in backward direction) if there exists a backdwards WLS from it to the LoopExit. 31 define void @nested_loops(i32 %n, i32 %m, i32 %l, i8* noalias %X, i8* noalias %Y) { 32 entry: 33 unreachable 34 } 35 36 ; Checks that Predecessor (to which a forward WLS exists) is moved if moving it would NOT cause the WLS 37 ; to become backwards branching. 38 define void @backwards_branch_forwards_wls(i32 %N, i32 %M, i32* nocapture %a, i32* nocapture %b, i32* nocapture %c) { 39 entry: 40 unreachable 41 } 42 43 ; Checks that multiple predecessor case is handled appropriately 44 define void @multiple_predecessors(i32 %d, i32 %e, i32 %f) { 45 entry: 46 unreachable 47 } 48 49 declare dso_local i32 @g(...) 50 51 declare dso_local i32 @h(...) 52 53... 54--- 55name: backwards_branch 56body: | 57 ; CHECK-LABEL: name: backwards_branch 58 ; CHECK: bb.0: 59 ; CHECK: successors: %bb.1(0x80000000) 60 ; CHECK: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 61 ; CHECK: t2IT 11, 8, implicit-def $itstate 62 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 63 ; CHECK: bb.1: 64 ; CHECK: successors: %bb.3(0x80000000) 65 ; CHECK: $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr 66 ; CHECK: t2B %bb.3, 14 /* CC::al */, $noreg 67 ; CHECK: bb.2: 68 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 69 ; CHECK: bb.3: 70 ; CHECK: successors: %bb.3(0x7c000000), %bb.2(0x04000000) 71 ; CHECK: renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg 72 ; CHECK: tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg 73 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr 74 ; CHECK: t2B %bb.2, 14 /* CC::al */, $noreg 75 bb.0: 76 successors: %bb.2(0x80000000) 77 liveins: $r0, $r1, $r2, $lr 78 79 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 80 t2IT 11, 8, implicit-def $itstate 81 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 82 83 bb.1: 84 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 85 86 bb.2: 87 successors: %bb.3(0x80000000) 88 liveins: $r0, $r1, $r2 89 90 $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr 91 92 bb.3: 93 successors: %bb.3(0x7c000000), %bb.1(0x04000000) 94 liveins: $lr, $r1, $r2 95 96 renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg 97 tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg 98 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr 99 t2B %bb.1, 14 /* CC::al */, $noreg 100 101... 102--- 103name: backwards_branch_entry_block 104body: | 105 ; CHECK-LABEL: name: backwards_branch_entry_block 106 ; CHECK: bb.0: 107 ; CHECK: successors: %bb.2(0x80000000) 108 ; CHECK: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 109 ; CHECK: t2IT 11, 8, implicit-def $itstate 110 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 111 ; CHECK: bb.1: 112 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 113 ; CHECK: bb.2: 114 ; CHECK: successors: %bb.3(0x80000000) 115 ; CHECK: $lr = t2WhileLoopStartLR killed renamable $r0, %bb.0, implicit-def dead $cpsr 116 ; CHECK: bb.3: 117 ; CHECK: successors: %bb.3(0x7c000000), %bb.1(0x04000000) 118 ; CHECK: renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg 119 ; CHECK: tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg 120 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr 121 ; CHECK: t2B %bb.1, 14 /* CC::al */, $noreg 122 bb.0: 123 successors: %bb.2(0x80000000) 124 liveins: $r0, $r1, $r2, $lr 125 126 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 127 t2IT 11, 8, implicit-def $itstate 128 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 129 130 bb.1: 131 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 132 133 bb.2: 134 successors: %bb.3(0x80000000) 135 liveins: $r0, $r1, $r2 136 137 $lr = t2WhileLoopStartLR killed renamable $r0, %bb.0, implicit-def dead $cpsr 138 139 bb.3: 140 successors: %bb.3(0x7c000000), %bb.1(0x04000000) 141 liveins: $lr, $r1, $r2 142 143 renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg 144 tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg 145 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr 146 t2B %bb.1, 14 /* CC::al */, $noreg 147 148... 149--- 150name: backwards_branch_backwards_wls 151body: | 152 ; CHECK-LABEL: name: backwards_branch_backwards_wls 153 ; CHECK: bb.0: 154 ; CHECK: successors: %bb.2(0x80000000) 155 ; CHECK: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 156 ; CHECK: t2IT 11, 8, implicit-def $itstate 157 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 158 ; CHECK: bb.1: 159 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 160 ; CHECK: bb.2: 161 ; CHECK: successors: %bb.3(0x40000000), %bb.5(0x40000000) 162 ; CHECK: $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr 163 ; CHECK: t2B %bb.5, 14 /* CC::al */, $noreg 164 ; CHECK: bb.3: 165 ; CHECK: successors: %bb.1(0x7c000000), %bb.4(0x04000000) 166 ; CHECK: $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr 167 ; CHECK: t2B %bb.4, 14 /* CC::al */, $noreg 168 ; CHECK: bb.4: 169 ; CHECK: successors: %bb.1(0x40000000), %bb.4(0x40000000) 170 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr 171 ; CHECK: t2B %bb.1, 14 /* CC::al */, $noreg 172 ; CHECK: bb.5: 173 ; CHECK: successors: %bb.5(0x40000000), %bb.3(0x40000000) 174 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr 175 ; CHECK: t2B %bb.3, 14 /* CC::al */, $noreg 176 bb.0: 177 successors: %bb.2(0x80000000) 178 liveins: $r0, $r1, $r2, $lr 179 180 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 181 t2IT 11, 8, implicit-def $itstate 182 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 183 184 bb.1: 185 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 186 187 bb.2: 188 successors: %bb.3(0x80000000), %bb.5(0x80000000) 189 liveins: $r0, $r1, $r2 190 191 $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr 192 t2B %bb.5, 14 /* CC::al */, $noreg 193 194 bb.3: 195 successors: %bb.1(0x7c000000), %bb.4(0x04000000) 196 liveins: $lr, $r1, $r2 197 198 $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr 199 t2B %bb.4, 14 /* CC::al */, $noreg 200 201 bb.4: 202 successors: %bb.1, %bb.4 203 liveins: $lr, $r1, $r2 204 205 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr 206 t2B %bb.1, 14 /* CC::al */, $noreg 207 208 bb.5: 209 successors: %bb.5, %bb.3 210 liveins: $lr, $r1, $r2 211 212 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr 213 t2B %bb.3, 14 /* CC::al */, $noreg 214... 215--- 216name: no_predecessor 217body: | 218 ; CHECK-LABEL: name: no_predecessor 219 ; CHECK: bb.0: 220 ; CHECK: successors: %bb.2(0x30000000), %bb.1(0x50000000) 221 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, $r7, killed $lr, implicit-def $sp, implicit $sp 222 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 16 223 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 224 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8 225 ; CHECK: frame-setup CFI_INSTRUCTION offset $r5, -12 226 ; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -16 227 ; CHECK: $r7 = frame-setup tADDrSPi $sp, 2, 14 /* CC::al */, $noreg 228 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa $r7, 8 229 ; CHECK: $r4 = tMOVr killed $r0, 14 /* CC::al */, $noreg 230 ; CHECK: tBL 14 /* CC::al */, $noreg, @g, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 231 ; CHECK: tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 232 ; CHECK: t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr 233 ; CHECK: bb.1: 234 ; CHECK: successors: %bb.4(0x80000000) 235 ; CHECK: renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg 236 ; CHECK: renamable $r5 = t2LDRSHi12 killed renamable $r0, 0, 14 /* CC::al */, $noreg 237 ; CHECK: t2B %bb.4, 14 /* CC::al */, $noreg 238 ; CHECK: bb.2: 239 ; CHECK: successors: %bb.4(0x80000000) 240 ; CHECK: renamable $r5, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 241 ; CHECK: t2B %bb.4, 14 /* CC::al */, $noreg 242 ; CHECK: bb.3: 243 ; CHECK: successors: %bb.4(0x80000000) 244 ; CHECK: $r0 = tMOVr $r5, 14 /* CC::al */, $noreg 245 ; CHECK: tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def dead $r0 246 ; CHECK: bb.4: 247 ; CHECK: successors: %bb.5(0x04000000), %bb.3(0x7c000000) 248 ; CHECK: renamable $r0 = tLDRi renamable $r4, 0, 14 /* CC::al */, $noreg 249 ; CHECK: tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 250 ; CHECK: t2Bcc %bb.3, 1 /* CC::ne */, killed $cpsr 251 ; CHECK: bb.5: 252 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r7, def $pc 253 bb.0: 254 successors: %bb.1(0x30000000), %bb.2(0x50000000) 255 liveins: $r0, $r4, $r5, $lr 256 257 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, $r7, killed $lr, implicit-def $sp, implicit $sp 258 frame-setup CFI_INSTRUCTION def_cfa_offset 16 259 frame-setup CFI_INSTRUCTION offset $lr, -4 260 frame-setup CFI_INSTRUCTION offset $r7, -8 261 frame-setup CFI_INSTRUCTION offset $r5, -12 262 frame-setup CFI_INSTRUCTION offset $r4, -16 263 $r7 = frame-setup tADDrSPi $sp, 2, 14 /* CC::al */, $noreg 264 frame-setup CFI_INSTRUCTION def_cfa $r7, 8 265 $r4 = tMOVr killed $r0, 14 /* CC::al */, $noreg 266 tBL 14 /* CC::al */, $noreg, @g, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 267 tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 268 t2Bcc %bb.1, 0 /* CC::eq */, killed $cpsr 269 270 bb.2: 271 successors: %bb.3(0x80000000) 272 liveins: $r4 273 274 renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg 275 renamable $r5 = t2LDRSHi12 killed renamable $r0, 0, 14 /* CC::al */, $noreg 276 t2B %bb.3, 14 /* CC::al */, $noreg 277 278 bb.1: 279 successors: %bb.3(0x80000000) 280 liveins: $r4 281 282 renamable $r5, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 283 t2B %bb.3, 14 /* CC::al */, $noreg 284 285 bb.4: 286 successors: %bb.3(0x80000000) 287 liveins: $r4, $r5 288 289 $r0 = tMOVr $r5, 14 /* CC::al */, $noreg 290 tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def dead $r0 291 292 bb.3: 293 successors: %bb.5(0x04000000), %bb.4(0x7c000000) 294 liveins: $r4, $r5 295 296 renamable $r0 = tLDRi renamable $r4, 0, 14 /* CC::al */, $noreg 297 tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 298 t2Bcc %bb.4, 1 /* CC::ne */, killed $cpsr 299 300 bb.5: 301 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r7, def $pc 302... 303--- 304name: nested_loops 305alignment: 4 306tracksRegLiveness: true 307liveins: 308 - { reg: '$r0' } 309 - { reg: '$r1' } 310 - { reg: '$r2' } 311 - { reg: '$r3' } 312frameInfo: 313 stackSize: 32 314 maxAlignment: 4 315 maxCallFrameSize: 0 316fixedStack: 317 - { id: 0, size: 4, alignment: 8, isImmutable: true } 318stack: 319 - { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, callee-saved-register: '$lr', 320 callee-saved-restored: false } 321 - { id: 1, type: spill-slot, offset: -8, size: 4, alignment: 4, callee-saved-register: '$r10' } 322 - { id: 2, type: spill-slot, offset: -12, size: 4, alignment: 4, callee-saved-register: '$r9' } 323 - { id: 3, type: spill-slot, offset: -16, size: 4, alignment: 4, callee-saved-register: '$r8' } 324 - { id: 4, type: spill-slot, offset: -20, size: 4, alignment: 4, callee-saved-register: '$r7' } 325 - { id: 5, type: spill-slot, offset: -24, size: 4, alignment: 4, callee-saved-register: '$r6' } 326 - { id: 6, type: spill-slot, offset: -28, size: 4, alignment: 4, callee-saved-register: '$r5' } 327 - { id: 7, type: spill-slot, offset: -32, size: 4, alignment: 4, callee-saved-register: '$r4' } 328machineFunctionInfo: {} 329body: | 330 ; CHECK-LABEL: name: nested_loops 331 ; CHECK: bb.0: 332 ; CHECK: successors: %bb.1(0x80000000) 333 ; CHECK: liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $lr 334 ; 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 $lr 335 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 32 336 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 337 ; CHECK: frame-setup CFI_INSTRUCTION offset $r10, -8 338 ; CHECK: frame-setup CFI_INSTRUCTION offset $r9, -12 339 ; CHECK: frame-setup CFI_INSTRUCTION offset $r8, -16 340 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -20 341 ; CHECK: frame-setup CFI_INSTRUCTION offset $r6, -24 342 ; CHECK: frame-setup CFI_INSTRUCTION offset $r5, -28 343 ; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -32 344 ; CHECK: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 345 ; CHECK: t2IT 11, 8, implicit-def $itstate 346 ; CHECK: $sp = frame-destroy t2LDMIA_RET $sp, 11 /* CC::lt */, killed $cpsr, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc, implicit killed $itstate 347 ; CHECK: bb.1: 348 ; CHECK: successors: %bb.3(0x80000000) 349 ; CHECK: liveins: $r0, $r1, $r2, $r3 350 ; CHECK: renamable $r12 = t2LDRi12 $sp, 32, 14 /* CC::al */, $noreg :: (load (s32) from %fixed-stack.0, align 8) 351 ; CHECK: $r9 = tMOVr killed $r2, 14 /* CC::al */, $noreg 352 ; CHECK: renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg 353 ; CHECK: t2B %bb.3, 14 /* CC::al */, $noreg 354 ; CHECK: bb.2: 355 ; CHECK: successors: %bb.9(0x04000000), %bb.3(0x7c000000) 356 ; CHECK: liveins: $r0, $r1, $r3, $r8, $r9, $r12 357 ; CHECK: renamable $r8 = nuw nsw t2ADDri killed renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg 358 ; CHECK: renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 1, 14 /* CC::al */, $noreg 359 ; CHECK: tCMPhir renamable $r8, renamable $r0, 14 /* CC::al */, $noreg, implicit-def $cpsr 360 ; CHECK: renamable $r12 = t2ADDri killed renamable $r12, 1, 14 /* CC::al */, $noreg, $noreg 361 ; CHECK: t2Bcc %bb.9, 0 /* CC::eq */, killed $cpsr 362 ; CHECK: bb.3: 363 ; CHECK: successors: %bb.4(0x50000000), %bb.2(0x30000000) 364 ; CHECK: liveins: $r0, $r1, $r3, $r8, $r9, $r12 365 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 366 ; CHECK: t2Bcc %bb.2, 11 /* CC::lt */, killed $cpsr 367 ; CHECK: bb.4: 368 ; CHECK: successors: %bb.5(0x80000000) 369 ; CHECK: liveins: $r0, $r1, $r3, $r8, $r9, $r12 370 ; CHECK: renamable $r4, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 371 ; CHECK: $r10 = tMOVr $r12, 14 /* CC::al */, $noreg 372 ; CHECK: $r2 = tMOVr $r3, 14 /* CC::al */, $noreg 373 ; CHECK: t2B %bb.5, 14 /* CC::al */, $noreg 374 ; CHECK: bb.5: 375 ; CHECK: successors: %bb.7(0x50000000), %bb.6(0x30000000) 376 ; CHECK: liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12 377 ; CHECK: renamable $lr = t2WhileLoopStartLR killed renamable $r9, %bb.6, implicit-def dead $cpsr 378 ; CHECK: t2B %bb.7, 14 /* CC::al */, $noreg 379 ; CHECK: bb.6: 380 ; CHECK: successors: %bb.2(0x04000000), %bb.5(0x7c000000) 381 ; CHECK: liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12 382 ; CHECK: renamable $r4, dead $cpsr = nuw nsw tADDi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg 383 ; CHECK: renamable $r2, dead $cpsr = tADDi8 killed renamable $r2, 1, 14 /* CC::al */, $noreg 384 ; CHECK: tCMPr renamable $r4, renamable $r1, 14 /* CC::al */, $noreg, implicit-def $cpsr 385 ; CHECK: renamable $r10 = t2ADDri killed renamable $r10, 1, 14 /* CC::al */, $noreg, $noreg 386 ; CHECK: t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr 387 ; CHECK: t2B %bb.5, 14 /* CC::al */, $noreg 388 ; CHECK: bb.7: 389 ; CHECK: successors: %bb.8(0x80000000) 390 ; CHECK: liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12 391 ; CHECK: $r5 = tMOVr $r10, 14 /* CC::al */, $noreg 392 ; CHECK: $r6 = tMOVr $r2, 14 /* CC::al */, $noreg 393 ; CHECK: t2B %bb.8, 14 /* CC::al */, $noreg 394 ; CHECK: bb.8: 395 ; CHECK: successors: %bb.8(0x7c000000), %bb.6(0x04000000) 396 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12 397 ; CHECK: tSTRi killed $r0, $r1, 0, 14 /* CC::al */, $noreg 398 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.8, implicit-def dead $cpsr 399 ; CHECK: t2B %bb.6, 14 /* CC::al */, $noreg 400 ; CHECK: bb.9: 401 ; CHECK: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc 402 bb.0: 403 successors: %bb.1 404 liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $lr 405 406 $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 $lr 407 frame-setup CFI_INSTRUCTION def_cfa_offset 32 408 frame-setup CFI_INSTRUCTION offset $lr, -4 409 frame-setup CFI_INSTRUCTION offset $r10, -8 410 frame-setup CFI_INSTRUCTION offset $r9, -12 411 frame-setup CFI_INSTRUCTION offset $r8, -16 412 frame-setup CFI_INSTRUCTION offset $r7, -20 413 frame-setup CFI_INSTRUCTION offset $r6, -24 414 frame-setup CFI_INSTRUCTION offset $r5, -28 415 frame-setup CFI_INSTRUCTION offset $r4, -32 416 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 417 t2IT 11, 8, implicit-def $itstate 418 $sp = frame-destroy t2LDMIA_RET $sp, 11 /* CC::lt */, killed $cpsr, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc, implicit killed $itstate 419 420 bb.1: 421 liveins: $r0, $r1, $r2, $r3 422 423 renamable $r12 = t2LDRi12 $sp, 32, 14 /* CC::al */, $noreg :: (load (s32) from %fixed-stack.0, align 8) 424 $r9 = tMOVr killed $r2, 14 /* CC::al */, $noreg 425 renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg 426 t2B %bb.2, 14 /* CC::al */, $noreg 427 428 bb.8: 429 successors: %bb.9(0x04000000), %bb.2(0x7c000000) 430 liveins: $r0, $r1, $r3, $r8, $r9, $r12 431 432 renamable $r8 = nuw nsw t2ADDri killed renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg 433 renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 1, 14 /* CC::al */, $noreg 434 tCMPhir renamable $r8, renamable $r0, 14 /* CC::al */, $noreg, implicit-def $cpsr 435 renamable $r12 = t2ADDri killed renamable $r12, 1, 14 /* CC::al */, $noreg, $noreg 436 t2Bcc %bb.9, 0 /* CC::eq */, killed $cpsr 437 438 bb.2: 439 successors: %bb.3(0x50000000), %bb.8(0x30000000) 440 liveins: $r0, $r1, $r3, $r8, $r9, $r12 441 442 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 443 t2Bcc %bb.8, 11 /* CC::lt */, killed $cpsr 444 445 bb.3: 446 liveins: $r0, $r1, $r3, $r8, $r9, $r12 447 448 renamable $r4, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 449 $r10 = tMOVr $r12, 14 /* CC::al */, $noreg 450 $r2 = tMOVr $r3, 14 /* CC::al */, $noreg 451 t2B %bb.4, 14 /* CC::al */, $noreg 452 453 bb.7: 454 successors: %bb.8(0x04000000), %bb.4(0x7c000000) 455 liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12 456 457 renamable $r4, dead $cpsr = nuw nsw tADDi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg 458 renamable $r2, dead $cpsr = tADDi8 killed renamable $r2, 1, 14 /* CC::al */, $noreg 459 tCMPr renamable $r4, renamable $r1, 14 /* CC::al */, $noreg, implicit-def $cpsr 460 renamable $r10 = t2ADDri killed renamable $r10, 1, 14 /* CC::al */, $noreg, $noreg 461 t2Bcc %bb.8, 0 /* CC::eq */, killed $cpsr 462 463 bb.4: 464 successors: %bb.5(0x50000000), %bb.7(0x30000000) 465 liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12 466 467 renamable $lr = t2WhileLoopStartLR killed renamable $r9, %bb.7, implicit-def dead $cpsr 468 469 bb.5: 470 liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12 471 472 $r5 = tMOVr $r10, 14 /* CC::al */, $noreg 473 $r6 = tMOVr $r2, 14 /* CC::al */, $noreg 474 t2B %bb.6, 14 /* CC::al */, $noreg 475 476 bb.6: 477 successors: %bb.6(0x7c000000), %bb.7(0x04000000) 478 liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12 479 480 tSTRi killed $r0, $r1, 0, 14 /* CC::al */, $noreg 481 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr 482 t2B %bb.7, 14 /* CC::al */, $noreg 483 484 bb.9: 485 $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc 486 487... 488--- 489name: backwards_branch_forwards_wls 490body: | 491 ; CHECK-LABEL: name: backwards_branch_forwards_wls 492 ; CHECK: bb.0: 493 ; CHECK: successors: %bb.1(0x80000000) 494 ; CHECK: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 495 ; CHECK: t2IT 11, 8, implicit-def $itstate 496 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 497 ; CHECK: bb.1: 498 ; CHECK: successors: %bb.2(0x40000000), %bb.5(0x40000000) 499 ; CHECK: $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr 500 ; CHECK: t2B %bb.5, 14 /* CC::al */, $noreg 501 ; CHECK: bb.2: 502 ; CHECK: successors: %bb.4(0x40000000), %bb.3(0x40000000) 503 ; CHECK: $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr 504 ; CHECK: t2B %bb.4, 14 /* CC::al */, $noreg 505 ; CHECK: bb.3: 506 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 507 ; CHECK: bb.4: 508 ; CHECK: successors: %bb.3(0x40000000), %bb.4(0x40000000) 509 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr 510 ; CHECK: t2B %bb.3, 14 /* CC::al */, $noreg 511 ; CHECK: bb.5: 512 ; CHECK: successors: %bb.5(0x40000000), %bb.2(0x40000000) 513 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr 514 ; CHECK: t2B %bb.2, 14 /* CC::al */, $noreg 515 bb.0: 516 successors: %bb.2 517 liveins: $r0, $r1, $r2, $lr 518 519 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr 520 t2IT 11, 8, implicit-def $itstate 521 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate 522 523 bb.2: 524 successors: %bb.3, %bb.5 525 liveins: $r0, $r1, $r2 526 527 $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr 528 t2B %bb.5, 14 /* CC::al */, $noreg 529 530 bb.1: 531 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc 532 533 bb.3: 534 successors: %bb.4, %bb.1 535 liveins: $lr, $r1, $r2 536 537 $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr 538 t2B %bb.4, 14 /* CC::al */, $noreg 539 540 bb.4: 541 successors: %bb.1, %bb.4 542 liveins: $lr, $r1, $r2 543 544 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr 545 t2B %bb.1, 14 /* CC::al */, $noreg 546 547 bb.5: 548 successors: %bb.5, %bb.3 549 liveins: $lr, $r1, $r2 550 551 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr 552 t2B %bb.3, 14 /* CC::al */, $noreg 553 554... 555--- 556name: multiple_predecessors 557body: | 558 ; CHECK-LABEL: name: multiple_predecessors 559 ; CHECK: bb.0: 560 ; CHECK: successors: %bb.3(0x55555555), %bb.2(0x2aaaaaab) 561 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp 562 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8 563 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 564 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8 565 ; CHECK: $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg 566 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 12 567 ; CHECK: tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 568 ; CHECK: t2IT 0, 8, implicit-def $itstate 569 ; CHECK: tCMPi8 killed renamable $r1, 8, 0 /* CC::eq */, killed $cpsr, implicit-def $cpsr, implicit killed $itstate 570 ; CHECK: t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr 571 ; CHECK: t2B %bb.3, 14 /* CC::al */, $noreg 572 ; CHECK: bb.1: 573 ; CHECK: successors: %bb.6(0x40000000), %bb.3(0x40000000) 574 ; CHECK: renamable $lr = t2WhileLoopStartLR killed renamable $r2, %bb.3, implicit-def dead $cpsr 575 ; CHECK: t2B %bb.6, 14 /* CC::al */, $noreg 576 ; CHECK: bb.2: 577 ; CHECK: successors: %bb.4(0x40000000), %bb.3(0x40000000) 578 ; CHECK: renamable $lr = t2WhileLoopStartLR renamable $r2, %bb.3, implicit-def dead $cpsr 579 ; CHECK: t2B %bb.4, 14 /* CC::al */, $noreg 580 ; CHECK: bb.3: 581 ; CHECK: $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg 582 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0 583 ; CHECK: bb.4: 584 ; CHECK: successors: %bb.5(0x80000000) 585 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 586 ; CHECK: renamable $r1 = t2ADDri $sp, 2, 14 /* CC::al */, $noreg, $noreg 587 ; CHECK: renamable $r0 = IMPLICIT_DEF 588 ; CHECK: bb.5: 589 ; CHECK: successors: %bb.5(0x7c000000), %bb.1(0x04000000) 590 ; CHECK: renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 1, 0, $noreg, undef renamable $q0 591 ; CHECK: MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg 592 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr 593 ; CHECK: t2B %bb.1, 14 /* CC::al */, $noreg 594 ; CHECK: bb.6: 595 ; CHECK: successors: %bb.7(0x80000000) 596 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 597 ; CHECK: bb.7: 598 ; CHECK: successors: %bb.7(0x7c000000), %bb.3(0x04000000) 599 ; CHECK: renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 2, 0, $noreg, undef renamable $q0 600 ; CHECK: MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg 601 ; CHECK: renamable $lr = t2LoopEndDec killed renamable $lr, %bb.7, implicit-def dead $cpsr 602 ; CHECK: t2B %bb.3, 14 /* CC::al */, $noreg 603 bb.0: 604 successors: %bb.7(0x80000000), %bb.1(0x40000000) 605 liveins: $r0, $r1, $r2, $r7, $lr 606 607 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp 608 frame-setup CFI_INSTRUCTION def_cfa_offset 8 609 frame-setup CFI_INSTRUCTION offset $lr, -4 610 frame-setup CFI_INSTRUCTION offset $r7, -8 611 $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg 612 frame-setup CFI_INSTRUCTION def_cfa_offset 12 613 tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr 614 t2IT 0, 8, implicit-def $itstate 615 tCMPi8 killed renamable $r1, 8, 0 /* CC::eq */, killed $cpsr, implicit-def $cpsr, implicit killed $itstate 616 t2Bcc %bb.1, 0 /* CC::eq */, killed $cpsr 617 618 bb.7: 619 $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg 620 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0 621 622 bb.1: 623 successors: %bb.3(0x40000000), %bb.7(0x40000000) 624 liveins: $r2 625 626 renamable $lr = t2WhileLoopStartLR renamable $r2, %bb.7, implicit-def dead $cpsr 627 t2B %bb.3, 14 /* CC::al */, $noreg 628 629 bb.3: 630 successors: %bb.4(0x80000000) 631 liveins: $lr, $r2 632 633 renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 634 renamable $r1 = t2ADDri $sp, 2, 14 /* CC::al */, $noreg, $noreg 635 renamable $r0 = IMPLICIT_DEF 636 637 bb.4: 638 successors: %bb.4(0x7c000000), %bb.2(0x04000000) 639 liveins: $lr, $r0, $r1, $r2, $r3 640 641 renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 1, 0, $noreg, undef renamable $q0 642 MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg 643 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr 644 t2B %bb.2, 14 /* CC::al */, $noreg 645 646 bb.2: 647 successors: %bb.5(0x40000000), %bb.7(0x40000000) 648 liveins: $r0, $r1, $r2 649 650 renamable $lr = t2WhileLoopStartLR killed renamable $r2, %bb.7, implicit-def dead $cpsr 651 t2B %bb.5, 14 /* CC::al */, $noreg 652 653 bb.5: 654 successors: %bb.6(0x80000000) 655 liveins: $lr, $r0, $r1 656 657 renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg 658 659 bb.6: 660 successors: %bb.6(0x7c000000), %bb.7(0x04000000) 661 liveins: $lr, $r0, $r1, $r3 662 663 renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 2, 0, $noreg, undef renamable $q0 664 MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg 665 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr 666 t2B %bb.7, 14 /* CC::al */, $noreg 667 668... 669