diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-05-19 20:54:07 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-05-19 20:54:07 +0000 |
commit | 25ced18407b88d1e27a4311ba9e7e65db8b9becc (patch) | |
tree | 51c1a181a10dc476ea50e32592dacd7beefb4d3c /llvm/lib/CodeGen/RegisterCoalescer.cpp | |
parent | 1b707c88179ee6e9d50ebd16d54ccfe5c9280b21 (diff) | |
download | bcm5719-llvm-25ced18407b88d1e27a4311ba9e7e65db8b9becc.tar.gz bcm5719-llvm-25ced18407b88d1e27a4311ba9e7e65db8b9becc.zip |
Erase joined copies immediately.
The late dead code elimination is no longer necessary.
The test changes are cause by a register hint that can be either %rdi or
%rax. The choice depends on the use list order, which this patch changes.
llvm-svn: 157131
Diffstat (limited to 'llvm/lib/CodeGen/RegisterCoalescer.cpp')
-rw-r--r-- | llvm/lib/CodeGen/RegisterCoalescer.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/RegisterCoalescer.cpp b/llvm/lib/CodeGen/RegisterCoalescer.cpp index 5e876df8662..2418e74a5f5 100644 --- a/llvm/lib/CodeGen/RegisterCoalescer.cpp +++ b/llvm/lib/CodeGen/RegisterCoalescer.cpp @@ -766,7 +766,9 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP, DEBUG(dbgs() << "\t\tnoop: " << DefIdx << '\t' << *UseMI); assert(DVNI->def == DefIdx); BValNo = IntB.MergeValueNumberInto(BValNo, DVNI); - markAsJoined(UseMI); + ErasedInstrs.insert(UseMI); + LIS->RemoveMachineInstrFromMaps(UseMI); + UseMI->eraseFromParent(); } // Extend BValNo by merging in IntA live ranges of AValNo. Val# definition @@ -1127,7 +1129,8 @@ bool RegisterCoalescer::joinCopy(MachineInstr *CopyMI, bool &Again) { if (!CP.isPartial()) { if (adjustCopiesBackFrom(CP, CopyMI) || removeCopyByCommutingDef(CP, CopyMI)) { - markAsJoined(CopyMI); + LIS->RemoveMachineInstrFromMaps(CopyMI); + CopyMI->eraseFromParent(); DEBUG(dbgs() << "\tTrivial!\n"); return true; } @@ -1152,7 +1155,8 @@ bool RegisterCoalescer::joinCopy(MachineInstr *CopyMI, bool &Again) { InflateRegs.push_back(CP.getDstReg()); // Remember to delete the copy instruction. - markAsJoined(CopyMI); + LIS->RemoveMachineInstrFromMaps(CopyMI); + CopyMI->eraseFromParent(); // Rewrite all SrcReg operands to DstReg. // Also update DstReg operands to include DstIdx if it is set. @@ -1518,13 +1522,11 @@ bool RegisterCoalescer::joinIntervals(CoalescerPair &CP) { // was actually a copy from A. Now that we decided to coalesce A and B, // transform the code into // A = X - // X = X - // and mark the X as coalesced to keep the illusion. unsigned Src = MI->getOperand(1).getReg(); SourceRegisters.push_back(Src); - MI->getOperand(0).substVirtReg(Src, 0, *TRI); - - markAsJoined(MI); + ErasedInstrs.insert(MI); + LIS->RemoveMachineInstrFromMaps(MI); + MI->eraseFromParent(); } // If B = X was the last use of X in a liverange, we have to shrink it now |