# 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: 16 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: 16 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: 16 legalized: true regBankSelected: true # ALL: registers: # ALL-NEXT: - { id: 0, class: gr16[[ABCD:(_abcd)?]], preferred-register: '' } # X32-NEXT: - { id: 1, class: gr8_abcd_l, preferred-register: '' } # X64-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 # X32-NEXT: %3:gr16_abcd = COPY %0 # X32-NEXT: %1:gr8_abcd_l = COPY %3.sub_8bit # X64-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: 16 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: 16 legalized: true regBankSelected: true # ALL: registers: # ALL-NEXT: - { id: 0, class: gr32[[ABCD:(_abcd)?]], preferred-register: '' } # X32-NEXT: - { id: 1, class: gr8_abcd_l, preferred-register: '' } # X64-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 = COPY $edx # X32-NEXT: %3:gr32_abcd = COPY %0 # X32-NEXT: %1:gr8_abcd_l = COPY %3.sub_8bit # X64-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: 16 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: low32_addr_access_rbp, preferred-register: '' } # ALL-NEXT: - { id: 3, class: low32_addr_access_rbp, 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: %3:low32_addr_access_rbp = IMPLICIT_DEF # ALL-NEXT: %2:low32_addr_access_rbp = INSERT_SUBREG %3, %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 ...