mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 21:20:37 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157131 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5636660176
commit
ccce1233a2
@ -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
|
||||
|
@ -51,14 +51,14 @@ false:
|
||||
; X64-NEXT: callq __morestack
|
||||
; X64-NEXT: ret
|
||||
|
||||
; X64: movq %rsp, %rdi
|
||||
; X64-NEXT: subq %rax, %rdi
|
||||
; X64-NEXT: cmpq %rdi, %fs:112
|
||||
; X64: movq %rsp, %[[RDI:rdi|rax]]
|
||||
; X64-NEXT: subq %{{.*}}, %[[RDI]]
|
||||
; X64-NEXT: cmpq %[[RDI]], %fs:112
|
||||
|
||||
; X64: movq %rdi, %rsp
|
||||
; X64: movq %[[RDI]], %rsp
|
||||
|
||||
; X64: movq %rax, %rdi
|
||||
; X64: movq %{{.*}}, %rdi
|
||||
; X64-NEXT: callq __morestack_allocate_stack_space
|
||||
; X64-NEXT: movq %rax, %rdi
|
||||
; X64: movq %rax, %rdi
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user