diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-20 11:41:25 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-20 11:41:25 +0000 | 
| commit | d9484dd61cc151c4f34c31e07f693fefa66316b5 (patch) | |
| tree | ab0560b3da293f1fafd3269c59692e929418f5c2 /contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp | |
| parent | 79e0962d4c3cf1f0acf359a9d69cb3ac68c414c4 (diff) | |
| parent | d8e91e46262bc44006913e6796843909f1ac7bcd (diff) | |
Notes
Diffstat (limited to 'contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp')
| -rw-r--r-- | contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp | 51 | 
1 files changed, 20 insertions, 31 deletions
diff --git a/contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp b/contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp index 963f8178b509..2a17af391105 100644 --- a/contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp +++ b/contrib/llvm/lib/CodeGen/TargetInstrInfo.cpp @@ -339,42 +339,32 @@ bool TargetInstrInfo::PredicateInstruction(    return MadeChange;  } -bool TargetInstrInfo::hasLoadFromStackSlot(const MachineInstr &MI, -                                           const MachineMemOperand *&MMO, -                                           int &FrameIndex) const { +bool TargetInstrInfo::hasLoadFromStackSlot( +    const MachineInstr &MI, +    SmallVectorImpl<const MachineMemOperand *> &Accesses) const { +  size_t StartSize = Accesses.size();    for (MachineInstr::mmo_iterator o = MI.memoperands_begin(),                                    oe = MI.memoperands_end();         o != oe; ++o) { -    if ((*o)->isLoad()) { -      if (const FixedStackPseudoSourceValue *Value = -          dyn_cast_or_null<FixedStackPseudoSourceValue>( -              (*o)->getPseudoValue())) { -        FrameIndex = Value->getFrameIndex(); -        MMO = *o; -        return true; -      } -    } +    if ((*o)->isLoad() && +        dyn_cast_or_null<FixedStackPseudoSourceValue>((*o)->getPseudoValue())) +      Accesses.push_back(*o);    } -  return false; +  return Accesses.size() != StartSize;  } -bool TargetInstrInfo::hasStoreToStackSlot(const MachineInstr &MI, -                                          const MachineMemOperand *&MMO, -                                          int &FrameIndex) const { +bool TargetInstrInfo::hasStoreToStackSlot( +    const MachineInstr &MI, +    SmallVectorImpl<const MachineMemOperand *> &Accesses) const { +  size_t StartSize = Accesses.size();    for (MachineInstr::mmo_iterator o = MI.memoperands_begin(),                                    oe = MI.memoperands_end();         o != oe; ++o) { -    if ((*o)->isStore()) { -      if (const FixedStackPseudoSourceValue *Value = -          dyn_cast_or_null<FixedStackPseudoSourceValue>( -              (*o)->getPseudoValue())) { -        FrameIndex = Value->getFrameIndex(); -        MMO = *o; -        return true; -      } -    } +    if ((*o)->isStore() && +        dyn_cast_or_null<FixedStackPseudoSourceValue>((*o)->getPseudoValue())) +      Accesses.push_back(*o);    } -  return false; +  return Accesses.size() != StartSize;  }  bool TargetInstrInfo::getStackSlotRange(const TargetRegisterClass *RC, @@ -388,8 +378,7 @@ bool TargetInstrInfo::getStackSlotRange(const TargetRegisterClass *RC,      return true;    }    unsigned BitSize = TRI->getSubRegIdxSize(SubIdx); -  // Convert bit size to byte size to be consistent with -  // MCRegisterClass::getSize(). +  // Convert bit size to byte size.    if (BitSize % 8)      return false; @@ -584,7 +573,7 @@ MachineInstr *TargetInstrInfo::foldMemoryOperand(MachineInstr &MI,    }    if (NewMI) { -    NewMI->setMemRefs(MI.memoperands_begin(), MI.memoperands_end()); +    NewMI->setMemRefs(MF, MI.memoperands());      // Add a memory operand, foldMemoryOperandImpl doesn't do that.      assert((!(Flags & MachineMemOperand::MOStore) ||              NewMI->mayStore()) && @@ -654,10 +643,10 @@ MachineInstr *TargetInstrInfo::foldMemoryOperand(MachineInstr &MI,    // Copy the memoperands from the load to the folded instruction.    if (MI.memoperands_empty()) { -    NewMI->setMemRefs(LoadMI.memoperands_begin(), LoadMI.memoperands_end()); +    NewMI->setMemRefs(MF, LoadMI.memoperands());    } else {      // Handle the rare case of folding multiple loads. -    NewMI->setMemRefs(MI.memoperands_begin(), MI.memoperands_end()); +    NewMI->setMemRefs(MF, MI.memoperands());      for (MachineInstr::mmo_iterator I = LoadMI.memoperands_begin(),                                      E = LoadMI.memoperands_end();           I != E; ++I) {  | 
