# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 # RUN: llc -mtriple=x86_64 -run-pass=register-coalescer -verify-coalescing -o - %s | FileCheck %s # The COPY can't be removed by commuting the AND since the instruction only partially defines the register --- name: commute_tied_subreg_def_part tracksRegLiveness: true body: | ; CHECK-LABEL: name: commute_tied_subreg_def_part ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: undef [[DEF:%[0-9]+]].sub_32bit:gr64_with_sub_8bit = IMPLICIT_DEF ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: undef [[MOV32ri:%[0-9]+]].sub_32bit:gr64_with_sub_8bit = MOV32ri 0 ; CHECK-NEXT: [[MOV32ri:%[0-9]+]].sub_32bit:gr64_with_sub_8bit = AND32rr [[MOV32ri]].sub_32bit, [[DEF]].sub_32bit, implicit-def dead $eflags ; CHECK-NEXT: [[DEF:%[0-9]+]]:gr64_with_sub_8bit = COPY [[MOV32ri]] ; CHECK-NEXT: JMP_1 %bb.1 bb.0: undef %0.sub_32bit:gr64_with_sub_8bit = IMPLICIT_DEF bb.1: undef %1.sub_32bit:gr64_with_sub_8bit = MOV32ri 0 %1.sub_32bit:gr64_with_sub_8bit = AND32rr %1.sub_32bit, %0.sub_32bit, implicit-def dead $eflags %0:gr64_with_sub_8bit = COPY %1 JMP_1 %bb.1 ... # The COPY can be removed by commuting the AND since the instruction defines the entire register --- name: commute_tied_subreg_def_full tracksRegLiveness: true body: | ; CHECK-LABEL: name: commute_tied_subreg_def_full ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: undef [[DEF:%[0-9]+]].sub_32bit:gr64_with_sub_8bit = IMPLICIT_DEF ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: undef [[MOV32ri:%[0-9]+]].sub_32bit:gr64_with_sub_8bit = MOV32ri 0 ; CHECK-NEXT: [[DEF:%[0-9]+]].sub_32bit:gr64_with_sub_8bit = AND32rr [[DEF]].sub_32bit, [[MOV32ri]].sub_32bit, implicit-def dead $eflags, implicit-def [[DEF]] ; CHECK-NEXT: JMP_1 %bb.1 bb.0: undef %0.sub_32bit:gr64_with_sub_8bit = IMPLICIT_DEF bb.1: undef %1.sub_32bit:gr64_with_sub_8bit = MOV32ri 0 %1.sub_32bit:gr64_with_sub_8bit = AND32rr %1.sub_32bit, %0.sub_32bit, implicit-def dead $eflags, implicit-def %1 %0:gr64_with_sub_8bit = COPY %1 JMP_1 %bb.1 ...