summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2010-08-30 18:10:48 +0000
committerBob Wilson <bob.wilson@apple.com>2010-08-30 18:10:48 +0000
commit7e701979ad20796bc930b21de3888ccfa0d8b33d (patch)
treed6e276ff073084d77b9d2294f936d7102e856d44
parent6cc53be24c894532b33a92069b092112ced7ad99 (diff)
downloadllvm-7e701979ad20796bc930b21de3888ccfa0d8b33d.tar.gz
llvm-7e701979ad20796bc930b21de3888ccfa0d8b33d.tar.bz2
llvm-7e701979ad20796bc930b21de3888ccfa0d8b33d.tar.xz
When expanding NEON VST pseudo instructions, if the original super-register
operand is killed, add it to the expanded instruction as an implicit kill operand instead of marking the individual subregs with kill flags. This should work better in general and also handles the case for VST3 where one of the subregs was not referenced in the expanded instruction and so was not marked killed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112494 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/ARMExpandPseudoInsts.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/lib/Target/ARM/ARMExpandPseudoInsts.cpp
index f39e00e4ba..285674d64d 100644
--- a/lib/Target/ARM/ARMExpandPseudoInsts.cpp
+++ b/lib/Target/ARM/ARMExpandPseudoInsts.cpp
@@ -118,14 +118,16 @@ void ARMExpandPseudo::ExpandVST(MachineBasicBlock::iterator &MBBI,
D3 = TRI->getSubReg(SrcReg, ARM::dsub_7);
}
- MIB.addReg(D0, getKillRegState(SrcIsKill))
- .addReg(D1, getKillRegState(SrcIsKill));
+ MIB.addReg(D0).addReg(D1);
if (NumRegs > 2)
- MIB.addReg(D2, getKillRegState(SrcIsKill));
+ MIB.addReg(D2);
if (NumRegs > 3)
- MIB.addReg(D3, getKillRegState(SrcIsKill));
+ MIB.addReg(D3);
MIB = AddDefaultPred(MIB);
TransferImpOps(MI, MIB, MIB);
+ if (SrcIsKill)
+ // Add an implicit kill for the super-reg.
+ (*MIB).addRegisterKilled(SrcReg, TRI, true);
MI.eraseFromParent();
}