| # RUN: llc -mtriple thumbv7-apple-ios -start-after block-placement -stop-after block-placement -o /dev/null %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, _, _ |
| ; CHECK-NEXT: t2CMNri killed %r0, 78, 14, _, 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, _, implicit internal killed %itstate |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: %r0 = tMOVr killed %r1, 14, _ |
| ; CHECK-NEXT: tBX_RET 14, _, 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, _, _ |
| ; CHECK-NEXT: t2CMNri killed %r0, 78, 14, _, 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, _, implicit internal killed %itstate |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: %r0 = tMOVr killed %r1, 14, _ |
| ; CHECK-NEXT: tBX_RET 14, _, 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 |
| ... |