diff options
author | Dan Gohman <gohman@apple.com> | 2010-02-28 01:33:43 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-02-28 01:33:43 +0000 |
commit | 6ac33b4533889f132ba10c812ae574d779c827b9 (patch) | |
tree | 8af9c8d0152d811dd93648232e5593674cf154dd /lib/CodeGen/MachineLICM.cpp | |
parent | 8772f5041ce8e98695655a72a54b952583630617 (diff) | |
download | external_llvm-6ac33b4533889f132ba10c812ae574d779c827b9.zip external_llvm-6ac33b4533889f132ba10c812ae574d779c827b9.tar.gz external_llvm-6ac33b4533889f132ba10c812ae574d779c827b9.tar.bz2 |
Don't try to replace physical registers when doing CSE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97360 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineLICM.cpp')
-rw-r--r-- | lib/CodeGen/MachineLICM.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/CodeGen/MachineLICM.cpp b/lib/CodeGen/MachineLICM.cpp index 5580ec1..bb80cd6 100644 --- a/lib/CodeGen/MachineLICM.cpp +++ b/lib/CodeGen/MachineLICM.cpp @@ -458,9 +458,20 @@ bool MachineLICM::EliminateCSE(MachineInstr *MI, if (const MachineInstr *Dup = LookForDuplicate(MI, CI->second)) { DEBUG(dbgs() << "CSEing " << *MI << " with " << *Dup); + + // Replace virtual registers defined by MI by their counterparts defined + // by Dup. for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { const MachineOperand &MO = MI->getOperand(i); - if (MO.isReg() && MO.isDef()) + + // Physical registers may not differ here. + assert((!MO.isReg() || MO.getReg() == 0 || + !TargetRegisterInfo::isPhysicalRegister(MO.getReg()) || + MO.getReg() == Dup->getOperand(i).getReg()) && + "Instructions with different phys regs are not identical!"); + + if (MO.isReg() && MO.isDef() && + !TargetRegisterInfo::isPhysicalRegister(MO.getReg())) RegInfo->replaceRegWith(MO.getReg(), Dup->getOperand(i).getReg()); } MI->eraseFromParent(); |