diff options
| author | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2017-06-07 14:08:34 +0000 | 
|---|---|---|
| committer | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2017-06-07 14:08:34 +0000 | 
| commit | ae8d22cee24f5c1dad863c8c355018fdca1f9d26 (patch) | |
| tree | 9032455850f61ff5a20bc349d7e4fd1afcc55884 /llvm/lib/Target | |
| parent | e1518822735b267c9c4d619076fb47f86b498d84 (diff) | |
| download | bcm5719-llvm-ae8d22cee24f5c1dad863c8c355018fdca1f9d26.tar.gz bcm5719-llvm-ae8d22cee24f5c1dad863c8c355018fdca1f9d26.zip | |
[SystemZ]  Propagate MachineMemOperands
In emitCondStore() and emitMemMemWrapper().
Review: Ulrich Weigand
llvm-svn: 304913
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZISelLowering.cpp | 25 | 
1 files changed, 19 insertions, 6 deletions
| diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp index ae141dbcad3..ac4c3f6db68 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp @@ -5367,12 +5367,24 @@ MachineBasicBlock *SystemZTargetLowering::emitCondStore(MachineInstr &MI,    if (STOCOpcode && !IndexReg && Subtarget.hasLoadStoreOnCond()) {      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) -        .addImm(Disp) -        .addImm(CCValid) -        .addImm(CCMask); +      .addReg(SrcReg) +      .add(Base) +      .addImm(Disp) +      .addImm(CCValid) +      .addImm(CCMask) +      .addMemOperand(MMO); +      MI.eraseFromParent();      return MBB;    } @@ -5950,7 +5962,8 @@ MachineBasicBlock *SystemZTargetLowering::emitMemMemWrapper(          .addImm(DestDisp)          .addImm(ThisLength)          .add(SrcBase) -        .addImm(SrcDisp); +        .addImm(SrcDisp) +        ->setMemRefs(MI.memoperands_begin(), MI.memoperands_end());      DestDisp += ThisLength;      SrcDisp += ThisLength;      Length -= ThisLength; | 

