LLVM API Documentation

Public Member Functions
llvm::HexagonInstrInfo Class Reference

#include <HexagonInstrInfo.h>

Inheritance diagram for llvm::HexagonInstrInfo:
Inheritance graph
[legend]
Collaboration diagram for llvm::HexagonInstrInfo:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 HexagonInstrInfo (HexagonSubtarget &ST)
virtual const HexagonRegisterInfogetRegisterInfo () const
virtual unsigned isLoadFromStackSlot (const MachineInstr *MI, int &FrameIndex) const
virtual unsigned isStoreToStackSlot (const MachineInstr *MI, int &FrameIndex) const
virtual bool AnalyzeBranch (MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify) const
virtual unsigned RemoveBranch (MachineBasicBlock &MBB) const
virtual unsigned InsertBranch (MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, const SmallVectorImpl< MachineOperand > &Cond, DebugLoc DL) const
virtual bool analyzeCompare (const MachineInstr *MI, unsigned &SrcReg, unsigned &SrcReg2, int &Mask, int &Value) const
 For a comparison instruction, return the source registers in SrcReg and SrcReg2 if having two register operands, and the value it compares against in CmpValue. Return true if the comparison instruction can be analyzed.
virtual void copyPhysReg (MachineBasicBlock &MBB, MachineBasicBlock::iterator I, DebugLoc DL, unsigned DestReg, unsigned SrcReg, bool KillSrc) const
virtual void storeRegToStackSlot (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI) const
virtual void storeRegToAddr (MachineFunction &MF, unsigned SrcReg, bool isKill, SmallVectorImpl< MachineOperand > &Addr, const TargetRegisterClass *RC, SmallVectorImpl< MachineInstr * > &NewMIs) const
virtual void loadRegFromStackSlot (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned DestReg, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI) const
virtual void loadRegFromAddr (MachineFunction &MF, unsigned DestReg, SmallVectorImpl< MachineOperand > &Addr, const TargetRegisterClass *RC, SmallVectorImpl< MachineInstr * > &NewMIs) const
virtual MachineInstrfoldMemoryOperandImpl (MachineFunction &MF, MachineInstr *MI, const SmallVectorImpl< unsigned > &Ops, int FrameIndex) const
virtual MachineInstrfoldMemoryOperandImpl (MachineFunction &MF, MachineInstr *MI, const SmallVectorImpl< unsigned > &Ops, MachineInstr *LoadMI) const
unsigned createVR (MachineFunction *MF, MVT VT) const
virtual bool isBranch (const MachineInstr *MI) const
virtual bool isPredicable (MachineInstr *MI) const
virtual bool PredicateInstruction (MachineInstr *MI, const SmallVectorImpl< MachineOperand > &Cond) const
virtual bool isProfitableToIfCvt (MachineBasicBlock &MBB, unsigned NumCycles, unsigned ExtraPredCycles, const BranchProbability &Probability) const
virtual bool isProfitableToIfCvt (MachineBasicBlock &TMBB, unsigned NumTCycles, unsigned ExtraTCycles, MachineBasicBlock &FMBB, unsigned NumFCycles, unsigned ExtraFCycles, const BranchProbability &Probability) const
virtual bool isPredicated (const MachineInstr *MI) const
virtual bool isPredicated (unsigned Opcode) const
virtual bool isPredicatedTrue (const MachineInstr *MI) const
virtual bool isPredicatedTrue (unsigned Opcode) const
virtual bool isPredicatedNew (const MachineInstr *MI) const
virtual bool isPredicatedNew (unsigned Opcode) const
virtual bool DefinesPredicate (MachineInstr *MI, std::vector< MachineOperand > &Pred) const
virtual bool SubsumesPredicate (const SmallVectorImpl< MachineOperand > &Pred1, const SmallVectorImpl< MachineOperand > &Pred2) const
virtual bool ReverseBranchCondition (SmallVectorImpl< MachineOperand > &Cond) const
virtual bool isProfitableToDupForIfCvt (MachineBasicBlock &MBB, unsigned NumCycles, const BranchProbability &Probability) const
virtual DFAPacketizerCreateTargetScheduleState (const TargetMachine *TM, const ScheduleDAG *DAG) const
virtual bool isSchedulingBoundary (const MachineInstr *MI, const MachineBasicBlock *MBB, const MachineFunction &MF) const
bool isValidOffset (const int Opcode, const int Offset) const
bool isValidAutoIncImm (const EVT VT, const int Offset) const
bool isMemOp (const MachineInstr *MI) const
bool isSpillPredRegOp (const MachineInstr *MI) const
bool isU6_3Immediate (const int value) const
bool isU6_2Immediate (const int value) const
bool isU6_1Immediate (const int value) const
bool isU6_0Immediate (const int value) const
bool isS4_3Immediate (const int value) const
bool isS4_2Immediate (const int value) const
bool isS4_1Immediate (const int value) const
bool isS4_0Immediate (const int value) const
bool isS12_Immediate (const int value) const
bool isU6_Immediate (const int value) const
bool isS8_Immediate (const int value) const
bool isS6_Immediate (const int value) const
bool isSaveCalleeSavedRegsCall (const MachineInstr *MI) const
bool isConditionalTransfer (const MachineInstr *MI) const
bool isConditionalALU32 (const MachineInstr *MI) const
bool isConditionalLoad (const MachineInstr *MI) const
bool isConditionalStore (const MachineInstr *MI) const
bool isNewValueInst (const MachineInstr *MI) const
bool isNewValue (const MachineInstr *MI) const
bool isDotNewInst (const MachineInstr *MI) const
int GetDotOldOp (const int opc) const
int GetDotNewOp (const MachineInstr *MI) const
int GetDotNewPredOp (MachineInstr *MI, const MachineBranchProbabilityInfo *MBPI) const
bool mayBeNewStore (const MachineInstr *MI) const
bool isDeallocRet (const MachineInstr *MI) const
unsigned getInvertedPredicatedOpcode (const int Opc) const
bool isExtendable (const MachineInstr *MI) const
bool isExtended (const MachineInstr *MI) const
bool isPostIncrement (const MachineInstr *MI) const
bool isNewValueStore (const MachineInstr *MI) const
bool isNewValueStore (unsigned Opcode) const
bool isNewValueJump (const MachineInstr *MI) const
bool isNewValueJumpCandidate (const MachineInstr *MI) const
void immediateExtend (MachineInstr *MI) const
bool isConstExtended (MachineInstr *MI) const
int getDotNewPredJumpOp (MachineInstr *MI, const MachineBranchProbabilityInfo *MBPI) const
unsigned getAddrMode (const MachineInstr *MI) const
bool isOperandExtended (const MachineInstr *MI, unsigned short OperandNum) const
unsigned short getCExtOpNum (const MachineInstr *MI) const
int getMinValue (const MachineInstr *MI) const
int getMaxValue (const MachineInstr *MI) const
bool NonExtEquivalentExists (const MachineInstr *MI) const
short getNonExtOpcode (const MachineInstr *MI) const
bool PredOpcodeHasJMP_c (Opcode_t Opcode) const
bool PredOpcodeHasNot (Opcode_t Opcode) const

