summaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveVariables.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-07-06 21:34:05 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-07-06 21:34:05 +0000
commit2c4d96dfe9c309cc6b206c7d2cf03fe9fbd8aa93 (patch)
treecf2a5e23efae61a7ca59a6fdda5fab0fdfc6f69b /lib/CodeGen/LiveVariables.cpp
parent643dda1d625d286dc53283d22152ba56926a1f25 (diff)
downloadllvm-2c4d96dfe9c309cc6b206c7d2cf03fe9fbd8aa93.tar.gz
llvm-2c4d96dfe9c309cc6b206c7d2cf03fe9fbd8aa93.tar.bz2
llvm-2c4d96dfe9c309cc6b206c7d2cf03fe9fbd8aa93.tar.xz
Avoid adding a duplicate def. This fixes PR4478.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74857 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveVariables.cpp')
-rw-r--r--lib/CodeGen/LiveVariables.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp
index bd845085bb..bb72d80cb6 100644
--- a/lib/CodeGen/LiveVariables.cpp
+++ b/lib/CodeGen/LiveVariables.cpp
@@ -369,8 +369,17 @@ bool LiveVariables::HandlePhysRegKill(unsigned Reg, MachineInstr *MI) {
for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
unsigned SubReg = *SubRegs; ++SubRegs) {
if (PartUses.count(SubReg)) {
- PhysRegDef[Reg]->addOperand(MachineOperand::CreateReg(SubReg,
- true, true));
+ bool NeedDef = true;
+ if (PhysRegDef[Reg] == PhysRegDef[SubReg]) {
+ MachineOperand *MO = PhysRegDef[Reg]->findRegisterDefOperand(SubReg);
+ if (MO) {
+ NeedDef = false;
+ assert(!MO->isDead());
+ }
+ }
+ if (NeedDef)
+ PhysRegDef[Reg]->addOperand(MachineOperand::CreateReg(SubReg,
+ true, true));
LastRefOrPartRef->addRegisterKilled(SubReg, TRI, true);
for (const unsigned *SS = TRI->getSubRegisters(SubReg); *SS; ++SS)
PartUses.erase(*SS);