LLVM API Documentation
#include "X86InstrInfo.h"#include "X86.h"#include "X86GenInstrInfo.inc"#include "X86InstrBuilder.h"#include "X86MachineFunctionInfo.h"#include "X86Subtarget.h"#include "X86TargetMachine.h"#include "llvm/DerivedTypes.h"#include "llvm/ADT/STLExtras.h"#include "llvm/CodeGen/MachineConstantPool.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineInstrBuilder.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/CodeGen/LiveVariables.h"#include "llvm/Support/CommandLine.h"#include "llvm/Target/TargetOptions.h"#include "llvm/Target/TargetAsmInfo.h"
Go to the source code of this file.
| static MachineInstr* FuseInst | ( | MachineFunction & | MF, | |
| unsigned | Opcode, | |||
| unsigned | OpNo, | |||
| const SmallVectorImpl< MachineOperand > & | MOs, | |||
| MachineInstr * | MI, | |||
| const TargetInstrInfo & | TII | |||
| ) | [static] |
Definition at line 1972 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::MachineFunction::CreateMachineInstr(), llvm::TargetInstrInfo::get(), llvm::MachineInstr::getDebugLoc(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::isReg(), llvm::SmallVectorImpl< T >::size(), and X86InstrAddOperand().
| static MachineInstr* FuseTwoAddrInst | ( | MachineFunction & | MF, | |
| unsigned | Opcode, | |||
| const SmallVectorImpl< MachineOperand > & | MOs, | |||
| MachineInstr * | MI, | |||
| const TargetInstrInfo & | TII | |||
| ) | [static] |
Definition at line 1945 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::MachineFunction::CreateMachineInstr(), llvm::TargetInstrInfo::get(), llvm::MachineInstr::getDebugLoc(), llvm::MachineInstr::getDesc(), llvm::MachineInstr::getNumOperands(), llvm::TargetInstrDesc::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::SmallVectorImpl< T >::size(), and X86InstrAddOperand().
| static X86::CondCode GetCondFromBranchOpc | ( | unsigned | BrOpc | ) | [static] |
Definition at line 1400 of file X86InstrInfo.cpp.
References llvm::X86::COND_A, llvm::X86::COND_AE, llvm::X86::COND_B, llvm::X86::COND_BE, llvm::X86::COND_E, llvm::X86::COND_G, llvm::X86::COND_GE, llvm::X86::COND_INVALID, llvm::X86::COND_L, llvm::X86::COND_LE, llvm::X86::COND_NE, llvm::X86::COND_NO, llvm::X86::COND_NP, llvm::X86::COND_NS, llvm::X86::COND_O, llvm::X86::COND_P, and llvm::X86::COND_S.
| static unsigned getDisplacementFieldSize | ( | const MachineOperand * | RelocOp | ) | [static] |
Definition at line 2680 of file X86InstrInfo.cpp.
References llvm::MachineOperand::isCPI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isJTI(), sizeConstant(), sizeConstPoolAddress(), sizeGlobalAddress(), and sizeJumpTableAddress().
Referenced by getMemModRMByteSize().
| static unsigned GetInstSizeWithDesc | ( | const MachineInstr & | MI, | |
| const TargetInstrDesc * | Desc, | |||
| bool | IsPIC, | |||
| bool | Is64BitMode | |||
| ) | [static] |
Definition at line 2776 of file X86InstrInfo.cpp.
References llvm::X86II::AddRegFrm, llvm::X86II::AdSize, AI, llvm::cerr(), llvm::X86II::D8, llvm::X86II::D9, llvm::X86II::DA, llvm::X86II::DB, llvm::TargetInstrInfo::DBG_LABEL, llvm::X86II::DC, llvm::X86II::DD, llvm::X86II::DE, llvm::TargetInstrInfo::DECLARE, llvm::X86InstrInfo::determineREX(), llvm::X86II::DF, llvm::MachineInstr::dump(), llvm::TargetInstrInfo::EH_LABEL, llvm::X86II::FormMask, llvm::X86II::FS, llvm::TargetAsmInfo::getInlineAsmLength(), getMemModRMByteSize(), llvm::TargetInstrDesc::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::TargetInstrDesc::getOperandConstraint(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getSymbolName(), llvm::MachineFunction::getTarget(), llvm::TargetMachine::getTargetAsmInfo(), llvm::X86II::GS, llvm::TargetInstrInfo::IMPLICIT_DEF, llvm::TargetInstrInfo::INLINEASM, llvm::MachineOperand::isCPI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isJTI(), llvm::MachineOperand::isMBB(), llvm::MachineOperand::isSymbol(), llvm::TargetInstrDesc::isVariadic(), llvm::X86II::LOCK, llvm::X86II::MRM0m, llvm::X86II::MRM0r, llvm::X86II::MRM1m, llvm::X86II::MRM1r, llvm::X86II::MRM2m, llvm::X86II::MRM2r, llvm::X86II::MRM3m, llvm::X86II::MRM3r, llvm::X86II::MRM4m, llvm::X86II::MRM4r, llvm::X86II::MRM5m, llvm::X86II::MRM5r, llvm::X86II::MRM6m, llvm::X86II::MRM6r, llvm::X86II::MRM7m, llvm::X86II::MRM7r, llvm::X86II::MRMDestMem, llvm::X86II::MRMDestReg, llvm::X86II::MRMInitReg, llvm::X86II::MRMSrcMem, llvm::X86II::MRMSrcReg, llvm::X86II::Op0Mask, llvm::TargetInstrDesc::Opcode, llvm::X86II::OpSize, llvm::X86II::Pseudo, llvm::X86II::RawFrm, llvm::X86II::REP, llvm::X86II::SegOvrMask, sizeConstant(), sizeConstPoolAddress(), sizeExternalSymbolAddress(), sizeGlobalAddress(), sizeJumpTableAddress(), llvm::X86InstrInfo::sizeOfImm(), sizePCRelativeBlockAddress(), sizeRegModRMByte(), llvm::X86II::T8, llvm::X86II::TA, llvm::X86II::TB, llvm::TOI::TIED_TO, llvm::TargetInstrDesc::TSFlags, llvm::X86II::XD, and llvm::X86II::XS.
Referenced by llvm::X86InstrInfo::GetInstSizeInBytes().
| static unsigned getLoadRegOpcode | ( | const TargetRegisterClass * | RC, | |
| bool | isStackAligned | |||
| ) | [static] |
Definition at line 1843 of file X86InstrInfo.cpp.
Referenced by llvm::X86InstrInfo::loadRegFromAddr(), llvm::X86InstrInfo::loadRegFromStackSlot(), and llvm::X86InstrInfo::unfoldMemoryOperand().
| static unsigned getMemModRMByteSize | ( | const MachineInstr & | MI, | |
| unsigned | Op, | |||
| bool | IsPIC, | |||
| bool | Is64BitMode | |||
| ) | [static] |
Definition at line 2701 of file X86InstrInfo.cpp.
References Base, BaseReg, llvm::N86::EBP, llvm::N86::ESP, getDisplacementFieldSize(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::X86RegisterInfo::getX86RegNum(), IndexReg, llvm::MachineOperand::isCPI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isJTI(), and sizeSIBByte().
Referenced by GetInstSizeWithDesc().
| static unsigned getStoreRegOpcode | ( | const TargetRegisterClass * | RC, | |
| bool | isStackAligned | |||
| ) | [static] |
Definition at line 1778 of file X86InstrInfo.cpp.
Referenced by llvm::X86InstrInfo::storeRegToAddr(), llvm::X86InstrInfo::storeRegToStackSlot(), and llvm::X86InstrInfo::unfoldMemoryOperand().
| static bool hasLiveCondCodeDef | ( | MachineInstr * | MI | ) | [static] |
hasLiveCondCodeDef - True if MI has a condition code def, e.g. EFLAGS, that is not marked dead.
Definition at line 992 of file X86InstrInfo.cpp.
References llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isDead(), llvm::MachineOperand::isDef(), and llvm::MachineOperand::isReg().
Referenced by llvm::X86InstrInfo::convertToThreeAddress().
| static bool isBrAnalysisUnpredicatedTerminator | ( | const MachineInstr * | MI, | |
| const X86InstrInfo & | TII | |||
| ) | [static] |
Definition at line 1481 of file X86InstrInfo.cpp.
References llvm::MachineInstr::getOpcode(), and llvm::X86InstrInfo::isUnpredicatedTerminator().
Referenced by llvm::X86InstrInfo::AnalyzeBranch().
| static bool isGVStub | ( | GlobalValue * | GV, | |
| X86TargetMachine & | TM | |||
| ) | [inline, static] |
isGVStub - Return true if the GV requires an extra load to get the real address.
Definition at line 789 of file X86InstrInfo.cpp.
References llvm::TargetMachine::getSubtarget().
Referenced by llvm::X86InstrInfo::isInvariantLoad(), and llvm::X86InstrInfo::isReallyTriviallyReMaterializable().
| static bool isSafeToClobberEFLAGS | ( | MachineBasicBlock & | MBB, | |
| MachineBasicBlock::iterator | I | |||
| ) | [static] |
isSafeToClobberEFLAGS - Return true if it's safe insert an instruction that would clobber the EFLAGS condition register. Note the result may be conservative. If it cannot definitely determine the safety after visiting two instructions it assumes it's not safe.
Definition at line 869 of file X86InstrInfo.cpp.
References llvm::MachineBasicBlock::end(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), and llvm::MachineOperand::isUse().
Referenced by llvm::X86InstrInfo::reMaterialize().
| static MachineInstr* MakeM0Inst | ( | const TargetInstrInfo & | TII, | |
| unsigned | Opcode, | |||
| const SmallVectorImpl< MachineOperand > & | MOs, | |||
| MachineInstr * | MI | |||
| ) | [static] |
Definition at line 1996 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::TargetInstrInfo::get(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), MF, llvm::SmallVectorImpl< T >::size(), and X86InstrAddOperand().
| static bool regIsPICBase | ( | unsigned | BaseReg, | |
| const MachineRegisterInfo & | MRI | |||
| ) | [static] |
regIsPICBase - Return true if register is PIC base (i.e.g defined by X86::MOVPC32r.
Definition at line 774 of file X86InstrInfo.cpp.
References llvm::MachineRegisterInfo::def_begin(), llvm::MachineRegisterInfo::def_end(), E, and llvm::MachineInstr::getOpcode().
Referenced by llvm::X86InstrInfo::isReallyTriviallyReMaterializable().
Definition at line 2668 of file X86InstrInfo.cpp.
Referenced by getDisplacementFieldSize(), and GetInstSizeWithDesc().
| static unsigned sizeConstPoolAddress | ( | bool | dword | ) | [static] |
sizeConstPoolAddress - Give the size of the emission of this constant pool address
Definition at line 2650 of file X86InstrInfo.cpp.
Referenced by getDisplacementFieldSize(), and GetInstSizeWithDesc().
| static unsigned sizeExternalSymbolAddress | ( | bool | dword | ) | [static] |
sizeExternalSymbolAddress - Give the size of the emission of this external symbol
Definition at line 2657 of file X86InstrInfo.cpp.
Referenced by GetInstSizeWithDesc().
| static unsigned sizeGlobalAddress | ( | bool | dword | ) | [static] |
sizeGlobalAddress - Give the size of the emission of this global address
Definition at line 2643 of file X86InstrInfo.cpp.
Referenced by getDisplacementFieldSize(), and GetInstSizeWithDesc().
| static unsigned sizeJumpTableAddress | ( | bool | dword | ) | [static] |
sizeJumpTableAddress - Give the size of the emission of this jump table address
Definition at line 2664 of file X86InstrInfo.cpp.
Referenced by getDisplacementFieldSize(), and GetInstSizeWithDesc().
| static unsigned sizePCRelativeBlockAddress | ( | ) | [static] |
sizePCRelativeBlockAddress - This method returns the size of a PC relative block address instruction
Definition at line 2637 of file X86InstrInfo.cpp.
Referenced by GetInstSizeWithDesc().
| static unsigned sizeRegModRMByte | ( | ) | [static] |
| static unsigned sizeSIBByte | ( | ) | [static] |
| static const MachineInstrBuilder& X86InstrAddOperand | ( | MachineInstrBuilder & | MIB, | |
| const MachineOperand & | MO | |||
| ) | [static] |
Definition at line 1595 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addConstantPoolIndex(), llvm::MachineInstrBuilder::addExternalSymbol(), llvm::MachineInstrBuilder::addFrameIndex(), llvm::MachineInstrBuilder::addGlobalAddress(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addJumpTableIndex(), llvm::MachineInstrBuilder::addReg(), llvm::MachineOperand::getGlobal(), llvm::MachineOperand::getImm(), llvm::MachineOperand::getIndex(), llvm::MachineOperand::getOffset(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::MachineOperand::getSymbolName(), llvm::MachineOperand::isCPI(), llvm::MachineOperand::isDead(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isFI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isImplicit(), llvm::MachineOperand::isJTI(), llvm::MachineOperand::isKill(), llvm::MachineOperand::isReg(), and llvm::MachineOperand::isSymbol().
Referenced by FuseInst(), FuseTwoAddrInst(), llvm::X86InstrInfo::loadRegFromAddr(), MakeM0Inst(), llvm::X86InstrInfo::storeRegToAddr(), and llvm::X86InstrInfo::unfoldMemoryOperand().
cl::opt<bool> PrintFailedFusing("print-failed-fuse-candidates", cl::desc("Print instructions that the allocator wants to"" fuse, but the X86 backend currently can't"), cl::Hidden) [static] |
cl::opt<bool> ReMatPICStubLoad("remat-pic-stub-load", cl::desc("Re-materialize load from stub in PIC mode"), cl::init(false), cl::Hidden) [static] |
Referenced by llvm::X86InstrInfo::isReallyTriviallyReMaterializable().