Detailed Description

Definition at line 28 of file HexagonInstrInfo.h.


Constructor & Destructor Documentation

HexagonInstrInfo::HexagonInstrInfo ( HexagonSubtarget ST) [explicit]

Definition at line 59 of file HexagonInstrInfo.cpp.


Member Function Documentation

bool HexagonInstrInfo::AnalyzeBranch ( MachineBasicBlock MBB,
MachineBasicBlock *&  TBB,
MachineBasicBlock *&  FBB,
SmallVectorImpl< MachineOperand > &  Cond,
bool  AllowModify 
) const [virtual]
bool HexagonInstrInfo::analyzeCompare ( const MachineInstr MI,
unsigned SrcReg,
unsigned SrcReg2,
int &  Mask,
int &  Value 
) const [virtual]

For a comparison instruction, return the source registers in SrcReg and SrcReg2 if having two register operands, and the value it compares against in CmpValue. Return true if the comparison instruction can be analyzed.

Definition at line 337 of file HexagonInstrInfo.cpp.

References llvm::MachineOperand::getImm(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), and llvm::MachineOperand::getReg().

void HexagonInstrInfo::copyPhysReg ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  I,
DebugLoc  DL,
unsigned  DestReg,
unsigned  SrcReg,
bool  KillSrc 
) const [virtual]
DFAPacketizer * HexagonInstrInfo::CreateTargetScheduleState ( const TargetMachine TM,
const ScheduleDAG DAG 
) const [virtual]
unsigned HexagonInstrInfo::createVR ( MachineFunction MF,
MVT  VT 
) const
bool HexagonInstrInfo::DefinesPredicate ( MachineInstr MI,
std::vector< MachineOperand > &  Pred 
) const [virtual]
MachineInstr * HexagonInstrInfo::foldMemoryOperandImpl ( MachineFunction MF,
MachineInstr MI,
const SmallVectorImpl< unsigned > &  Ops,
int  FrameIndex 
) const [virtual]

