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