Expand Up
@@ -133,6 +133,16 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
int64_t &Offset, unsigned &Width,
const TargetRegisterInfo *TRI) const ;
// / Return the immediate offset of the base register in a load/store \p LdSt.
MachineOperand &getMemOpBaseRegImmOfsOffsetOperand (MachineInstr &LdSt) const ;
// / \brief Returns true if opcode \p Opc is a memory operation. If it is, set
// / \p Scale, \p Width, \p MinOffset, and \p MaxOffset accordingly.
// /
// / For unscaled instructions, \p Scale is set to 1.
bool getMemOpInfo (unsigned Opcode, unsigned &Scale, unsigned &Width,
int64_t &MinOffset, int64_t &MaxOffset) const ;
bool shouldClusterMemOps (MachineInstr &FirstLdSt, MachineInstr &SecondLdSt,
unsigned NumLoads) const override ;
Expand Down
Expand Up
@@ -242,7 +252,31 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
ArrayRef<std::pair<unsigned , const char *>>
getSerializableBitmaskMachineOperandTargetFlags () const override ;
bool isFunctionSafeToOutlineFrom (MachineFunction &MF) const override ;
unsigned getOutliningBenefit (size_t SequenceSize, size_t Occurrences,
bool CanBeTailCall) const override ;
AArch64GenInstrInfo::MachineOutlinerInstrType
getOutliningType (MachineInstr &MI) const override ;
void insertOutlinerEpilogue (MachineBasicBlock &MBB,
MachineFunction &MF,
bool IsTailCall) const override ;
void insertOutlinerPrologue (MachineBasicBlock &MBB,
MachineFunction &MF,
bool isTailCall) const override ;
MachineBasicBlock::iterator
insertOutlinedCall (Module &M, MachineBasicBlock &MBB,
MachineBasicBlock::iterator &It,
MachineFunction &MF,
bool IsTailCall) const override ;
private:
// / \brief Sets the offsets on outlined instructions in \p MBB which use SP
// / so that they will be valid post-outlining.
// /
// / \param MBB A \p MachineBasicBlock in an outlined function.
void fixupPostOutline (MachineBasicBlock &MBB) const ;
void instantiateCondBranch (MachineBasicBlock &MBB, const DebugLoc &DL,
MachineBasicBlock *TBB,
ArrayRef<MachineOperand> Cond) const ;
Expand Down