forked from OSchip/llvm-project
[SystemZ] Preserve the MachineMemOperand in emitCondStore() in all cases.
Review: Ulrich Weigand
This commit is contained in:
parent
2431b143ae
commit
8ac70694b9
|
@ -7246,6 +7246,15 @@ MachineBasicBlock *SystemZTargetLowering::emitCondStore(MachineInstr &MI,
|
|||
|
||||
StoreOpcode = TII->getOpcodeForOffset(StoreOpcode, Disp);
|
||||
|
||||
// ISel pattern matching also adds a load memory operand of the same
|
||||
// address, so take special care to find the storing memory operand.
|
||||
MachineMemOperand *MMO = nullptr;
|
||||
for (auto *I : MI.memoperands())
|
||||
if (I->isStore()) {
|
||||
MMO = I;
|
||||
break;
|
||||
}
|
||||
|
||||
// Use STOCOpcode if possible. We could use different store patterns in
|
||||
// order to avoid matching the index register, but the performance trade-offs
|
||||
// might be more complicated in that case.
|
||||
|
@ -7253,15 +7262,6 @@ MachineBasicBlock *SystemZTargetLowering::emitCondStore(MachineInstr &MI,
|
|||
if (Invert)
|
||||
CCMask ^= CCValid;
|
||||
|
||||
// ISel pattern matching also adds a load memory operand of the same
|
||||
// address, so take special care to find the storing memory operand.
|
||||
MachineMemOperand *MMO = nullptr;
|
||||
for (auto *I : MI.memoperands())
|
||||
if (I->isStore()) {
|
||||
MMO = I;
|
||||
break;
|
||||
}
|
||||
|
||||
BuildMI(*MBB, MI, DL, TII->get(STOCOpcode))
|
||||
.addReg(SrcReg)
|
||||
.add(Base)
|
||||
|
@ -7306,7 +7306,8 @@ MachineBasicBlock *SystemZTargetLowering::emitCondStore(MachineInstr &MI,
|
|||
.addReg(SrcReg)
|
||||
.add(Base)
|
||||
.addImm(Disp)
|
||||
.addReg(IndexReg);
|
||||
.addReg(IndexReg)
|
||||
.addMemOperand(MMO);
|
||||
MBB->addSuccessor(JoinMBB);
|
||||
|
||||
MI.eraseFromParent();
|
||||
|
|
Loading…
Reference in New Issue