| # RUN: llc -mtriple powerpc64le-unknown-linux-gnu -mcpu=pwr8 -x mir < %s \ | |
| # RUN: -verify-machineinstrs -start-before=ppc-mi-peepholes | FileCheck %s | |
| --- | |
| name: remove_frsp | |
| alignment: 16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0.entry: | |
| liveins: $x3, $x4 | |
| %1:g8rc = COPY $x4 | |
| %0:g8rc_and_g8rc_nox0 = COPY $x3 | |
| %2:g8rc = RLDICR %1, 2, 61 | |
| %3:f8rc, %4:g8rc_and_g8rc_nox0 = LFSUX %0, killed %2 | |
| %5:f4rc = FRSP killed %3, implicit $rm | |
| %22:vslrc = SUBREG_TO_REG %5, %subreg.sub_64 | |
| %7:g8rc = LI8 8 | |
| %8:vssrc = XFLOADf32 %4, killed %7 | |
| %23:vslrc = SUBREG_TO_REG %8, %subreg.sub_64 | |
| %10:vsrc = XXPERMDI %23, %22, 0 | |
| %11:vrrc = XVCVDPSP killed %10, implicit $rm | |
| $v2 = COPY %11 | |
| BLR8 implicit $lr8, implicit $rm, implicit $v2 | |
| ... | |
| # CHECK-LABEL: remove_frsp | |
| # CHECK: sldi 4, 4, 2 | |
| # CHECK-NEXT: lfsux 0, 3, 4 | |
| # CHECK-NOT: frsp | |
| # CHECK-NEXT: lfs 1, 8(3) | |
| # CHECK-NEXT: xxmrghd 0, 1, 0 | |
| # CHECK-NEXT: xvcvdpsp 34, 0 | |
| # CHECK-NEXT: blr | |
| --- | |
| name: remove_xsrsp | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0.entry: | |
| liveins: $x3, $x4 | |
| %1:g8rc = COPY $x4 | |
| %0:g8rc_and_g8rc_nox0 = COPY $x3 | |
| %2:g8rc = RLDICR %1, 2, 61 | |
| %3:f8rc, %4:g8rc_and_g8rc_nox0 = LFSUX %0, killed %2 | |
| %5:vssrc = XSRSP killed %3 | |
| %22:vslrc = SUBREG_TO_REG %5, %subreg.sub_64 | |
| %7:g8rc = LI8 8 | |
| %8:vssrc = XFLOADf32 %4, killed %7 | |
| %23:vslrc = SUBREG_TO_REG %8, %subreg.sub_64 | |
| %10:vsrc = XXPERMDI %23, %22, 0 | |
| %11:vrrc = XVCVDPSP killed %10, implicit $rm | |
| $v2 = COPY %11 | |
| BLR8 implicit $lr8, implicit $rm, implicit $v2 | |
| ... | |
| # CHECK-LABEL: remove_xsrsp | |
| # CHECK: sldi 4, 4, 2 | |
| # CHECK-NEXT: lfsux 0, 3, 4 | |
| # CHECK-NOT: xsrsp | |
| # CHECK-NEXT: lfs 1, 8(3) | |
| # CHECK-NEXT: xxmrghd 0, 1, 0 | |
| # CHECK-NEXT: xvcvdpsp 34, 0 | |
| # CHECK-NEXT: blr |