| # 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 |
| ... |