Definition at line 553 of file HexagonInstrInfo.cpp.

virtual MachineInstr* llvm::HexagonInstrInfo::foldMemoryOperandImpl ( MachineFunction MF,
MachineInstr MI,
const SmallVectorImpl< unsigned > &  Ops,
MachineInstr LoadMI 
) const [inline, virtual]

Definition at line 107 of file HexagonInstrInfo.h.

unsigned HexagonInstrInfo::getAddrMode ( const MachineInstr MI) const
unsigned short HexagonInstrInfo::getCExtOpNum ( const MachineInstr MI) const
int HexagonInstrInfo::GetDotNewOp ( const MachineInstr MI) const

Definition at line 1549 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode(), and llvm_unreachable.

int HexagonInstrInfo::getDotNewPredJumpOp ( MachineInstr MI,
const MachineBranchProbabilityInfo MBPI 
) const
int HexagonInstrInfo::GetDotNewPredOp ( MachineInstr MI,
const MachineBranchProbabilityInfo MBPI 
) const
int HexagonInstrInfo::GetDotOldOp ( const int  opc) const

Definition at line 1532 of file HexagonInstrInfo.cpp.

References isNewValueStore(), isPredicated(), and isPredicatedNew().

unsigned HexagonInstrInfo::getInvertedPredicatedOpcode ( const int  Opc) const

Definition at line 728 of file HexagonInstrInfo.cpp.

References isPredicatedTrue(), and llvm_unreachable.

int HexagonInstrInfo::getMaxValue ( const MachineInstr MI) const
int HexagonInstrInfo::getMinValue ( const MachineInstr MI) const
short HexagonInstrInfo::getNonExtOpcode ( const MachineInstr MI) const
virtual const HexagonRegisterInfo& llvm::HexagonInstrInfo::getRegisterInfo ( ) const [inline, virtual]

getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As such, whenever a client has an instance of instruction info, it should always be able to get register info as well (through this method).

Definition at line 40 of file HexagonInstrInfo.h.

Referenced by llvm::HexagonTargetMachine::getRegisterInfo(), INITIALIZE_PASS(), isConditionalALU32(), isConditionalLoad(), isConditionalStore(), mayBeNewStore(), and llvm::VirtRegMap::runOnMachineFunction().

void HexagonInstrInfo::immediateExtend ( MachineInstr MI) const
unsigned HexagonInstrInfo::InsertBranch ( MachineBasicBlock MBB,
MachineBasicBlock TBB,
MachineBasicBlock FBB,
const SmallVectorImpl< MachineOperand > &  Cond,
DebugLoc  DL 
) const [virtual]
bool HexagonInstrInfo::isBranch ( const MachineInstr MI) const [virtual]

Definition at line 619 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getDesc(), and llvm::MCInstrDesc::isBranch().

Referenced by isNewValueJump().

bool HexagonInstrInfo::isConditionalALU32 ( const MachineInstr MI) const
bool HexagonInstrInfo::isConditionalLoad ( const MachineInstr MI) const
bool HexagonInstrInfo::isConditionalStore ( const MachineInstr MI) const
bool HexagonInstrInfo::isConditionalTransfer ( const MachineInstr MI) const

Definition at line 1273 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode().

bool HexagonInstrInfo::isConstExtended ( MachineInstr MI) const
bool HexagonInstrInfo::isDeallocRet ( const MachineInstr MI) const

