1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[SystemZ] Fix AHIMuxK pseudo expansion.

Do not emit a copy if the source and destination registers are the same.

Review: Ulrich Weigand
llvm-svn: 363665
This commit is contained in:
Jonas Paulsson 2019-06-18 12:10:02 +00:00
parent 730e35ad92
commit 221b23dde2
2 changed files with 26 additions and 4 deletions

View File

@ -168,11 +168,13 @@ void SystemZInstrInfo::expandRIEPseudo(MachineInstr &MI, unsigned LowOpcode,
if (!DestIsHigh && !SrcIsHigh)
MI.setDesc(get(LowOpcodeK));
else {
emitGRX32Move(*MI.getParent(), MI, MI.getDebugLoc(), DestReg, SrcReg,
SystemZ::LR, 32, MI.getOperand(1).isKill(),
MI.getOperand(1).isUndef());
if (DestReg != SrcReg) {
emitGRX32Move(*MI.getParent(), MI, MI.getDebugLoc(), DestReg, SrcReg,
SystemZ::LR, 32, MI.getOperand(1).isKill(),
MI.getOperand(1).isUndef());
MI.getOperand(1).setReg(DestReg);
}
MI.setDesc(get(DestIsHigh ? HighOpcode : LowOpcode));
MI.getOperand(1).setReg(DestReg);
MI.tieOperands(0, 1);
}
}

View File

@ -0,0 +1,20 @@
# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 -start-before=postrapseudos \
# RUN: %s -o - | FileCheck %s
#
# Test that an AHIMuxK pseudo does not result in a COPY (risbhg) if the
# source and destination registers are the same.
---
name: fun
tracksRegLiveness: true
body: |
bb.0:
$r1h = IIHF 0
renamable $r1h = nuw nsw AHIMuxK killed renamable $r1h, 4, implicit-def dead $cc
; CHECK-LABEL: fun
; CHECK-NOT: risbhg
; CHECK: aih %r1, 4
...