1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=thumbv7 -run-pass=if-converter %s -o - | FileCheck %s 3--- | 4 define void @test_nosize() { 5 %c0 = icmp sgt i64 0, 0 6 br i1 %c0, label %b1, label %b6 7 8 b1: ; preds = %0 9 br i1 undef, label %b3, label %b2 10 11 b2: ; preds = %b1 12 %v0 = tail call i32 @extfunc() 13 br label %b5 14 15 b3: ; preds = %b1 16 %v1 = load i32, i32* undef, align 4 17 %v2 = and i32 %v1, 256 18 br label %b5 19 20 b5: ; preds = %b3, %b2 21 %v3 = phi i32 [ %v2, %b3 ], [ %v0, %b2 ] 22 %c1 = icmp eq i32 %v3, 0 23 br i1 %c1, label %b8, label %b7 24 25 b6: ; preds = %0 26 %1 = tail call i32 @extfunc() 27 ret void 28 29 b7: ; preds = %b5 30 %2 = tail call i32 @extfunc() 31 ret void 32 33 b8: ; preds = %b5 34 ret void 35 } 36 37 ; Function Attrs: optsize 38 define void @test_optsize() #0 { 39 %c0 = icmp sgt i64 0, 0 40 br i1 %c0, label %b1, label %b6 41 42 b1: ; preds = %0 43 br i1 undef, label %b3, label %b2 44 45 b2: ; preds = %b1 46 %v0 = tail call i32 @extfunc() 47 br label %b5 48 49 b3: ; preds = %b1 50 %v1 = load i32, i32* undef, align 4 51 %v2 = and i32 %v1, 256 52 br label %b5 53 54 b5: ; preds = %b3, %b2 55 %v3 = phi i32 [ %v2, %b3 ], [ %v0, %b2 ] 56 %c1 = icmp eq i32 %v3, 0 57 br i1 %c1, label %b8, label %b7 58 59 b6: ; preds = %0 60 %1 = tail call i32 @extfunc() 61 ret void 62 63 b7: ; preds = %b5 64 %2 = tail call i32 @extfunc() 65 ret void 66 67 b8: ; preds = %b5 68 ret void 69 } 70 71 ; Function Attrs: minsize 72 define void @test_minsize() #1 { 73 %c0 = icmp sgt i64 0, 0 74 br i1 %c0, label %b1, label %b6 75 76 b1: ; preds = %0 77 br i1 undef, label %b3, label %b2 78 79 b2: ; preds = %b1 80 %v0 = tail call i32 @extfunc() 81 br label %b5 82 83 b3: ; preds = %b1 84 %v1 = load i32, i32* undef, align 4 85 %v2 = and i32 %v1, 256 86 br label %b5 87 88 b5: ; preds = %b3, %b2 89 %v3 = phi i32 [ %v2, %b3 ], [ %v0, %b2 ] 90 %c1 = icmp eq i32 %v3, 0 91 br i1 %c1, label %b8, label %b7 92 93 b6: ; preds = %0 94 %1 = tail call i32 @extfunc() 95 ret void 96 97 b7: ; preds = %b5 98 %2 = tail call i32 @extfunc() 99 ret void 100 101 b8: ; preds = %b5 102 ret void 103 } 104 105 declare i32 @extfunc() 106 107 ; Function Attrs: nounwind 108 declare void @llvm.stackprotector(i8*, i8**) #2 109 110 attributes #0 = { optsize } 111 attributes #1 = { minsize } 112 attributes #2 = { nounwind } 113 114... 115--- 116name: test_nosize 117alignment: 2 118exposesReturnsTwice: false 119legalized: false 120regBankSelected: false 121selected: false 122failedISel: false 123tracksRegLiveness: true 124hasWinCFI: false 125registers: [] 126liveins: [] 127frameInfo: 128 isFrameAddressTaken: false 129 isReturnAddressTaken: false 130 hasStackMap: false 131 hasPatchPoint: false 132 stackSize: 8 133 offsetAdjustment: 0 134 maxAlignment: 4 135 adjustsStack: true 136 hasCalls: true 137 stackProtector: '' 138 maxCallFrameSize: 0 139 cvBytesOfCalleeSavedRegisters: 0 140 hasOpaqueSPAdjustment: false 141 hasVAStart: false 142 hasMustTailInVarArgFunc: false 143 localFrameSize: 0 144 savePoint: '' 145 restorePoint: '' 146fixedStack: [] 147stack: 148 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 149 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 150 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 151 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 152 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true, 153 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 154callSites: [] 155constants: [] 156machineFunctionInfo: {} 157body: | 158 ; CHECK-LABEL: name: test_nosize 159 ; CHECK: bb.0 (%ir-block.0): 160 ; CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000) 161 ; CHECK: liveins: $lr, $r7 162 ; CHECK: renamable $r0 = t2MOVi 1, 14, $noreg, $noreg 163 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 164 ; CHECK: tTAILJMPdND @extfunc, 1, killed $cpsr, implicit $sp, implicit $sp 165 ; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr 166 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8 167 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 168 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8 169 ; CHECK: renamable $r0 = t2MOVi 0, 14, $noreg, $noreg 170 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 171 ; CHECK: t2Bcc %bb.2, 1, killed $cpsr 172 ; CHECK: bb.1.b2: 173 ; CHECK: successors: %bb.3(0x80000000) 174 ; CHECK: tBL 14, $noreg, @extfunc, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 175 ; CHECK: t2B %bb.3, 14, $noreg 176 ; CHECK: bb.2.b3: 177 ; CHECK: successors: %bb.3(0x80000000) 178 ; CHECK: renamable $r0 = t2LDRi12 undef renamable $r0, 0, 14, $noreg :: (load 4 from `i32* undef`) 179 ; CHECK: renamable $r0 = t2ANDri killed renamable $r0, 256, 14, $noreg, $noreg 180 ; CHECK: bb.3.b5: 181 ; CHECK: liveins: $r0 182 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 183 ; CHECK: $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r7, def $lr 184 ; CHECK: tBX_RET 0, killed $cpsr 185 ; CHECK: tTAILJMPdND @extfunc, 14, $noreg, implicit $sp, implicit $sp 186 bb.0 (%ir-block.0): 187 successors: %bb.1(0x50000000), %bb.6(0x30000000) 188 liveins: $lr, $r7 189 190 renamable $r0 = t2MOVi 1, 14, $noreg, $noreg 191 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 192 t2Bcc %bb.6, 1, killed $cpsr 193 194 bb.1.b1: 195 successors: %bb.3(0x40000000), %bb.2(0x40000000) 196 liveins: $r7, $lr 197 198 $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr 199 frame-setup CFI_INSTRUCTION def_cfa_offset 8 200 frame-setup CFI_INSTRUCTION offset $lr, -4 201 frame-setup CFI_INSTRUCTION offset $r7, -8 202 renamable $r0 = t2MOVi 0, 14, $noreg, $noreg 203 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 204 t2Bcc %bb.3, 1, killed $cpsr 205 206 bb.2.b2: 207 successors: %bb.4(0x80000000) 208 209 tBL 14, $noreg, @extfunc, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 210 t2B %bb.4, 14, $noreg 211 212 bb.3.b3: 213 successors: %bb.4(0x80000000) 214 215 renamable $r0 = t2LDRi12 undef renamable $r0, 0, 14, $noreg :: (load 4 from `i32* undef`) 216 renamable $r0 = t2ANDri killed renamable $r0, 256, 14, $noreg, $noreg 217 218 bb.4.b5: 219 successors: %bb.5(0x30000000), %bb.6(0x50000000) 220 liveins: $r0 221 222 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 223 $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r7, def $lr 224 t2Bcc %bb.6, 1, killed $cpsr 225 226 bb.5.b8: 227 liveins: $lr, $r7 228 229 tBX_RET 14, $noreg 230 231 bb.6.b7: 232 liveins: $lr, $r7 233 234 tTAILJMPdND @extfunc, 14, $noreg, implicit $sp, implicit $sp 235 236... 237--- 238name: test_optsize 239alignment: 2 240exposesReturnsTwice: false 241legalized: false 242regBankSelected: false 243selected: false 244failedISel: false 245tracksRegLiveness: true 246hasWinCFI: false 247registers: [] 248liveins: [] 249frameInfo: 250 isFrameAddressTaken: false 251 isReturnAddressTaken: false 252 hasStackMap: false 253 hasPatchPoint: false 254 stackSize: 8 255 offsetAdjustment: 0 256 maxAlignment: 4 257 adjustsStack: true 258 hasCalls: true 259 stackProtector: '' 260 maxCallFrameSize: 0 261 cvBytesOfCalleeSavedRegisters: 0 262 hasOpaqueSPAdjustment: false 263 hasVAStart: false 264 hasMustTailInVarArgFunc: false 265 localFrameSize: 0 266 savePoint: '' 267 restorePoint: '' 268fixedStack: [] 269stack: 270 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 271 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 272 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 273 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 274 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true, 275 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 276callSites: [] 277constants: [] 278machineFunctionInfo: {} 279body: | 280 ; CHECK-LABEL: name: test_optsize 281 ; CHECK: bb.0 (%ir-block.0): 282 ; CHECK: successors: %bb.1(0x50000000), %bb.6(0x30000000) 283 ; CHECK: liveins: $lr, $r7 284 ; CHECK: renamable $r0 = t2MOVi 1, 14, $noreg, $noreg 285 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 286 ; CHECK: t2Bcc %bb.6, 1, killed $cpsr 287 ; CHECK: bb.1.b1: 288 ; CHECK: successors: %bb.3(0x40000000), %bb.2(0x40000000) 289 ; CHECK: liveins: $r7, $lr 290 ; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr 291 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8 292 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 293 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8 294 ; CHECK: renamable $r0 = t2MOVi 0, 14, $noreg, $noreg 295 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 296 ; CHECK: t2Bcc %bb.3, 1, killed $cpsr 297 ; CHECK: bb.2.b2: 298 ; CHECK: successors: %bb.4(0x80000000) 299 ; CHECK: tBL 14, $noreg, @extfunc, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 300 ; CHECK: t2B %bb.4, 14, $noreg 301 ; CHECK: bb.3.b3: 302 ; CHECK: successors: %bb.4(0x80000000) 303 ; CHECK: renamable $r0 = t2LDRi12 undef renamable $r0, 0, 14, $noreg :: (load 4 from `i32* undef`) 304 ; CHECK: renamable $r0 = t2ANDri killed renamable $r0, 256, 14, $noreg, $noreg 305 ; CHECK: bb.4.b5: 306 ; CHECK: successors: %bb.5(0x30000000), %bb.6(0x50000000) 307 ; CHECK: liveins: $r0 308 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 309 ; CHECK: $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r7, def $lr 310 ; CHECK: t2Bcc %bb.6, 1, killed $cpsr 311 ; CHECK: bb.5.b8: 312 ; CHECK: liveins: $lr, $r7 313 ; CHECK: tBX_RET 14, $noreg 314 ; CHECK: bb.6.b7: 315 ; CHECK: liveins: $lr, $r7 316 ; CHECK: tTAILJMPdND @extfunc, 14, $noreg, implicit $sp, implicit $sp 317 bb.0 (%ir-block.0): 318 successors: %bb.1(0x50000000), %bb.6(0x30000000) 319 liveins: $lr, $r7 320 321 renamable $r0 = t2MOVi 1, 14, $noreg, $noreg 322 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 323 t2Bcc %bb.6, 1, killed $cpsr 324 325 bb.1.b1: 326 successors: %bb.3(0x40000000), %bb.2(0x40000000) 327 liveins: $r7, $lr 328 329 $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr 330 frame-setup CFI_INSTRUCTION def_cfa_offset 8 331 frame-setup CFI_INSTRUCTION offset $lr, -4 332 frame-setup CFI_INSTRUCTION offset $r7, -8 333 renamable $r0 = t2MOVi 0, 14, $noreg, $noreg 334 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 335 t2Bcc %bb.3, 1, killed $cpsr 336 337 bb.2.b2: 338 successors: %bb.4(0x80000000) 339 340 tBL 14, $noreg, @extfunc, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 341 t2B %bb.4, 14, $noreg 342 343 bb.3.b3: 344 successors: %bb.4(0x80000000) 345 346 renamable $r0 = t2LDRi12 undef renamable $r0, 0, 14, $noreg :: (load 4 from `i32* undef`) 347 renamable $r0 = t2ANDri killed renamable $r0, 256, 14, $noreg, $noreg 348 349 bb.4.b5: 350 successors: %bb.5(0x30000000), %bb.6(0x50000000) 351 liveins: $r0 352 353 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 354 $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r7, def $lr 355 t2Bcc %bb.6, 1, killed $cpsr 356 357 bb.5.b8: 358 liveins: $lr, $r7 359 360 tBX_RET 14, $noreg 361 362 bb.6.b7: 363 liveins: $lr, $r7 364 365 tTAILJMPdND @extfunc, 14, $noreg, implicit $sp, implicit $sp 366 367... 368--- 369name: test_minsize 370alignment: 2 371exposesReturnsTwice: false 372legalized: false 373regBankSelected: false 374selected: false 375failedISel: false 376tracksRegLiveness: true 377hasWinCFI: false 378registers: [] 379liveins: [] 380frameInfo: 381 isFrameAddressTaken: false 382 isReturnAddressTaken: false 383 hasStackMap: false 384 hasPatchPoint: false 385 stackSize: 8 386 offsetAdjustment: 0 387 maxAlignment: 4 388 adjustsStack: true 389 hasCalls: true 390 stackProtector: '' 391 maxCallFrameSize: 0 392 cvBytesOfCalleeSavedRegisters: 0 393 hasOpaqueSPAdjustment: false 394 hasVAStart: false 395 hasMustTailInVarArgFunc: false 396 localFrameSize: 0 397 savePoint: '' 398 restorePoint: '' 399fixedStack: [] 400stack: 401 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 402 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 403 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 404 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 405 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true, 406 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 407callSites: [] 408constants: [] 409machineFunctionInfo: {} 410body: | 411 ; CHECK-LABEL: name: test_minsize 412 ; CHECK: bb.0 (%ir-block.0): 413 ; CHECK: successors: %bb.1(0x50000000), %bb.6(0x30000000) 414 ; CHECK: liveins: $lr, $r7 415 ; CHECK: renamable $r0 = t2MOVi 1, 14, $noreg, $noreg 416 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 417 ; CHECK: t2Bcc %bb.6, 1, killed $cpsr 418 ; CHECK: bb.1.b1: 419 ; CHECK: successors: %bb.3(0x40000000), %bb.2(0x40000000) 420 ; CHECK: liveins: $r7, $lr 421 ; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr 422 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8 423 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4 424 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8 425 ; CHECK: renamable $r0 = t2MOVi 0, 14, $noreg, $noreg 426 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 427 ; CHECK: t2Bcc %bb.3, 1, killed $cpsr 428 ; CHECK: bb.2.b2: 429 ; CHECK: successors: %bb.4(0x80000000) 430 ; CHECK: tBL 14, $noreg, @extfunc, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 431 ; CHECK: t2B %bb.4, 14, $noreg 432 ; CHECK: bb.3.b3: 433 ; CHECK: successors: %bb.4(0x80000000) 434 ; CHECK: renamable $r0 = t2LDRi12 undef renamable $r0, 0, 14, $noreg :: (load 4 from `i32* undef`) 435 ; CHECK: renamable $r0 = t2ANDri killed renamable $r0, 256, 14, $noreg, $noreg 436 ; CHECK: bb.4.b5: 437 ; CHECK: successors: %bb.5(0x30000000), %bb.6(0x50000000) 438 ; CHECK: liveins: $r0 439 ; CHECK: t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 440 ; CHECK: $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r7, def $lr 441 ; CHECK: t2Bcc %bb.6, 1, killed $cpsr 442 ; CHECK: bb.5.b8: 443 ; CHECK: liveins: $lr, $r7 444 ; CHECK: tBX_RET 14, $noreg 445 ; CHECK: bb.6.b7: 446 ; CHECK: liveins: $lr, $r7 447 ; CHECK: tTAILJMPdND @extfunc, 14, $noreg, implicit $sp, implicit $sp 448 bb.0 (%ir-block.0): 449 successors: %bb.1(0x50000000), %bb.6(0x30000000) 450 liveins: $lr, $r7 451 452 renamable $r0 = t2MOVi 1, 14, $noreg, $noreg 453 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 454 t2Bcc %bb.6, 1, killed $cpsr 455 456 bb.1.b1: 457 successors: %bb.3(0x40000000), %bb.2(0x40000000) 458 liveins: $r7, $lr 459 460 $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr 461 frame-setup CFI_INSTRUCTION def_cfa_offset 8 462 frame-setup CFI_INSTRUCTION offset $lr, -4 463 frame-setup CFI_INSTRUCTION offset $r7, -8 464 renamable $r0 = t2MOVi 0, 14, $noreg, $noreg 465 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 466 t2Bcc %bb.3, 1, killed $cpsr 467 468 bb.2.b2: 469 successors: %bb.4(0x80000000) 470 471 tBL 14, $noreg, @extfunc, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0 472 t2B %bb.4, 14, $noreg 473 474 bb.3.b3: 475 successors: %bb.4(0x80000000) 476 477 renamable $r0 = t2LDRi12 undef renamable $r0, 0, 14, $noreg :: (load 4 from `i32* undef`) 478 renamable $r0 = t2ANDri killed renamable $r0, 256, 14, $noreg, $noreg 479 480 bb.4.b5: 481 successors: %bb.5(0x30000000), %bb.6(0x50000000) 482 liveins: $r0 483 484 t2CMPri killed renamable $r0, 0, 14, $noreg, implicit-def $cpsr 485 $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r7, def $lr 486 t2Bcc %bb.6, 1, killed $cpsr 487 488 bb.5.b8: 489 liveins: $lr, $r7 490 491 tBX_RET 14, $noreg 492 493 bb.6.b7: 494 liveins: $lr, $r7 495 496 tTAILJMPdND @extfunc, 14, $noreg, implicit $sp, implicit $sp 497 498... 499