Definition at line 1077 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode().

bool HexagonInstrInfo::isDotNewInst ( const MachineInstr MI) const

Definition at line 1518 of file HexagonInstrInfo.cpp.

References isNewValueInst(), isPredicated(), and isPredicatedNew().

bool HexagonInstrInfo::isExtendable ( const MachineInstr MI) const
bool HexagonInstrInfo::isExtended ( const MachineInstr MI) const
unsigned HexagonInstrInfo::isLoadFromStackSlot ( const MachineInstr MI,
int &  FrameIndex 
) const [virtual]

isLoadFromStackSlot - If the specified machine instruction is a direct load from a stack slot, return the virtual or physical register number of the destination along with the FrameIndex of the loaded stack slot. If not, return 0. This predicate must return 0 if the instruction has any side effects other than loading from the stack slot.

Definition at line 70 of file HexagonInstrInfo.cpp.

References llvm::MachineOperand::getImm(), llvm::MachineOperand::getIndex(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isFI(), and llvm::MachineOperand::isImm().

bool HexagonInstrInfo::isMemOp ( const MachineInstr MI) const
bool HexagonInstrInfo::isNewValue ( const MachineInstr MI) const
bool HexagonInstrInfo::isNewValueInst ( const MachineInstr MI) const

Definition at line 623 of file HexagonInstrInfo.cpp.

References isNewValueJump(), and isNewValueStore().

Referenced by isDotNewInst().

bool HexagonInstrInfo::isNewValueJump ( const MachineInstr MI) const

Definition at line 1501 of file HexagonInstrInfo.cpp.

References isBranch(), and isNewValue().

Referenced by isNewValueInst().

bool HexagonInstrInfo::isNewValueJumpCandidate ( const MachineInstr MI) const

Definition at line 1259 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode().

bool HexagonInstrInfo::isNewValueStore ( const MachineInstr MI) const
bool HexagonInstrInfo::isNewValueStore ( unsigned  Opcode) const
bool HexagonInstrInfo::isOperandExtended ( const MachineInstr MI,
unsigned short  OperandNum 
) const
bool HexagonInstrInfo::isPostIncrement ( const MachineInstr MI) const

Definition at line 1507 of file HexagonInstrInfo.cpp.

References getAddrMode(), and llvm::HexagonII::PostInc.

Referenced by GetPostIncrementOperand().

bool HexagonInstrInfo::isPredicable ( MachineInstr MI) const [virtual]
bool HexagonInstrInfo::isPredicated ( const MachineInstr MI) const [virtual]
bool HexagonInstrInfo::isPredicated ( unsigned  Opcode) const [virtual]
bool HexagonInstrInfo::isPredicatedNew ( const MachineInstr MI) const [virtual]
bool HexagonInstrInfo::isPredicatedNew ( unsigned  Opcode) const [virtual]
bool HexagonInstrInfo::isPredicatedTrue ( const MachineInstr MI) const [virtual]
bool HexagonInstrInfo::isPredicatedTrue ( unsigned  Opcode) const [virtual]
bool HexagonInstrInfo::isProfitableToDupForIfCvt ( MachineBasicBlock MBB,
unsigned  NumCycles,
const BranchProbability Probability 
) const [virtual]

Definition at line 1072 of file HexagonInstrInfo.cpp.

bool HexagonInstrInfo::isProfitableToIfCvt ( MachineBasicBlock MBB,
unsigned  NumCycles,
unsigned  ExtraPredCycles,
const BranchProbability Probability 
) const [virtual]

Definition at line 951 of file HexagonInstrInfo.cpp.

bool HexagonInstrInfo::isProfitableToIfCvt ( MachineBasicBlock TMBB,
unsigned  NumTCycles,
unsigned  ExtraTCycles,
MachineBasicBlock FMBB,
unsigned  NumFCycles,
unsigned  ExtraFCycles,
const BranchProbability Probability 
) const [virtual]

Definition at line 961 of file HexagonInstrInfo.cpp.

bool llvm::HexagonInstrInfo::isS12_Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isS4_0Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isS4_1Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isS4_2Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isS4_3Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isS6_Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isS8_Immediate ( const int  value) const
bool HexagonInstrInfo::isSaveCalleeSavedRegsCall ( const MachineInstr MI) const

Definition at line 633 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode().

bool HexagonInstrInfo::isSchedulingBoundary ( const MachineInstr MI,
const MachineBasicBlock MBB,
const MachineFunction MF 
) const [virtual]
bool HexagonInstrInfo::isSpillPredRegOp ( const MachineInstr MI) const
unsigned HexagonInstrInfo::isStoreToStackSlot ( const MachineInstr MI,
int &  FrameIndex 
) const [virtual]

isStoreToStackSlot - If the specified machine instruction is a direct store to a stack slot, return the virtual or physical register number of the source reg along with the FrameIndex of the loaded stack slot. If not, return 0. This predicate must return 0 if the instruction has any side effects other than storing to the stack slot.

Definition at line 97 of file HexagonInstrInfo.cpp.

References llvm::MachineOperand::getImm(), llvm::MachineOperand::getIndex(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isFI(), and llvm::MachineOperand::isImm().

bool llvm::HexagonInstrInfo::isU6_0Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isU6_1Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isU6_2Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isU6_3Immediate ( const int  value) const
bool llvm::HexagonInstrInfo::isU6_Immediate ( const int  value) const
bool HexagonInstrInfo::isValidAutoIncImm ( const EVT  VT,
const int  Offset 
) const
bool HexagonInstrInfo::isValidOffset ( const int  Opcode,
const int  Offset 
) const
void HexagonInstrInfo::loadRegFromAddr ( MachineFunction MF,
unsigned  DestReg,
SmallVectorImpl< MachineOperand > &  Addr,
const TargetRegisterClass RC,
SmallVectorImpl< MachineInstr * > &  NewMIs 
) const [virtual]

Definition at line 545 of file HexagonInstrInfo.cpp.

References llvm_unreachable.

void HexagonInstrInfo::loadRegFromStackSlot ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MBBI,
unsigned  DestReg,
int  FrameIndex,
const TargetRegisterClass RC,
const TargetRegisterInfo TRI 
) const [virtual]
bool HexagonInstrInfo::mayBeNewStore ( const MachineInstr MI) const
bool HexagonInstrInfo::NonExtEquivalentExists ( const MachineInstr MI) const
bool HexagonInstrInfo::PredicateInstruction ( MachineInstr MI,
const SmallVectorImpl< MachineOperand > &  Cond 
) const [virtual]
bool HexagonInstrInfo::PredOpcodeHasJMP_c ( Opcode_t  Opcode) const

Definition at line 1841 of file HexagonInstrInfo.cpp.

Referenced by AnalyzeBranch().

bool HexagonInstrInfo::PredOpcodeHasNot ( Opcode_t  Opcode) const

Definition at line 1850 of file HexagonInstrInfo.cpp.

Referenced by AnalyzeBranch().

unsigned HexagonInstrInfo::RemoveBranch ( MachineBasicBlock MBB) const [virtual]

Definition at line 305 of file HexagonInstrInfo.cpp.

References llvm::MachineBasicBlock::begin(), llvm::MachineBasicBlock::end(), and I.

Referenced by InsertBranch().

bool HexagonInstrInfo::ReverseBranchCondition ( SmallVectorImpl< MachineOperand > &  Cond) const [virtual]
void HexagonInstrInfo::storeRegToAddr ( MachineFunction MF,
unsigned  SrcReg,
bool  isKill,
SmallVectorImpl< MachineOperand > &  Addr,
const TargetRegisterClass RC,
SmallVectorImpl< MachineInstr * > &  NewMIs 
) const [virtual]

Definition at line 503 of file HexagonInstrInfo.cpp.

References llvm_unreachable.

void HexagonInstrInfo::storeRegToStackSlot ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MBBI,
unsigned  SrcReg,
bool  isKill,
int  FrameIndex,
const TargetRegisterClass RC,
const TargetRegisterInfo TRI 
) const [virtual]
bool HexagonInstrInfo::SubsumesPredicate ( const SmallVectorImpl< MachineOperand > &  Pred1,
const SmallVectorImpl< MachineOperand > &  Pred2 
) const [virtual]

Definition at line 1049 of file HexagonInstrInfo.cpp.


The documentation for this class was generated from the following files: