[Hexagon, SystemZ] Be super conservative about atomics

As requested during review of D57601, be equally conservative for atomic MMOs as for volatile MMOs in all in tree backends. At the moment, all atomic MMOs are also volatile, but I'm about to change that.

Reviewed as part of https://reviews.llvm.org/D58490, with other backends still pending review.  

llvm-svn: 354740
This commit is contained in:
Philip Reames 2019-02-24 00:45:09 +00:00
parent e7b9464943
commit 33d7e49bb7
4 changed files with 5 additions and 5 deletions

View File

@ -733,7 +733,7 @@ bool HexagonExpandCondsets::isPredicable(MachineInstr *MI) {
HasDef = true;
}
for (auto &Mo : MI->memoperands())
if (Mo->isVolatile())
if (Mo->isVolatile() || Mo->isAtomic())
return false;
return true;
}

View File

@ -2101,7 +2101,7 @@ void HexagonFrameLowering::optimizeSpillSlots(MachineFunction &MF,
}
if (!Bad) {
for (auto *Mo : In.memoperands()) {
if (!Mo->isVolatile())
if (!Mo->isVolatile() && !Mo->isAtomic())
continue;
Bad = true;
break;

View File

@ -152,8 +152,8 @@ bool HexagonSplitDoubleRegs::isInduction(unsigned Reg, LoopRegMap &IRM) const {
}
bool HexagonSplitDoubleRegs::isVolatileInstr(const MachineInstr *MI) const {
for (auto &I : MI->memoperands())
if (I->isVolatile())
for (auto &MO : MI->memoperands())
if (MO->isVolatile() || MO->isAtomic())
return true;
return false;
}

View File

@ -1188,7 +1188,7 @@ MachineInstr *SystemZInstrInfo::foldMemoryOperandImpl(
// MVCs that turn out to be redundant.
if (OpNum == 0 && MI.hasOneMemOperand()) {
MachineMemOperand *MMO = *MI.memoperands_begin();
if (MMO->getSize() == Size && !MMO->isVolatile()) {
if (MMO->getSize() == Size && !MMO->isVolatile() && !MMO->isAtomic()) {
// Handle conversion of loads.
if (isSimpleBD12Move(&MI, SystemZII::SimpleBDXLoad)) {
return BuildMI(*InsertPt->getParent(), InsertPt, MI.getDebugLoc(),