| # RUN: llc -o - %s -mtriple=s390x-linux-gnu -mcpu=z16 -verify-machineinstrs \ |
| # RUN: -run-pass=machine-scheduler 2>&1 | FileCheck %s |
| |
| # The COPY to r2 should be right before the return. |
| # CHECK: name: fun0 |
| # CHECK: $r2d = COPY %0 |
| # CHECK-NEXT: Return implicit $r2d |
| --- |
| name: fun0 |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| %0:gr64bit = LGHI 0 |
| $r2d = COPY %0 |
| %1:gr64bit = LGHI 0 |
| Return implicit $r2d |
| ... |
| |
| # The COPY from r2 should be first. |
| # CHECK: name: fun1 |
| # CHECK: liveins: $r2 |
| # CHECK-NEXT: {{ $}} |
| # CHECK-NEXT: %2:gr64bit = COPY $r2 |
| --- |
| name: fun1 |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $r2d |
| |
| %0:gr64bit = LGHI 1 |
| %1:gr64bit = COPY %0 |
| %2:gr64bit = COPY %1 |
| %2:gr64bit = COPY $r2d |
| $r2d = COPY %2 |
| Return implicit $r2d |
| ... |
| |
| # The LGHI to r2 should be right before the return. |
| # CHECK: name: fun2 |
| # CHECK: $r2d = LGHI 0 |
| # CHECK-NEXT: Return implicit $r2d |
| --- |
| name: fun2 |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| %0:gr64bit = LGHI 0 |
| $r2d = LGHI 0 |
| %1:gr64bit = LGHI 0 |
| Return implicit $r2d |
| ... |
| |
| # The LA to r2 should be right before the return. |
| # CHECK: name: fun3 |
| # CHECK: $r2d = LA %stack.0, 0, $noreg |
| # CHECK-NEXT: Return implicit $r2d |
| --- |
| name: fun3 |
| tracksRegLiveness: true |
| stack: |
| - { id: 0, size: 8 } |
| body: | |
| bb.0: |
| $r2d = LA %stack.0, 0, $noreg |
| %0:gr64bit = LGHI 0 |
| Return implicit killed $r2d |
| ... |
| |
| # Don't reorder phys-reg COPYs. Recognize LA to PReg with a VReg use. |
| # CHECK: name: fun4 |
| # CHECK: %0:addr64bit = COPY $r2d |
| # CHECK-NEXT: dead %3:gr64bit = COPY $r3d |
| # CHECK-NEXT: %1:gr64bit = AGRK %0, %0, implicit-def $cc |
| # CHECK-NEXT: dead %2:gr64bit = AGRK %1, %0, implicit-def $cc |
| # CHECK-NEXT: $r2d = LA %0, 0, $noreg |
| # CHECK-NEXT: Return |
| --- |
| name: fun4 |
| tracksRegLiveness: true |
| stack: |
| - { id: 0, size: 8 } |
| body: | |
| bb.0.entry: |
| liveins: $r2d, $r3d |
| |
| %0:addr64bit = COPY $r2d |
| %2:gr64bit = AGRK %0, %0, implicit-def $cc |
| $r2d = LA %0, 0, $noreg |
| %3:gr64bit = AGRK %2, %0, implicit-def $cc |
| %1:gr64bit = COPY $r3d |
| |
| Return |
| ... |