LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | List of all members
llvm::HexagonInstrInfo Class Reference

#include <HexagonInstrInfo.h>

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

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. More...
 
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 61 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 339 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 555 of file HexagonInstrInfo.cpp.

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

Definition at line 108 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 1551 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 1534 of file HexagonInstrInfo.cpp.

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

unsigned HexagonInstrInfo::getInvertedPredicatedOpcode ( const int  Opc) const

Definition at line 730 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
inlinevirtual

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 41 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 621 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 1275 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode().

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

Definition at line 1079 of file HexagonInstrInfo.cpp.

References llvm::MachineInstr::getOpcode().

bool HexagonInstrInfo::isDotNewInst ( const MachineInstr MI) const

Definition at line 1520 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 72 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 625 of file HexagonInstrInfo.cpp.

References isNewValueJump(), and isNewValueStore().

Referenced by isDotNewInst().

bool HexagonInstrInfo::isNewValueJump ( const MachineInstr MI) const

Definition at line 1503 of file HexagonInstrInfo.cpp.

References isBranch(), and isNewValue().

Referenced by isNewValueInst().

bool HexagonInstrInfo::isNewValueJumpCandidate ( const MachineInstr MI) const

Definition at line 1261 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 1509 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 1074 of file HexagonInstrInfo.cpp.

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

Definition at line 953 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 963 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 635 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 99 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 547 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 1843 of file HexagonInstrInfo.cpp.

Referenced by AnalyzeBranch().

bool HexagonInstrInfo::PredOpcodeHasNot ( Opcode_t  Opcode) const

Definition at line 1852 of file HexagonInstrInfo.cpp.

Referenced by AnalyzeBranch().

unsigned HexagonInstrInfo::RemoveBranch ( MachineBasicBlock MBB) const
virtual

Definition at line 307 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 505 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 1051 of file HexagonInstrInfo.cpp.


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