mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +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:
parent
730e35ad92
commit
221b23dde2
@ -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);
|
||||
}
|
||||
}
|
||||
|
20
test/CodeGen/SystemZ/int-add-18.mir
Normal file
20
test/CodeGen/SystemZ/int-add-18.mir
Normal 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
|
||||
...
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user