| # RUN: llc -mtriple=aarch64 -run-pass aarch64-mi-peephole-opt -verify-machineinstrs -o - %s | FileCheck %s |
| --- |
| name: test1 |
| # CHECK-LABEL: name: test1 |
| alignment: 4 |
| tracksRegLiveness: true |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr64 } |
| body: | |
| bb.0: |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| B %bb.1 |
| |
| bb.1: |
| %2:gpr32 = nsw ADDWrr %0, %1 |
| B %bb.2 |
| |
| bb.2: |
| ; CHECK-LABEL: bb.2: |
| ; CHECK-NOT: %3:gpr32 = ORRWrs $wzr, %2, 0 |
| ; The ORRWrs should be removed. |
| %3:gpr32 = ORRWrs $wzr, %2, 0 |
| %4:gpr64 = SUBREG_TO_REG 0, %3, %subreg.sub_32 |
| B %bb.3 |
| |
| bb.3: |
| $x0 = COPY %4 |
| RET_ReallyLR implicit $x0 |
| ... |
| --- |
| name: test2 |
| # CHECK-LABEL: name: test2 |
| alignment: 4 |
| tracksRegLiveness: true |
| registers: |
| - { id: 0, class: gpr64 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr64 } |
| body: | |
| bb.0: |
| liveins: $x0 |
| |
| %0:gpr64 = COPY $x0 |
| B %bb.1 |
| |
| bb.1: |
| %1:gpr32 = EXTRACT_SUBREG %0, %subreg.sub_32 |
| B %bb.2 |
| |
| bb.2: |
| ; CHECK-LABEL: bb.2: |
| ; CHECK: %2:gpr32 = ORRWrs $wzr, %1, 0 |
| ; The ORRWrs should not be removed. |
| %2:gpr32 = ORRWrs $wzr, %1, 0 |
| %3:gpr64 = SUBREG_TO_REG 0, %2, %subreg.sub_32 |
| B %bb.3 |
| |
| bb.3: |
| $x0 = COPY %3 |
| RET_ReallyLR implicit $x0 |
| ... |