616 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s3--- |4 define void @test_trunc_and_zext_s1_to_s32() { ret void }5 define void @test_trunc_and_sext_s1_to_s32() { ret void }6 define void @test_trunc_and_anyext_s1_to_s32() { ret void }7 8 define void @test_trunc_and_zext_s8_to_s32() { ret void }9 define void @test_trunc_and_sext_s8_to_s32() { ret void }10 define void @test_trunc_and_anyext_s8_to_s32() { ret void }11 12 define void @test_trunc_and_zext_s16_to_s32() { ret void }13 define void @test_trunc_and_sext_s16_to_s32() { ret void }14 define void @test_trunc_and_anyext_s16_to_s32() { ret void }15 16 define void @test_trunc_and_zext_s1_to_s16() { ret void }17 define void @test_trunc_and_sext_s1_to_s16() { ret void }18 define void @test_trunc_and_anyext_s1_to_s16() { ret void }19 20 define void @test_trunc_and_zext_s8_to_s16() { ret void }21 define void @test_trunc_and_sext_s8_to_s16() { ret void }22 define void @test_trunc_and_anyext_s8_to_s16() { ret void }23 24 define void @test_trunc_and_zext_s1_to_s8() { ret void }25 define void @test_trunc_and_sext_s1_to_s8() { ret void }26 define void @test_trunc_and_anyext_s1_to_s8() { ret void }27...28---29name: test_trunc_and_zext_s1_to_s3230legalized: true31regBankSelected: true32selected: false33tracksRegLiveness: true34registers:35 - { id: 0, class: gprb }36 - { id: 1, class: gprb }37 - { id: 2, class: gprb }38body: |39 bb.0:40 liveins: $r041 42 ; CHECK-LABEL: name: test_trunc_and_zext_s1_to_s3243 ; CHECK: liveins: $r044 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r045 ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]46 ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY1]], 1, 14 /* CC::al */, $noreg, $noreg47 ; CHECK: $r0 = COPY [[t2ANDri]]48 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r049 %0(s32) = COPY $r050 51 %1(s1) = G_TRUNC %0(s32)52 53 %2(s32) = G_ZEXT %1(s1)54 55 $r0 = COPY %2(s32)56 57 BX_RET 14, $noreg, implicit $r058...59---60name: test_trunc_and_sext_s1_to_s3261legalized: true62regBankSelected: true63selected: false64tracksRegLiveness: true65registers:66 - { id: 0, class: gprb }67 - { id: 1, class: gprb }68 - { id: 2, class: gprb }69body: |70 bb.0:71 liveins: $r072 73 ; CHECK-LABEL: name: test_trunc_and_sext_s1_to_s3274 ; CHECK: liveins: $r075 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r076 ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]77 ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY1]], 1, 14 /* CC::al */, $noreg, $noreg78 ; CHECK: [[t2RSBri:%[0-9]+]]:rgpr = t2RSBri [[t2ANDri]], 0, 14 /* CC::al */, $noreg, $noreg79 ; CHECK: $r0 = COPY [[t2RSBri]]80 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r081 %0(s32) = COPY $r082 83 %1(s1) = G_TRUNC %0(s32)84 85 %2(s32) = G_SEXT %1(s1)86 87 $r0 = COPY %2(s32)88 89 BX_RET 14, $noreg, implicit $r090...91---92name: test_trunc_and_anyext_s1_to_s3293legalized: true94regBankSelected: true95selected: false96tracksRegLiveness: true97registers:98 - { id: 0, class: gprb }99 - { id: 1, class: gprb }100 - { id: 2, class: gprb }101body: |102 bb.0:103 liveins: $r0104 105 ; CHECK-LABEL: name: test_trunc_and_anyext_s1_to_s32106 ; CHECK: liveins: $r0107 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0108 ; CHECK: $r0 = COPY [[COPY]]109 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0110 %0(s32) = COPY $r0111 112 %1(s1) = G_TRUNC %0(s32)113 114 %2(s32) = G_ANYEXT %1(s1)115 116 $r0 = COPY %2(s32)117 118 BX_RET 14, $noreg, implicit $r0119...120---121name: test_trunc_and_zext_s8_to_s32122legalized: true123regBankSelected: true124selected: false125tracksRegLiveness: true126registers:127 - { id: 0, class: gprb }128 - { id: 1, class: gprb }129 - { id: 2, class: gprb }130body: |131 bb.0:132 liveins: $r0133 134 ; CHECK-LABEL: name: test_trunc_and_zext_s8_to_s32135 ; CHECK: liveins: $r0136 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0137 ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]138 ; CHECK: [[t2UXTB:%[0-9]+]]:rgpr = t2UXTB [[COPY1]], 0, 14 /* CC::al */, $noreg139 ; CHECK: $r0 = COPY [[t2UXTB]]140 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0141 %0(s32) = COPY $r0142 143 %1(s8) = G_TRUNC %0(s32)144 145 %2(s32) = G_ZEXT %1(s8)146 147 $r0 = COPY %2(s32)148 149 BX_RET 14, $noreg, implicit $r0150...151---152name: test_trunc_and_sext_s8_to_s32153legalized: true154regBankSelected: true155selected: false156tracksRegLiveness: true157registers:158 - { id: 0, class: gprb }159 - { id: 1, class: gprb }160 - { id: 2, class: gprb }161body: |162 bb.0:163 liveins: $r0164 165 ; CHECK-LABEL: name: test_trunc_and_sext_s8_to_s32166 ; CHECK: liveins: $r0167 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0168 ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]169 ; CHECK: [[t2SXTB:%[0-9]+]]:rgpr = t2SXTB [[COPY1]], 0, 14 /* CC::al */, $noreg170 ; CHECK: $r0 = COPY [[t2SXTB]]171 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0172 %0(s32) = COPY $r0173 174 %1(s8) = G_TRUNC %0(s32)175 176 %2(s32) = G_SEXT %1(s8)177 178 $r0 = COPY %2(s32)179 180 BX_RET 14, $noreg, implicit $r0181...182---183name: test_trunc_and_anyext_s8_to_s32184legalized: true185regBankSelected: true186selected: false187tracksRegLiveness: true188registers:189 - { id: 0, class: gprb }190 - { id: 1, class: gprb }191 - { id: 2, class: gprb }192body: |193 bb.0:194 liveins: $r0195 196 ; CHECK-LABEL: name: test_trunc_and_anyext_s8_to_s32197 ; CHECK: liveins: $r0198 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0199 ; CHECK: $r0 = COPY [[COPY]]200 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0201 %0(s32) = COPY $r0202 203 %1(s8) = G_TRUNC %0(s32)204 205 %2(s32) = G_ANYEXT %1(s8)206 207 $r0 = COPY %2(s32)208 209 BX_RET 14, $noreg, implicit $r0210...211---212name: test_trunc_and_zext_s16_to_s32213legalized: true214regBankSelected: true215selected: false216tracksRegLiveness: true217registers:218 - { id: 0, class: gprb }219 - { id: 1, class: gprb }220 - { id: 2, class: gprb }221body: |222 bb.0:223 liveins: $r0224 225 ; CHECK-LABEL: name: test_trunc_and_zext_s16_to_s32226 ; CHECK: liveins: $r0227 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0228 ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]229 ; CHECK: [[t2UXTH:%[0-9]+]]:rgpr = t2UXTH [[COPY1]], 0, 14 /* CC::al */, $noreg230 ; CHECK: $r0 = COPY [[t2UXTH]]231 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0232 %0(s32) = COPY $r0233 234 %1(s16) = G_TRUNC %0(s32)235 236 %2(s32) = G_ZEXT %1(s16)237 238 $r0 = COPY %2(s32)239 240 BX_RET 14, $noreg, implicit $r0241...242---243name: test_trunc_and_sext_s16_to_s32244legalized: true245regBankSelected: true246selected: false247tracksRegLiveness: true248registers:249 - { id: 0, class: gprb }250 - { id: 1, class: gprb }251 - { id: 2, class: gprb }252body: |253 bb.0:254 liveins: $r0255 256 ; CHECK-LABEL: name: test_trunc_and_sext_s16_to_s32257 ; CHECK: liveins: $r0258 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0259 ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]260 ; CHECK: [[t2SXTH:%[0-9]+]]:rgpr = t2SXTH [[COPY1]], 0, 14 /* CC::al */, $noreg261 ; CHECK: $r0 = COPY [[t2SXTH]]262 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0263 %0(s32) = COPY $r0264 265 %1(s16) = G_TRUNC %0(s32)266 267 %2(s32) = G_SEXT %1(s16)268 269 $r0 = COPY %2(s32)270 271 BX_RET 14, $noreg, implicit $r0272...273---274name: test_trunc_and_anyext_s16_to_s32275legalized: true276regBankSelected: true277selected: false278tracksRegLiveness: true279registers:280 - { id: 0, class: gprb }281 - { id: 1, class: gprb }282 - { id: 2, class: gprb }283body: |284 bb.0:285 liveins: $r0286 287 ; CHECK-LABEL: name: test_trunc_and_anyext_s16_to_s32288 ; CHECK: liveins: $r0289 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0290 ; CHECK: $r0 = COPY [[COPY]]291 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0292 %0(s32) = COPY $r0293 294 %1(s16) = G_TRUNC %0(s32)295 296 %2(s32) = G_ANYEXT %1(s16)297 298 $r0 = COPY %2(s32)299 300 BX_RET 14, $noreg, implicit $r0301...302---303name: test_trunc_and_zext_s1_to_s16304legalized: true305regBankSelected: true306selected: false307tracksRegLiveness: true308registers:309 - { id: 0, class: gprb }310 - { id: 1, class: gprb }311 - { id: 2, class: gprb }312 - { id: 3, class: gprb }313body: |314 bb.0:315 liveins: $r0, $r1316 317 ; CHECK-LABEL: name: test_trunc_and_zext_s1_to_s16318 ; CHECK: liveins: $r0, $r1319 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0320 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1321 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]322 ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg323 ; CHECK: t2STRHi12 [[t2ANDri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))324 ; CHECK: BX_RET 14 /* CC::al */, $noreg325 %0(p0) = COPY $r0326 327 %1(s32) = COPY $r1328 329 %2(s1) = G_TRUNC %1(s32)330 331 %3(s16) = G_ZEXT %2(s1)332 333 G_STORE %3(s16), %0(p0) :: (store (s16))334 335 BX_RET 14, $noreg336...337---338name: test_trunc_and_sext_s1_to_s16339legalized: true340regBankSelected: true341selected: false342tracksRegLiveness: true343registers:344 - { id: 0, class: gprb }345 - { id: 1, class: gprb }346 - { id: 2, class: gprb }347 - { id: 3, class: gprb }348body: |349 bb.0:350 liveins: $r0, $r1351 352 ; CHECK-LABEL: name: test_trunc_and_sext_s1_to_s16353 ; CHECK: liveins: $r0, $r1354 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0355 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1356 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]357 ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg358 ; CHECK: [[t2RSBri:%[0-9]+]]:rgpr = t2RSBri [[t2ANDri]], 0, 14 /* CC::al */, $noreg, $noreg359 ; CHECK: t2STRHi12 [[t2RSBri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))360 ; CHECK: BX_RET 14 /* CC::al */, $noreg361 %0(p0) = COPY $r0362 363 %1(s32) = COPY $r1364 365 %2(s1) = G_TRUNC %1(s32)366 367 %3(s16) = G_SEXT %2(s1)368 369 G_STORE %3(s16), %0(p0) :: (store (s16))370 371 BX_RET 14, $noreg372...373---374name: test_trunc_and_anyext_s1_to_s16375legalized: true376regBankSelected: true377selected: false378tracksRegLiveness: true379registers:380 - { id: 0, class: gprb }381 - { id: 1, class: gprb }382 - { id: 2, class: gprb }383 - { id: 3, class: gprb }384body: |385 bb.0:386 liveins: $r0, $r1387 388 ; CHECK-LABEL: name: test_trunc_and_anyext_s1_to_s16389 ; CHECK: liveins: $r0, $r1390 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0391 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1392 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]393 ; CHECK: t2STRHi12 [[COPY2]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))394 ; CHECK: BX_RET 14 /* CC::al */, $noreg395 %0(p0) = COPY $r0396 397 %1(s32) = COPY $r1398 399 %2(s1) = G_TRUNC %1(s32)400 401 %3(s16) = G_ANYEXT %2(s1)402 403 G_STORE %3(s16), %0(p0) :: (store (s16))404 405 BX_RET 14, $noreg406...407---408name: test_trunc_and_zext_s8_to_s16409legalized: true410regBankSelected: true411selected: false412tracksRegLiveness: true413registers:414 - { id: 0, class: gprb }415 - { id: 1, class: gprb }416 - { id: 2, class: gprb }417 - { id: 3, class: gprb }418body: |419 bb.0:420 liveins: $r0, $r1421 422 ; CHECK-LABEL: name: test_trunc_and_zext_s8_to_s16423 ; CHECK: liveins: $r0, $r1424 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0425 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1426 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]427 ; CHECK: [[t2UXTB:%[0-9]+]]:rgpr = t2UXTB [[COPY2]], 0, 14 /* CC::al */, $noreg428 ; CHECK: t2STRHi12 [[t2UXTB]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))429 ; CHECK: BX_RET 14 /* CC::al */, $noreg430 %0(p0) = COPY $r0431 432 %1(s32) = COPY $r1433 434 %2(s8) = G_TRUNC %1(s32)435 436 %3(s16) = G_ZEXT %2(s8)437 438 G_STORE %3(s16), %0(p0) :: (store (s16))439 440 BX_RET 14, $noreg441...442---443name: test_trunc_and_sext_s8_to_s16444legalized: true445regBankSelected: true446selected: false447tracksRegLiveness: true448registers:449 - { id: 0, class: gprb }450 - { id: 1, class: gprb }451 - { id: 2, class: gprb }452 - { id: 3, class: gprb }453body: |454 bb.0:455 liveins: $r0, $r1456 457 ; CHECK-LABEL: name: test_trunc_and_sext_s8_to_s16458 ; CHECK: liveins: $r0, $r1459 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0460 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1461 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]462 ; CHECK: [[t2SXTB:%[0-9]+]]:rgpr = t2SXTB [[COPY2]], 0, 14 /* CC::al */, $noreg463 ; CHECK: t2STRHi12 [[t2SXTB]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))464 ; CHECK: BX_RET 14 /* CC::al */, $noreg465 %0(p0) = COPY $r0466 467 %1(s32) = COPY $r1468 469 %2(s8) = G_TRUNC %1(s32)470 471 %3(s16) = G_SEXT %2(s8)472 473 G_STORE %3(s16), %0(p0) :: (store (s16))474 475 BX_RET 14, $noreg476...477---478name: test_trunc_and_anyext_s8_to_s16479legalized: true480regBankSelected: true481selected: false482tracksRegLiveness: true483registers:484 - { id: 0, class: gprb }485 - { id: 1, class: gprb }486 - { id: 2, class: gprb }487 - { id: 3, class: gprb }488body: |489 bb.0:490 liveins: $r0, $r1491 492 ; CHECK-LABEL: name: test_trunc_and_anyext_s8_to_s16493 ; CHECK: liveins: $r0, $r1494 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0495 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1496 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]497 ; CHECK: t2STRHi12 [[COPY2]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))498 ; CHECK: BX_RET 14 /* CC::al */, $noreg499 %0(p0) = COPY $r0500 501 %1(s32) = COPY $r1502 503 %2(s8) = G_TRUNC %1(s32)504 505 %3(s16) = G_ANYEXT %2(s8)506 507 G_STORE %3(s16), %0(p0) :: (store (s16))508 509 BX_RET 14, $noreg510...511---512name: test_trunc_and_zext_s1_to_s8513legalized: true514regBankSelected: true515selected: false516tracksRegLiveness: true517registers:518 - { id: 0, class: gprb }519 - { id: 1, class: gprb }520 - { id: 2, class: gprb }521 - { id: 3, class: gprb }522body: |523 bb.0:524 liveins: $r0, $r1525 526 ; CHECK-LABEL: name: test_trunc_and_zext_s1_to_s8527 ; CHECK: liveins: $r0, $r1528 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0529 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1530 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]531 ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg532 ; CHECK: t2STRBi12 [[t2ANDri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s8))533 ; CHECK: BX_RET 14 /* CC::al */, $noreg534 %0(p0) = COPY $r0535 536 %1(s32) = COPY $r1537 538 %2(s1) = G_TRUNC %1(s32)539 540 %3(s8) = G_ZEXT %2(s1)541 542 G_STORE %3(s8), %0(p0) :: (store (s8))543 544 BX_RET 14, $noreg545...546---547name: test_trunc_and_sext_s1_to_s8548legalized: true549regBankSelected: true550selected: false551tracksRegLiveness: true552registers:553 - { id: 0, class: gprb }554 - { id: 1, class: gprb }555 - { id: 2, class: gprb }556 - { id: 3, class: gprb }557body: |558 bb.0:559 liveins: $r0, $r1560 561 ; CHECK-LABEL: name: test_trunc_and_sext_s1_to_s8562 ; CHECK: liveins: $r0, $r1563 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0564 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1565 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]566 ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg567 ; CHECK: [[t2RSBri:%[0-9]+]]:rgpr = t2RSBri [[t2ANDri]], 0, 14 /* CC::al */, $noreg, $noreg568 ; CHECK: t2STRBi12 [[t2RSBri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s8))569 ; CHECK: BX_RET 14 /* CC::al */, $noreg570 %0(p0) = COPY $r0571 572 %1(s32) = COPY $r1573 574 %2(s1) = G_TRUNC %1(s32)575 576 %3(s8) = G_SEXT %2(s1)577 578 G_STORE %3(s8), %0(p0) :: (store (s8))579 580 BX_RET 14, $noreg581...582---583name: test_trunc_and_anyext_s1_to_s8584legalized: true585regBankSelected: true586selected: false587tracksRegLiveness: true588registers:589 - { id: 0, class: gprb }590 - { id: 1, class: gprb }591 - { id: 2, class: gprb }592 - { id: 3, class: gprb }593body: |594 bb.0:595 liveins: $r0, $r1596 597 ; CHECK-LABEL: name: test_trunc_and_anyext_s1_to_s8598 ; CHECK: liveins: $r0, $r1599 ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0600 ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1601 ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]602 ; CHECK: t2STRBi12 [[COPY2]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s8))603 ; CHECK: BX_RET 14 /* CC::al */, $noreg604 %0(p0) = COPY $r0605 606 %1(s32) = COPY $r1607 608 %2(s1) = G_TRUNC %1(s32)609 610 %3(s8) = G_ANYEXT %2(s1)611 612 G_STORE %3(s8), %0(p0) :: (store (s8))613 614 BX_RET 14, $noreg615...616