diff options
author | Bob Wilson <bob.wilson@apple.com> | 2010-08-30 18:10:48 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2010-08-30 18:10:48 +0000 |
commit | 7e701979ad20796bc930b21de3888ccfa0d8b33d (patch) | |
tree | d6e276ff073084d77b9d2294f936d7102e856d44 | |
parent | 6cc53be24c894532b33a92069b092112ced7ad99 (diff) | |
download | external_llvm-7e701979ad20796bc930b21de3888ccfa0d8b33d.zip external_llvm-7e701979ad20796bc930b21de3888ccfa0d8b33d.tar.gz external_llvm-7e701979ad20796bc930b21de3888ccfa0d8b33d.tar.bz2 |
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.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/lib/Target/ARM/ARMExpandPseudoInsts.cpp index f39e00e..285674d 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(); } |