| # RUN: llc -mtriple thumbv7-apple-ios -run-pass none -o - %s | FileCheck %s | |
| # This test ensures that the MIR parser parses the bundled machine instructions | |
| # and 'internal' register flags correctly. | |
| --- | | |
| define i32 @test1(i32 %a) { | |
| entry: | |
| %cmp = icmp sgt i32 %a, -78 | |
| %. = zext i1 %cmp to i32 | |
| ret i32 %. | |
| } | |
| define i32 @test2(i32 %a) { | |
| entry: | |
| %cmp = icmp sgt i32 %a, -78 | |
| %. = zext i1 %cmp to i32 | |
| ret i32 %. | |
| } | |
| ... | |
| --- | |
| name: test1 | |
| tracksRegLiveness: true | |
| liveins: | |
| - { reg: '$r0' } | |
| body: | | |
| bb.0.entry: | |
| liveins: $r0 | |
| ; CHECK-LABEL: name: test1 | |
| ; CHECK: $r1 = t2MOVi 0, 14, $noreg, $noreg | |
| ; CHECK-NEXT: t2CMNri killed $r0, 78, 14, $noreg, implicit-def $cpsr | |
| ; CHECK-NEXT: BUNDLE implicit-def dead $itstate, implicit-def $r1, implicit killed $cpsr { | |
| ; CHECK-NEXT: t2IT 12, 8, implicit-def $itstate | |
| ; CHECK-NEXT: $r1 = t2MOVi 1, 12, killed $cpsr, $noreg, implicit internal killed $itstate | |
| ; CHECK-NEXT: } | |
| ; CHECK-NEXT: $r0 = tMOVr killed $r1, 14, $noreg | |
| ; CHECK-NEXT: tBX_RET 14, $noreg, implicit killed $r0 | |
| $r1 = t2MOVi 0, 14, _, _ | |
| t2CMNri killed $r0, 78, 14, _, implicit-def $cpsr | |
| BUNDLE implicit-def dead $itstate, implicit-def $r1, implicit killed $cpsr { | |
| t2IT 12, 8, implicit-def $itstate | |
| $r1 = t2MOVi 1, 12, killed $cpsr, _, implicit internal killed $itstate | |
| } | |
| $r0 = tMOVr killed $r1, 14, _ | |
| tBX_RET 14, _, implicit killed $r0 | |
| ... | |
| --- | |
| name: test2 | |
| tracksRegLiveness: true | |
| liveins: | |
| - { reg: '$r0' } | |
| body: | | |
| bb.0.entry: | |
| liveins: $r0 | |
| ; Verify that the next machine instruction can be on the same line as | |
| ; '{' or '}'. | |
| ; CHECK-LABEL: name: test2 | |
| ; CHECK: $r1 = t2MOVi 0, 14, $noreg, $noreg | |
| ; CHECK-NEXT: t2CMNri killed $r0, 78, 14, $noreg, implicit-def $cpsr | |
| ; CHECK-NEXT: BUNDLE implicit-def dead $itstate, implicit-def $r1, implicit killed $cpsr { | |
| ; CHECK-NEXT: t2IT 12, 8, implicit-def $itstate | |
| ; CHECK-NEXT: $r1 = t2MOVi 1, 12, killed $cpsr, $noreg, implicit internal killed $itstate | |
| ; CHECK-NEXT: } | |
| ; CHECK-NEXT: $r0 = tMOVr killed $r1, 14, $noreg | |
| ; CHECK-NEXT: tBX_RET 14, $noreg, implicit killed $r0 | |
| $r1 = t2MOVi 0, 14, _, _ | |
| t2CMNri killed $r0, 78, 14, _, implicit-def $cpsr | |
| BUNDLE implicit-def dead $itstate, implicit-def $r1, implicit killed $cpsr { t2IT 12, 8, implicit-def $itstate | |
| $r1 = t2MOVi 1, 12, killed $cpsr, _, internal implicit killed $itstate | |
| } $r0 = tMOVr killed $r1, 14, _ | |
| tBX_RET 14, _, implicit killed $r0 | |
| ... |