| # RUN: llc -mtriple=i386-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X32 |
| # RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X64 |
| |
| --- | |
| |
| define void @test_copy() { |
| ret void |
| } |
| |
| define void @test_copy2() { |
| ret void |
| } |
| |
| define void @test_copy3() { |
| ret void |
| } |
| |
| define void @test_copy4() { |
| ret void |
| } |
| |
| define void @test_copy5() { |
| ret void |
| } |
| |
| define void @test_copy6() { |
| ret void |
| } |
| |
| ... |
| --- |
| name: test_copy |
| # ALL-LABEL: name: test_copy |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| # ALL: registers: |
| # ALL-NEXT: - { id: 0, class: gr8, preferred-register: '' } |
| # ALL-NEXT: - { id: 1, class: gr32, preferred-register: '' } |
| registers: |
| - { id: 0, class: gpr, preferred-register: '' } |
| - { id: 1, class: gpr, preferred-register: '' } |
| # ALL %0:gr8 = COPY $al |
| # ALL-NEXT %1:gr32 = MOVZX32rr8 %0 |
| # ALL-NEXT $eax = COPY %1 |
| # ALL-NEXT RET 0, implicit $eax |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $eax |
| |
| %0(s8) = COPY $al |
| %1(s32) = G_ZEXT %0(s8) |
| $eax = COPY %1(s32) |
| RET 0, implicit $eax |
| |
| ... |
| --- |
| name: test_copy2 |
| # ALL-LABEL: name: test_copy2 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| # ALL: registers: |
| # ALL-NEXT: - { id: 0, class: gr8, preferred-register: '' } |
| # ALL-NEXT: - { id: 1, class: gr32, preferred-register: '' } |
| registers: |
| - { id: 0, class: gpr, preferred-register: '' } |
| - { id: 1, class: gpr, preferred-register: '' } |
| # ALL: %0:gr8 = COPY $al |
| # ALL-NEXT: %1:gr32 = MOVZX32rr8 %0 |
| # ALL-NEXT: $eax = COPY %1 |
| # ALL-NEXT: RET 0, implicit $eax |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $eax |
| |
| %0(s8) = COPY $al |
| %1(s32) = G_ZEXT %0(s8) |
| $eax = COPY %1(s32) |
| RET 0, implicit $eax |
| |
| ... |
| --- |
| name: test_copy3 |
| # ALL-LABEL: name: test_copy3 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| # ALL: registers: |
| # ALL-NEXT: - { id: 0, class: gr16[[ABCD:(_abcd)?]], preferred-register: '' } |
| # ALL-NEXT: - { id: 1, class: gr8, preferred-register: '' } |
| # ALL-NEXT: - { id: 2, class: gr32, preferred-register: '' } |
| registers: |
| - { id: 0, class: gpr, preferred-register: '' } |
| - { id: 1, class: gpr, preferred-register: '' } |
| - { id: 2, class: gpr, preferred-register: '' } |
| # ALL %0:gr16 = COPY $ax |
| # ALL-NEXT %1:gr8 = COPY %0.sub_8bit |
| # ALL-NEXT %2:gr32 = MOVZX32rr8 %1 |
| # ALL-NEXT $eax = COPY %2 |
| # ALL-NEXT RET 0, implicit $eax |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $eax |
| |
| %0(s16) = COPY $ax |
| %1(s8) = G_TRUNC %0(s16) |
| %2(s32) = G_ZEXT %1(s8) |
| $eax = COPY %2(s32) |
| RET 0, implicit $eax |
| |
| ... |
| --- |
| name: test_copy4 |
| # ALL-LABEL: name: test_copy4 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| # ALL: registers: |
| # ALL-NEXT: - { id: 0, class: gr32, preferred-register: '' } |
| # ALL-NEXT: - { id: 1, class: gr16, preferred-register: '' } |
| # ALL-NEXT: - { id: 2, class: gr32, preferred-register: '' } |
| registers: |
| - { id: 0, class: gpr, preferred-register: '' } |
| - { id: 1, class: gpr, preferred-register: '' } |
| - { id: 2, class: gpr, preferred-register: '' } |
| # ALL %0:gr32 = COPY $eax |
| # ALL-NEXT %1:gr16 = COPY %0.sub_16bit |
| # ALL-NEXT %2:gr32 = MOVZX32rr16 %1 |
| # ALL-NEXT $eax = COPY %2 |
| # ALL-NEXT RET 0, implicit $eax |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $eax |
| |
| %0(s32) = COPY $eax |
| %1(s16) = G_TRUNC %0(s32) |
| %2(s32) = G_ZEXT %1(s16) |
| $eax = COPY %2(s32) |
| RET 0, implicit $eax |
| |
| ... |
| --- |
| name: test_copy5 |
| # ALL-LABEL: name: test_copy5 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| # ALL: registers: |
| # ALL-NEXT: - { id: 0, class: gr32[[ABCD:(_abcd)?]], preferred-register: '' } |
| # ALL-NEXT: - { id: 1, class: gr8, preferred-register: '' } |
| # ALL-NEXT: - { id: 2, class: gr32, preferred-register: '' } |
| registers: |
| - { id: 0, class: gpr, preferred-register: '' } |
| - { id: 1, class: gpr, preferred-register: '' } |
| - { id: 2, class: gpr, preferred-register: '' } |
| # ALL %0:gr32[[ABCD]] = COPY $edx |
| # ALL-NEXT %1:gr8 = COPY %0.sub_8bit |
| # ALL-NEXT %2:gr32 = MOVZX32rr8 %1 |
| # ALL-NEXT $eax = COPY %2 |
| # ALL-NEXT RET 0, implicit $eax |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $eax,$edx |
| |
| %0(s32) = COPY $edx |
| %1(s8) = G_TRUNC %0(s32) |
| %2(s32) = G_ANYEXT %1(s8) |
| $eax = COPY %2(s32) |
| RET 0, implicit $eax |
| |
| ... |
| --- |
| name: test_copy6 |
| # ALL-LABEL: name: test_copy6 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| # ALL: registers: |
| # ALL-NEXT: - { id: 0, class: gr32, preferred-register: '' } |
| # ALL-NEXT: - { id: 1, class: gr16, preferred-register: '' } |
| # ALL-NEXT: - { id: 2, class: gr32, preferred-register: '' } |
| registers: |
| - { id: 0, class: gpr, preferred-register: '' } |
| - { id: 1, class: gpr, preferred-register: '' } |
| - { id: 2, class: gpr, preferred-register: '' } |
| # ALL %0:gr32 = COPY $edx |
| # ALL-NEXT %1:gr16 = COPY %0.sub_16bit |
| # ALL-NEXT %2:gr32 = SUBREG_TO_REG 0, %1, %subreg.sub_16bit |
| # ALL-NEXT $eax = COPY %2 |
| # ALL-NEXT RET 0, implicit $eax |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $eax,$edx |
| |
| %0(s32) = COPY $edx |
| %1(s16) = G_TRUNC %0(s32) |
| %2(s32) = G_ANYEXT %1(s16) |
| $eax = COPY %2(s32) |
| RET 0, implicit $eax |
| |
| ... |
| |