mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-13 14:46:15 +00:00
In the below scenario, we must be able to skip the a DBG_VALUE instruction and
remove the dead store. %vreg0<def> = L2_loadri_io <fi#15>, 0; mem:LD4[%dataF](align=4) DBG_VALUE %vreg0, %noreg, !"dataF", <!184>; IntRegs:%vreg0 S2_storeri_io <fi#15>, 0, %vreg0; mem:ST4[%dataF] In reality, this kind of stores are eliminated before Stack Slot Coloring pass, possibly in instruction lowering Differential Revision: https://reviews.llvm.org/D26616 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291455 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9c61a35f9e
commit
e2818e528b
@ -381,7 +381,6 @@ bool StackSlotColoring::RemoveDeadStores(MachineBasicBlock* MBB) {
|
||||
I != E; ++I) {
|
||||
if (DCELimit != -1 && (int)NumDead >= DCELimit)
|
||||
break;
|
||||
|
||||
int FirstSS, SecondSS;
|
||||
if (TII->isStackSlotCopy(*I, FirstSS, SecondSS) && FirstSS == SecondSS &&
|
||||
FirstSS != -1) {
|
||||
@ -392,12 +391,18 @@ bool StackSlotColoring::RemoveDeadStores(MachineBasicBlock* MBB) {
|
||||
}
|
||||
|
||||
MachineBasicBlock::iterator NextMI = std::next(I);
|
||||
if (NextMI == MBB->end()) continue;
|
||||
MachineBasicBlock::iterator ProbableLoadMI = I;
|
||||
|
||||
unsigned LoadReg = 0;
|
||||
unsigned StoreReg = 0;
|
||||
if (!(LoadReg = TII->isLoadFromStackSlot(*I, FirstSS)))
|
||||
continue;
|
||||
// Skip the ...pseudo debugging... instructions between a load and store.
|
||||
while ((NextMI != E) && NextMI->isDebugValue()) {
|
||||
++NextMI;
|
||||
++I;
|
||||
}
|
||||
if (NextMI == E) continue;
|
||||
if (!(StoreReg = TII->isStoreToStackSlot(*NextMI, SecondSS)))
|
||||
continue;
|
||||
if (FirstSS != SecondSS || LoadReg != StoreReg || FirstSS == -1) continue;
|
||||
@ -407,7 +412,7 @@ bool StackSlotColoring::RemoveDeadStores(MachineBasicBlock* MBB) {
|
||||
|
||||
if (NextMI->findRegisterUseOperandIdx(LoadReg, true, nullptr) != -1) {
|
||||
++NumDead;
|
||||
toErase.push_back(&*I);
|
||||
toErase.push_back(&*ProbableLoadMI);
|
||||
}
|
||||
|
||||
toErase.push_back(&*NextMI);
|
||||
|
Loading…
x
Reference in New Issue
Block a user